【Kubernetes】kubectlとjqで情報取得
2022.02.08
2024.03.24
Kubernetes
jqkubectl
はじめに
kubectl get
とjq
コマンドを活用して、リソースの情報を抽出して取得する方法について解説していきます。
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 get
とjq
を使うことでさまざまな処理をしながら情報を出力できます。
1kubectl get pod -o json | jq '.item[].metadata.name'
JSON形式で出力する方法は下記で紹介しています。
【Kubernetes】YAML形式とJSON形式でオブジェクトを取得
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
kubectlのみ
シンプルなフィルタリングなどであれば、kubectl
だけで処理することもできます。
1kubectl get pod <pod name> -o jsonpath="{.spec.containers[*].name}"
使用例
実際にkubectl get
とjq
を利用した例を紹介します。
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
参考
- jq Manual (development version)
- kubectlチートシート | Kubernetes
- jq コマンドを使う日常のご紹介 - Qiita
- My jq Cheatsheet. kubectl with jq is so powerful | by Stefanie Lai | Geek Culture | Medium
- Playing with kubectl output
Share
関連記事
IstioとJaegerで分散トレーシングを試してみる
2023.11.15
【Kubernetes初めの一歩】リソースざっくりまとめ
2021.10.06
【Linkerd】実際に動かしてざっくり理解するLinkerd
2022.09.12