获取kubernetes部署的当前图片

时间:2016-08-22 21:47:06

标签: kubernetes kubectl

如何使用kubectl或API检索pod或部署中容器的当前图像?

例如,在使用以下配置创建的部署中,我想检索值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

11 个答案:

答案 0 :(得分:25)

kubectl 1.6 -o wide选项执行此操作,所以

kubectl get deployments -o wide

将在输出中显示当前图像。

答案 1 :(得分:19)

您可以使用kubectl的jsonpath输出选项来实现此目的:

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

答案 2 :(得分:7)

获取所有pod的图像uri(例如,在所有名称空间中):

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

(有关详细信息,请参阅https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/

答案 3 :(得分:2)

以下为我工作:

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

..由于某种原因,我的部署配置明显不同(开头有'项目'元素。)

更新: '项目'如果只是执行:

,则会出现element(只是部署元素列表)
kubectl get deployment -o=json

如果我指定了部署名称,那么返回的json中就不会有item元素,例如:

kubectl get deployment [deploymentName] -o=json

答案 4 :(得分:2)

您可以在列表中列出所有部署的图像标签:

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,

答案 5 :(得分:2)

要获取部署使用的所有图像,您可以使用以下命令。

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\ sort

答案 6 :(得分:0)

对于单个部署,请使用以下命令:

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

它也可以用于吊舱

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

答案 7 :(得分:0)

您可以使用

kubectl get pod <pod_name> -o yaml| grep image:

从部署开始,

kubectl get deploy <deployment_name> -o yaml| grep image:

答案 8 :(得分:0)

我经常使用它来更好地了解豆荚中的图像:

kubectl get   --output json pods \
  | jq '.items[] .status.containerStatuses[] | { "name": .name, "image": .image, "imageID": .imageID }'

胜利:

{
  "name": "app-admin",
  "image": "***docker_app-admin:v1",
  "imageID": "***docker_app-admin@sha256:2ce3208649e72faaf1fe8be59649de01b36f656866498b46790adaf154eefc6b"
}

答案 9 :(得分:0)

kubectl get deployments.apps -n admin2406 -o=custom-columns=DEPLOYMENT:.metadata.name,CONTAINER_IMAGE:.spec.template.spec.containers[*].image,READY_REPLICAS:.status.readyReplicas,NAMESPACE:.metadata.namespace

答案 10 :(得分:0)

尽管问题已经得到解答,我还是想提供一个使用 Go 模板的示例:

kubectl get deployment $GKE_DEPLOYMENT_NAME \
--namespace=$GKE_DEPLOYMENT_NAMESPACE \
--output=go-template \
--template='{{range .spec.template.spec.containers}}{{.image}}{{"\n"}}{{end}}'

#=>

us.gcr.io/. . ./. . .:xxxxxxx

注意:如果您的 deployment 包含多个容器,此命令将列出所有 Docker 镜像;由于 containers 是 JSON 数组或 YAML 序列,因此没有保证的顺序。 IE。不能保证按元素索引选择返回预期的 Docker Image Repo。和标签。

注意:如果您使用此命令来确定当前部署的是什么 git commit,通过 Docker 标签或 Docker 标签,您将需要引入字符串操纵。

您可能想要label您的deployment

kubectl label \
--overwrite=true \
deployment $GKE_DEPLOYMENT_NAME \
commit=$(git rev-parse --short HEAD) \
--namespace=$GKE_DEPLOYMENT_NAMESPACE \
--record=true

#=>

deployment.apps/$GKE_DEPLOYMENT_NAME labeled

并访问此 label,无论多个 Docker 镜像和没有字符串操作,使用:

kubectl get deployment $GKE_DEPLOYMENT_NAME \
--namespace=$GKE_DEPLOYMENT_NAMESPACE \
--output=go-template \
--template='{{index .metadata.labels "commit"}}{{"\n"}}'

#=>

xxxxxxx