【Kubernetes】kubectlとjqで情報取得

スポンサーリンク

はじめに

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

jqコマンド

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

jq

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

brew install jq

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

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

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

jq Manual (development version)

kubectlとjq

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

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

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

【Kubernetes】YAML形式とJSON形式でオブジェクトを取得
はじめにKubernetesでオブジェクトをYAML形式、JSON形式で取得する方法を紹介します。YAML形式で取得基本的に-oyamlをつけることでYAML形式で取得できます。kubectlgetpod-oyamlkubectlgetde...

kubectlのみ

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

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

使用例

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

IP Address一覧

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

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

ReadyでないPod

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

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

NamespaceとPod名

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

NamespaceとPod名とイメージ

kubectl get pod -o json | jq -r '.items[] | {ns:.metadata.namespace, name:.metadata.name,image:.spec.containers[].image}'
❯ kubectl get pod -o json | jq -r '.items[] | {ns:.metadata.namespace, name:.metadata.name,image:.spec.containers[].image}'
{
  "ns": "default",
  "name": "myapp-599c74f9fd-5cc7j",
  "image": "nginx"
}
{
  "ns": "default",
  "name": "myapp-599c74f9fd-dx2cn",
  "image": "nginx"
}
{
  "ns": "default",
  "name": "myapp-599c74f9fd-qpt5z",
  "image": "nginx"
}

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

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'
❯ 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'
myapp-5769655597-jvkcd
 Container name: web-container
 Req. RAM: 64Mi
 Lim. RAM: 128Mi
 Req. CPU: 250m
 Lim. CPU: 500m
myapp-5769655597-pg6kh
 Container name: web-container
 Req. RAM: 64Mi
 Lim. RAM: 128Mi
 Req. CPU: 250m
 Lim. CPU: 500m
myapp-5769655597-q9htl
 Container name: web-container
 Req. RAM: 64Mi
 Lim. RAM: 128Mi
 Req. CPU: 250m
 Lim. CPU: 500m

参考

タイトルとURLをコピーしました