web-dev-qa-db-fra.com

Obtenir une image actuelle du déploiement de Kubernetes

Comment puis-je utiliser kubectl ou l'API pour récupérer l'image actuelle des conteneurs dans un pod ou un déploiement?

Par exemple, dans un déploiement créé avec la configuration ci-dessous, je souhaite récupérer la valeur eu.gcr.io/test0/brain:latest.

apiVersion: v1
   kind: Deployment
   metadata:
     name: flags
   spec:
     replicas: 6
     template:
       metadata:
      labels:
        app: flags
       spec:
         containers:
         - name: flags
           image: eu.gcr.io/test0/brain:latest
32
Andy Hume

De kubectl 1.6 le -o wide l'option fait cela, donc

kubectl get deployments -o wide

affichera l'image actuelle dans la sortie.

30
Daniel Perez

Vous pouvez utiliser l'option de sortie jsonpath de kubectl pour y parvenir:

kubectl get deployment flags -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
22
Pixel Elephant

pour obtenir juste l'URI de l'image pour tous les pods (dans tous les espaces de noms, par exemple):

kubectl get pods --all-namespaces -o jsonpath="{..image}"

(voir https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/ pour plus de détails)

9
eversMcc

Vous pouvez répertorier la balise d'image de tous les déploiements dans une liste:

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

Exemple de sortie:

deployment-a:   docker-registry.com/group/image-a:v1,
deployment-b:   docker-registry.com/group/image-b:v2,
deployment-c:   docker-registry.com/group/image-c:v3,
deployment-d:   docker-registry.com/group/image-d:v4,
3
Evan Hu

Pour un déploiement unique, utilisez ceci:

kubectl get deploy/deployment-name -o jsonpath="{..image}"

Cela peut aussi fonctionner pour le pod

kubectl get pod/pod-name -o jsonpath="{..image}"
2
Shalkam

ce qui suit a fonctionné pour moi:

kubectl get deployment -o=jsonpath='{$.items[:1].spec.template.spec.containers[:1].image}'

La configuration de mon déploiement était clairement différente (avec l'élément "items" au début) pour une raison quelconque.

MISE À JOUR: L'élément 'items' (qui n'est qu'une liste d'éléments de déploiement) apparaîtra si vous faites simplement:

kubectl get deployment -o=json

alors que si je spécifie le nom du déploiement, il n'y aura pas d'élément items dans le json retourné, par exemple:

kubectl get deployment [deploymentName] -o=json
2
eversMcc