テストの実行後にログを収集するスクリプトで、ポッド内のすべてのコンテナーを一覧表示しようとしています。 kubectl describe pods -l k8s-app=kube-dns
多くの情報を返しますが、私は次のような戻り値を探しています。
etcd
kube2sky
skydns
記述出力をフォーマットする簡単な方法がわかりません。別のコマンドはありますか?(そして最悪の場合、describeの出力を常に解析していると思います)。
回答:
()フラグを使用get
して、サポートされている出力テンプレートの1つを使用および選択できます。--output
-o
テイクjsonpath
たとえば、
kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
あなたを与えますetcd kube2sky skydns
。
サポートされているその他の出力出力テンプレートは、go-template、go-template-file、jsonpath-fileです。jsonpathテンプレートの使用方法については、http: //kubernetes.io/docs/user-guide/jsonpath/を参照してください。goテンプレートの使用方法については、https://golang.org/pkg/text/template/#pkg-overviewを参照してください。
更新:コンテナイメージを一覧表示する他のコマンド例については、このドキュメントを確認してください:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
kubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
単一のポッドのJSONpathクエリの作成を回避するためのクイックハック:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
containers
を与えますinit containers
init containers
この方法では表示されません:(
私はいくつかのアイデアを以下にまとめました:
単純な行:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'
分割(読みやすさのため):
kubectl get po -o jsonpath='
{range .items[*]}
{"pod: "}
{.metadata.name}
{"\n"}{range .spec.containers[*]}
{"\tname: "}
{.name}
{"\n\timage: "}
{.image}
{"\n"}
{end}'
less
かにvi
:COMMAND | less
またはvi<(COMMAND)
のjson
出力形式として使用するkubectl get
と、の詳細がたくさん得られますpod
。このjson
ようなプロセッサを使用jq
すると、関心のある特定のパーツを簡単に選択またはフィルタリングできます。
ポッドのコンテナを一覧表示するには、jq
クエリは次のようになります。
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
| jq --raw-output '.items[].spec.containers[].name'
1つの特定のコンテナに関するすべての詳細を確認したい場合は、次のようにしてください。
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods \
| jq '.items[].spec.containers[] | select(.name=="etcd")'
以下のコマンドを使用して、特定のポッドのすべての情報を表示します
kubectl get pod <pod name> -n <namespace name> -o yaml
ポッド内のコンテナを知る最も簡単な方法:
kubectlログ-c-n
kubectl get pods -o json
。