kubernetesポッド内のすべてのコンテナをどのようにきれいにリストしますか?


86

テストの実行後にログを収集するスクリプトで、ポッド内のすべてのコンテナーを一覧表示しようとしています。 kubectl describe pods -l k8s-app=kube-dns多くの情報を返しますが、私は次のような戻り値を探しています。

etcd
kube2sky
skydns

記述出力をフォーマットする簡単な方法がわかりません。別のコマンドはありますか?(そして最悪の場合、describeの出力を常に解析していると思います)。

回答:


60

()フラグを使用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/


3
jsonの出力を確認したい場合は、を使用してくださいkubectl get pods -o json
janetkuo 2015年

22
特定のポッドで作業している場合、コマンドはkubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}
Charles L.

OPは1つの特定のポッド用でした
オリバー

70

回答

kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'

説明

これにより、ポッドを表すJSONオブジェクトが取得されます。次に、kubectlのJSONパスを使用して、ポッドから各コンテナーの名前を抽出します。


27

単一のポッドのJSONpathクエリの作成を回避するためのクイックハック:

$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]

この答えはまさにそれが言っていることです..簡単なハック。本当に便利です:)もちろん、スクリプトのようなものでは使用できません。それは要件を満たしています。
RakeshN18年

最新のものも両方containersを与えますinit containers
Neo

@Neo v1.18.8ではinit containersこの方法では表示されません:(
subtleseeker20年

11

私はいくつかのアイデアを以下にまとめました:

単純な行:

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}'

@EzLo単一行フォーマットの方が好きかどうかはわかりません。私はスクロールしなければならないのが好きではありません。
ショーン

両方の選択肢を表示できます。必要に応じて、お気軽に元に戻してください。コードのタイポグラフィのため、通常、コードフォーマット(CTRL + K)を使用する方が引用符(CTRL + Q)よりも優れています。
EzLo

この形式で各コンテナのポッド名をリストする方法はありますか?
サムトーマス

スクロールや手動検索の必要性を避けるために-パイプそれをするlessかにviCOMMAND | less またはvi<(COMMAND)
セルゲイSmolnikov

スタックオーバーフローでのスクロール@ SergeySmolnikov–
Shawn

7

各ポッドからのコンテナを明確に出力したい場合

kubectl get po -l k8s-app=kube-dns \
   -o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name

2

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")'

1

これを使用して、ポッドに画像バージョンを表示します。

kubectl get pods  -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{end}{end}' && printf '\n'

これは、ここからのスクリプトのほんの小さな変更であり、新しい行を追加して新しい行で次のコンソールコマンドを開始し、各行の終わりにコンマを削除し、サービスポッドなしでポッドのみを一覧表示し--all-namespacesます(たとえば、オプションが削除されます)。


1

特定のポッド内のすべてのコンテナーの構成マップとともに詳細情報を表示するには、次のコマンドを使用します。 kubectl describe pod/<pod name> -n <namespace name>


1

以下のコマンドを使用します。

kubectl get pods -o=custom-columns=PodName:.metadata.name,Containers:.spec.containers[*].name,Image:.spec.containers[*].image


0

ポッド内のコンテナを知る最も簡単な方法:

kubectlログ-c-n


注:非常に簡潔な回答や投稿者への質問である回答は、おそらくコメントである必要があります。質問の下でコメントするのに必要なのは50repポイントだけです-これをそこに移動できますか?
Tyler2P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.