Ответ 1
От kubectl
1.6 опция -o wide
делает это, поэтому
kubectl get deployments -o wide
отобразит текущее изображение на выходе.
Как я могу использовать kubectl
или API для получения текущего изображения для контейнеров в контейнере или развертывании?
Например, в развертывании, созданном с приведенной ниже конфигурацией, я хочу получить значение 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
От kubectl
1.6 опция -o wide
делает это, поэтому
kubectl get deployments -o wide
отобразит текущее изображение на выходе.
Вы можете использовать kubectl jsonpath для достижения этой цели:
kubectl get deployment flags -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
чтобы получить только изображение URI для всех модулей (например, во всех пространствах имен):
kubectl get pods --all-namespaces -o jsonpath="{..image}"
(Подробнее см. https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/)
для меня работало следующее:
kubectl get deployment -o=jsonpath='{$.items[:1].spec.template.spec.containers[:1].image}'
. По какой-то причине моя конфигурация развертывания была совершенно иной (с элементом "элементы" в начале).
UPDATE: Элемент "items" (который является всего лишь списком элементов развертывания) появится, только если:
kubectl get deployment -o=json
тогда как если я укажу имя развертывания, в возврате json не будет элемента элементов, например:
kubectl get deployment [deploymentName] -o=json
Вы можете перечислить тег изображения всех развертываний в списке:
kubectl get deployment -o=jsonpath="{range .items[*]}{'\n'}{.metadata.name}{':\t'}{range .spec.template.spec.containers[*]}{.image}{', '}{end}{
end}"
Образец вывода:
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,
Для одного развертывания используйте это:
kubectl get deploy/deployment-name -o jsonpath="{..image}"
Это может работать и для стручка
kubectl get pod/pod-name -o jsonpath="{..image}"