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
De kubectl
1.6 le -o wide
l'option fait cela, donc
kubectl get deployments -o wide
affichera l'image actuelle dans la sortie.
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}'
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)
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,
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}"
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