web-dev-qa-db-fra.com

Éléments de sélection de colonnes personnalisées Kubernetes dans le tableau

J'essaie d'écrire un modèle, pour lister les noms de mes services ainsi que leurs points de terminaison externes + ports. Cependant, je ne trouve aucun exemple ni documentation sur la façon de sélectionner un élément dans un tableau, dans ce cas port dans le tableau ports.

Je suis arrivé jusque-là:

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

Pour donner un exemple plus concret, voici mes services de course:

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

Je souhaite obtenir:

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

[~ # ~] tldr [~ # ~]

pour un élément qui est une liste, utilisez * entre crochets.

Votre requête devrait donc ressembler à ceci:

$ 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

Remarquez le * dans PORT:.spec.ports[*].targetPort.

Détails:

Donc, kubernetes attend un json-path-expr après header. L'erreur que j'ai eue en jouant avec des expressions était la suivante:

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

Donc, pour parcourir tous les éléments d'une liste au lieu de mettre un index, utilisez simplement *.

Diverses autres expressions json-path peuvent être trouvées ici .

22
surajd

Vous pouvez utiliser * pour comprendre quelles données dans le json. Par exemple:

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

Comme pour moi kubectl get svc -o custom-columns=svc:.metadata.name,IP:.metadata.annotations.domainName,PORT:.spec.ports[*].targetPort était parfait (en raison d'informations IP externes) et ressemble à:

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

p.s. À propos de la liste des adresses IP et hôtes externes:

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
dmitry_podyachev

Cela marcherait-il pour toi?

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

0
Cristhian Bicca