【Kubernetes】kubespyでリソース監視

2022.03.14
2024.03.24
Kubernetes
kubespy

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

kubespyとはどんなものか、どうやって使うか、実際にkubespyを使ってKubernetesリソースを監視してみます。

kubespyとは

kubespyとは、リアルタイムにKubernetesリソースを監視できるツールです。

Kubernetesリソースが作成されたり、変更されるときに何が起こっているかをリアルタイムに表示するツールになっています。

GitHub - pulumi/kubespy: Tools for observing Kubernetes resources in real time, powered by Pulumi.

GitHub - pulumi/kubespy: Tools for observing Kubernetes resources in real time, powered by Pulumi.

Tools for observing Kubernetes resources in real time, powered by Pulumi. - pulumi/kubespy

インストール

brewを使う場合、下記でインストールできます。

1brew install kubespy

使い方

kubespyには3つのコマンドがあります。

status

.statusフィールドの変更をJSON diffとして表示します。

1kubespy status <apiVersion> <kind> [<namespace>/]<name>
Kubernetesオブジェクトを理解する

Kubernetesオブジェクトを理解する

このページでは、KubernetesオブジェクトがKubernetes APIでどのように表現されているか、またそれらを.yamlフォーマットでどのように表現するかを説明します。 Kubernetesオブジェクトを理解する Kubernetesオブジェクト は、Kubernetes上で永続的なエンティティです。Kubernetesはこれらのエンティティを使い、クラスターの状態を表現します。具体的に言うと、下記のような内容が表現できます: どのようなコンテナ化されたアプリケーションが稼働しているか(またそれらはどのノード上で動いているか) それらのアプリケーションから利用可能なリソース アプリケーションがどのように振る舞うかのポリシー、例えば再起動、アップグレード、耐障害性ポリシーなど Kubernetesオブジェクトは「意図の記録」です。一度オブジェクトを作成すると、Kubernetesは常にそのオブジェクトが存在し続けるように動きます。オブジェクトを作成することで、Kubernetesに対し効果的にあなたのクラスターのワークロードがこのようになっていて欲しいと伝えているのです。これが、あなたのクラスターの望ましい状態です。 Kubernetesオブジェクトを操作するには、作成、変更、または削除に関わらずKubernetes APIを使う必要があるでしょう。例えばkubectlコマンドラインインターフェースを使った場合、このCLIが処理に必要なKubernetes API命令を、あなたに代わり発行します。あなたのプログラムからクライアントライブラリを利用し、直接Kubernetes APIを利用することも可能です。 オブジェクトのspec(仕様)とstatus(状態) ほとんどのKubernetesオブジェクトは、オブジェクトの設定を管理する2つの入れ子になったオブジェクトのフィールドを持っています。それはオブジェクト spec とオブジェクト status です。specを持っているオブジェクトに関しては、オブジェクト作成時にspecを設定する必要があり、望ましい状態としてオブジェクトに持たせたい特徴を記述する必要があります。 status オブジェクトはオブジェクトの 現在の状態 を示し、その情報はKubernetesシステムとそのコンポーネントにより提供、更新されます。Kubernetesコントロールプレーンは、あなたから指定された望ましい状態と現在の状態が一致するよう常にかつ積極的に管理をします。 例えば、KubernetesのDeploymentはクラスター上で稼働するアプリケーションを表現するオブジェクトです。Deploymentを作成するとき、アプリケーションの複製を3つ稼働させるようDeploymentのspecで指定するかもしれません。KubernetesはDeploymentのspecを読み取り、指定されたアプリケーションを3つ起動し、現在の状態がspecに一致するようにします。もしこれらのインスタンスでどれかが落ちた場合(statusが変わる)、Kubernetesはspecと、statusの違いに反応し、修正しようとします。この場合は、落ちたインスタンスの代わりのインスタンスを立ち上げます。 spec、status、metadataに関するさらなる情報は、Kubernetes API Conventionsをご確認ください。 Kubernetesオブジェクトを記述する Kubernetesでオブジェクトを作成する場合、オブジェクトの基本的な情報(例えば名前)と共に、望ましい状態を記述したオブジェクトのspecを渡さなければいけません。KubernetesAPIを利用しオブジェクトを作成する場合(直接APIを呼ぶか、kubectlを利用するかに関わらず)、APIリクエストはそれらの情報をJSON形式でリクエストのBody部に含んでいなければなりません。 ここで、KubernetesのDeploymentに必要なフィールドとオブジェクトのspecを記載した.yamlファイルの例を示します: application/deployment.yaml apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.

