0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Kubernetes]Kubectlのリソース表示(応用編)

Last updated at Posted at 2020-07-31

はじめに

Kubenetesのリソース表示にはkubectl getコマンドを多く利用すると思います。

kubectl getコマンドを実行すると、APIサーバからJSON形式で結果が返ってきて、それを人が見やすい形式にして画面に表示します。その際、全ての情報ではなく一部の情報のみが表示されます。
-o wideオプションや-Lオプションを付けると表示される情報は増えますが、JSONで表示される情報はもっとあります。

例えばkubectl get podコマンドで表示される情報はこれだけですが、

$ kubectl get pod nginx1
NAME     READY   STATUS    RESTARTS   AGE
nginx1   1/1     Running   2          5d1h

JSON形式で表示するとこんな感じです。

$ kubectl get pod nginx1 -o json
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "annotations": {
            "cni.projectcalico.org/podIP": "192.168.69.195/32",
            "cni.projectcalico.org/podIPs": "192.168.69.195/32"
        },
        "creationTimestamp": "2020-07-26T12:16:29Z",
        "labels": {
            "run": "nginx1"
        },
        "managedFields": [
            {
                "apiVersion": "v1",
                "fieldsType": "FieldsV1",
                "fieldsV1": {
                    "f:metadata": {
                        "f:labels": {
                            ".": {},
                            "f:run": {}
・・・省略・・・

kubectlコマンドではJSON Pathを指定することにより、kubectl getコマンドでは表示されない情報を抜き出すことができます。今回はこれらの方法を確認したいと思います。

JSONPath Support

ソート

kubectl getコマンドの出力を指定したJSON Pathの項目でソートすることができます。

これはソートオプションなしです。

$ kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
nginx-dep-7d7d744c9-gk78k   1/1     Running   2          4d23h
nginx-dep-7d7d744c9-mzb9g   1/1     Running   2          4d23h
nginx1                      1/1     Running   2          5d
nginx2                      1/1     Running   2          5d
sample-web1                 1/1     Running   1          46h

これをPod名(.metadata.name)でソートするとこうなります。

$ kubectl get pod --sort-by=.metadata.name
NAME                        READY   STATUS    RESTARTS   AGE
nginx1                      1/1     Running   2          5d
nginx2                      1/1     Running   2          5d
nginx-dep-7d7d744c9-gk78k   1/1     Running   2          4d23h
nginx-dep-7d7d744c9-mzb9g   1/1     Running   2          4d23h
sample-web1                 1/1     Running   1          46h

カスタムカラム

指定した項目を自分で指定したカラムで出力することができます。
この例は、各ノードのCPU数、メモリ容量を表示しています。各項目は「カラム名:JSON Path」で指定します。カラム名は任意で設定できます。
また、--sort-byオプションと組み合わせて使うこともできます。

$ kubectl get node -o custom-columns=NAME:.metadata.name,CPU:.status.capacity.cpu,MEM:.status.capacity.memory 
NAME           CPU   MEM
k8s-master     2     2914176Ki
k8s-worker01   2     2914176Ki
k8s-worker02   2     2914176Ki

JSON Path

全てのPod名を表示します。

$ kubectl get pods -o jsonpath='{.items[*].metadata.name}'
nginx-dep-7d7d744c9-gk78k nginx-dep-7d7d744c9-mzb9g nginx1 nginx2 sample-web1

これもソートできます。

$ kubectl get pods -o jsonpath='{.items[*].metadata.name}' --sort-by=.metadata.name
nginx1 nginx2 nginx-dep-7d7d744c9-gk78k nginx-dep-7d7d744c9-mzb9g sample-web1

.item[*]の数字を指定することで、その順番のPod名のみを表示します。

$ kubectl get pods -o jsonpath='{.items[3].metadata.name}'
nginx2

全てのノード名とCPU数を一行で表示します。

$ kubectl get node -o jsonpath='{.items[*].metadata.name}{.items[*].status.capacity.cpu}'
k8s-master k8s-worker01 k8s-worker022 2 2

全てのノード名とCPU数の間に改行を入れて表示します。"\n"が改行を表します。

$ kubectl get node -o jsonpath='{.items[*].metadata.name}{"\n"}{.items[*].status.capacity.cpu}'
k8s-master k8s-worker01 k8s-worker02
2 2 2

全てのノード名をタブ区切りで表示します。"\t"がタブを表します。

$ kubectl get node -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{end}'
k8s-master      k8s-worker01    k8s-worker02

各ノード名とCPU数をタブ区切りで表示し、改行を入れてすべてのノード名を表示します。

$ kubectl get node -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.cpu}{"\
n"}{end}'
k8s-master      2
k8s-worker01    2
k8s-worker02    2

まとめ

JSON Pathを活用すると、必要な情報だけをピンポイントで抜き出したり、スクリプトで活用できたりしますね。
各リソースに対応するJSON Pathを書くのが難しいですが、この辺もまとめられればと思います。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?