web-dev-qa-db-ja.com

Kubernetesカスタム列は配列から要素を選択します

私はサービスの名前とそれらの外部エンドポイント+ポートをリストするために、テンプレートを作成しようとしています。しかし、配列から要素を選択する方法やドキュメント(この場合はport配列からports)を見つけられません。

私はそこまで得ました:

 kubectl get service -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports

より具体的な例として、これが私の実行中のサービスです。

NAME                  CLUSTER-IP     EXTERNAL-IP      PORT(S)                               AGE
kafka-manager         10.3.242.200   146.148.20.235   9000:32619/TCP                        11h
spark-master          10.3.242.209   104.199.21.235   7077:30588/TCP                        11h

取得したい:

NAME                  EXTERNAL-ENDPOINT     
kafka-manager         146.148.20.225:9000
spark-master          104.199.21.225:7077
11
nik

[〜#〜] tldr [〜#〜]

リストの要素の場合、角括弧で*を使用します。

したがって、クエリは次のようになります。

$ kubectl get service -n kube-system  -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports[*].targetPort
NAME                   IP           PORT
kube-dns               10.0.0.10    53,53
kubernetes-dashboard   10.0.0.250   9090

*PORT:.spec.ports[*].targetPortに注目してください。

詳細:

したがって、kubernetesはheaderの後にjson-path-exprを期待しています。式で遊んだときのエラーは次のとおりです。

expected <header>:<json-path-expr>

したがって、インデックスを置く代わりにリストのすべての要素を反復するには、*を使用します。

他のさまざまなjson-path式が見つかります here

22
surajd

*を使用して、jsonのどのデータを理解することができます。例えば:

kubectl get svc gdpr -o custom-columns=svc:*

私としては kubectl get svc -o custom-columns=svc:.metadata.name,IP:.metadata.annotations.domainName,PORT:.spec.ports[*].targetPortは完璧であり(外部IP情報のため)、次のようになります。

event   site1.com 9000 
gdpr    site2.com 3333,8080
svcInt  none      80
ui      site6.com 80,6123,6124,6125,8081

pS外部IPとホストのリストについて:

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name} {.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}'
ip-10-10-40-13.xxxxx.internal xx.xx.xx.175
ip-10-10-40-15.xxxxx.internal xx.xx.xx.236
ip-10-10-40-18.xxxxx.internal xx.xx.xx.207

kubectl get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}'
xx.xx.xx.175
xx.xx.xx.236
xx.xx.xx.207
1

それでうまくいきますか?

kubectl get service -o = custom-columns = NAME:.metadata.name、IP:.spec.clusterIP、PORT:.spec.ports [0] .targetPort

0
Cristhian Bicca