【Kubernetes】kubectlとjqで情報取得

2022.02.08
2024.03.24
Kubernetes
jqkubectl

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

はじめに

kubectl getjqコマンドを活用して、リソースの情報を抽出して取得する方法について解説していきます。

jqコマンド

jqコマンドとは、JSON形式から値を取り出したり、集計したりできるコマンドです。

Redirecting to jqlang.github.io

下記でインストールできます。

1brew install jq

下記がjqコマンドの例です。|(パイプ)やsort_byなどの関数を使うことができます。

1jq '.[] | .name'
2jq 'sort_by(.foo)'

マニュアルは下記になります。

Redirecting to jqlang.github.io

kubectlとjq

kubectl getjqを使うことでさまざまな処理をしながら情報を出力できます。

1kubectl get pod -o json | jq '.item[].metadata.name'

JSON形式で出力する方法は下記で紹介しています。

【Kubernetes】YAML形式とJSON形式でオブジェクトを取得

【Kubernetes】YAML形式とJSON形式でオブジェクトを取得

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

kubectlのみ

シンプルなフィルタリングなどであれば、kubectlだけで処理することもできます。

1kubectl get pod <pod name> -o jsonpath="{.spec.containers[*].name}"

使用例

実際にkubectl getjqを利用した例を紹介します。

IP Address一覧

@tsvとすると同じ行に並べて出力できます。(tsv形式)

1kubectl get pod -o json | jq -r '.items[] | [.metadata.name, .status.podIP] | @tsv'
1❯ kubectl get pod -o json | jq -r '.items[] | [.metadata.name, .status.podIP] | @tsv'
2myapp-599c74f9fd-g2lz4  10.1.2.109
3myapp-599c74f9fd-m8kmt  10.1.2.110
4myapp-599c74f9fd-nxwkr  10.1.2.111

ReadyでないPod

selectなどの関数を活用することでさまざまなフィルタリングができます。

1kubectl get pod -o json | jq -r '.items[] | select(.status.containerStatuses[].ready==false) | .metadata.name'
1❯ kubectl get pod -o json | jq -r '.items[] | select(.status.containerStatuses[].ready==false) | .metadata.name'
2myapp-599c74f9fd-5cc7j
3myapp-599c74f9fd-dx2cn
4myapp-599c74f9fd-g2lz4
5myapp-599c74f9fd-m8kmt
6myapp-599c74f9fd-qpt5z

NamespaceとPod名

1kubectl get pod -o json | jq -r '.items[] |"\(.metadata.namespace)/\(.metadata.name)"'
1❯ kubectl get pod -o json | jq -r '.items[] |"\(.metadata.namespace)/\(.metadata.name)"'
2default/myapp-599c74f9fd-5cc7j
3default/myapp-599c74f9fd-dx2cn
4default/myapp-599c74f9fd-qpt5z

NamespaceとPod名とイメージ

1kubectl get pod -o json | jq -r '.items[] | {ns:.metadata.namespace, name:.metadata.name,image:.spec.containers[].image}'
1❯ kubectl get pod -o json | jq -r '.items[] | {ns:.metadata.namespace, name:.metadata.name,image:.spec.containers[].image}'
2{
3  "ns": "default",
4  "name": "myapp-599c74f9fd-5cc7j",
5  "image": "nginx"
6}
7{
8  "ns": "default",
9  "name": "myapp-599c74f9fd-dx2cn",
10  "image": "nginx"
11}
12{
13  "ns": "default",
14  "name": "myapp-599c74f9fd-qpt5z",
15  "image": "nginx"
16}

Pod名とコンテナ名とリソース要求・制限

1kubectl get pod -o json | jq -r '.items[] | .metadata.name + " \n Container name: " + .spec.containers[].name + " \n Req. RAM: " + .spec.containers[].resources.requests.memory + " \n Lim. RAM: " + .spec.containers[].resources.limits.memory + " \n Req. CPU: " + .spec.containers[].resources.requests.cpu + " \n Lim. CPU: " + .spec.containers[].resources.limits.cpu'
1❯ kubectl get pod -o json | jq -r '.items[] | .metadata.name + " \n Container name: " + .spec.containers[].name + " \n Req. RAM: " + .spec.containers[].resources.requests.memory + " \n Lim. RAM: " + .spec.containers[].resources.limits.memory + " \n Req. CPU: " + .spec.containers[].resources.requests.cpu + " \n Lim. CPU: " + .spec.containers[].resources.limits.cpu'
2myapp-5769655597-jvkcd
3 Container name: web-container
4 Req. RAM: 64Mi
5 Lim. RAM: 128Mi
6 Req. CPU: 250m
7 Lim. CPU: 500m
8myapp-5769655597-pg6kh
9 Container name: web-container
10 Req. RAM: 64Mi
11 Lim. RAM: 128Mi
12 Req. CPU: 250m
13 Lim. CPU: 500m
14myapp-5769655597-q9htl
15 Container name: web-container
16 Req. RAM: 64Mi
17 Lim. RAM: 128Mi
18 Req. CPU: 250m
19 Lim. CPU: 500m

参考

Support

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

buy me a coffee
Share

Profile

author

Masa

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

buy me a coffee