changes

全てのフィールドの変更をJSON diffとして表示します。

1kubespy changes <apiVersion> <kind> [<namespace>/]<name>

trace

Kubernetesリソースが行っていることをわかりやすくまとめて表示します。

1kubespy trace <kind> [<namespace>/]<name>

Podを監視

kubespy statuskubespy changesでPodが作成されてたときの動きを見てみたいと思います。

監視するPodのマニフェストpod.ymlは下記になります。

1apiVersion: v1
2kind: Pod
3metadata:
4  name: nginx-pod
5  labels:
6    app: nginx
7spec:
8  containers:
9  - name: nginx-container
10    image: nginx
11    ports:
12      - containerPort: 80

statusで監視

まずは下記コマンドでPodの監視が開始されます。

1kubespy status v1 Pod nginx

マニフェストを反映させてPodを作成すると、.statusフィールドの差分が表示されます。

1kubectl apply -f pod.yml

一旦、Podを削除します。

1kubectl delete -f pod.yml

changesで監視

次にchangesで監視してみます。

1kubespy changes v1 Pod nginx

再度、マニフェストを反映させてPodを作成します。

1kubectl apply -f pod.yml

kubespy statusとは異なり、全てのフィールドの差分が表示されます。

作成したPodは削除しておきます。

1kubectl delete -f pod.yml

Deploymentを監視

次は、Deploymentが作成されるのをkubespy traceで監視します。

作成するDeploymentのマニフェストdeployment.ymlは下記の通りです。

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: nginx-deployment
5spec:
6  replicas: 4
7  selector:
8    matchLabels:
9      app: nginx
10  template:
11    metadata:
12      labels:
13        app: nginx
14    spec:
15      containers:
16      - name: nginx
17        image: nginx:1.21
18        ports:
19          - containerPort: 80

下記コマンドでDeploymentの監視をします。

1kubespy trace deployment nginx-deployment

マニフェストを反映させてDeploymentを作成すると、Deploymentの管理下にあるPodが作成されていくのが表示されているのがわかります。

1kubectl apply -f deployment.yml

作成したリソースは削除しておきます。

1kubectl delete -f deployment.yml

Serviceを監視

最後にServiceを監視してみます。

作成するServiceと紐づくDeploymentのマニフェストnginx.ymlは下記になります。

1apiVersion: v1
2kind: Service
3metadata:
4  name: nginx-service
5  labels:
6    app: nginx-service
7spec:
8  ports:
9  - port: 80
10    protocol: TCP
11    targetPort: 80
12  selector:
13    app: nginx
14---
15apiVersion: apps/v1
16kind: Deployment
17metadata:
18  name: nginx-deployment
19  labels:
20    app: nginx-deployment
21spec:
22  replicas: 4
23  selector:
24    matchLabels:
25      app: nginx
26  template:
27    metadata:
28      labels:
29        app: nginx
30    spec:
31      containers:
32      - name: nginx
33        image: nginx:1.21
34        ports:
35          - containerPort: 80

下記コマンドでServiceの監視をします。

1kubespy trace service nginx-service

マニフェストを反映させてServiceを作成すると、Serviceに紐づくPodとそのIPアドレスがReadyになると表示されていくのがわかります。

1kubectl apply -f deployment.yml

まとめ

  • kubespyを使うとKubernetesリソースをリアルタイムで監視できる

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee