はじめに
kubectl get
とjq
コマンドを活用して、リソースの情報を抽出して取得する方法について解説していきます。
jqコマンド
jq
コマンドとは、JSON形式から値を取り出したり、集計したりできるコマンドです。
jq
下記でインストールできます。
brew install jq
下記がjq
コマンドの例です。|
(パイプ)やsort_by
などの関数を使うことができます。
jq '.[] | .name'
jq 'sort_by(.foo)'
マニュアルは下記になります。
jq Manual (development version)
kubectlとjq
kubectl get
とjq
を使うことでさまざまな処理をしながら情報を出力できます。
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 get
とjq
を利用した例を紹介します。
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