1. 引言

在 Kubernetes 的 Deployment 管理中,容器镜像的版本控制对应用的稳定性和效率至关重要。获取当前 Deployment 使用的镜像版本是一项基础但关键的操作,它能帮助我们追踪变更、确保版本一致性,并在出现问题时快速定位原因。

本文将介绍几种常见的方法来获取 Kubernetes 中 Deployment 所使用的当前镜像。这些方法适用于日常运维、CI/CD 流水线检查或故障排查场景,是每个 Kubernetes 使用者都应掌握的基础技能。

2. 使用 kubectl jsonpath

kubectl 提供了 jsonpath 功能,允许我们从资源对象的 JSON 输出中提取特定字段。这是获取 Deployment 镜像信息最直接、灵活的方式。

例如,要获取名为 my-app 的 Deployment 使用的镜像,可以使用如下命令:

$ kubectl get deploy my-app -o jsonpath="{..image}"
python:3.8.10

✅ 说明:

  • -o jsonpath="{..image}" 表示提取所有名为 image 的字段(适用于多容器 Deployment)。
  • jsonpath 是一种轻量级模板语言,用于从结构化数据中提取子集。

⚠️ 注意:

  • 如果 Deployment 中有多个容器,该命令会列出所有容器使用的镜像。
  • 如果 Deployment 未在默认命名空间下,需添加 -n <namespace> 指定命名空间。

类似地,也可以用于 Pod:

$ kubectl get pod myapp-79d545bd7c-c4w4l -o jsonpath="{..image}"
python:3.8.10

✅ 说明:

  • 与 Deployment 类似,该命令会输出 Pod 中所有容器使用的镜像。

3. 使用 kubectl get deployments 命令

kubectl get deployments 是查看集群中所有 Deployment 的基础命令。通过添加 -o wide 参数,可以显示更详细的信息,包括容器名和镜像版本:

$ kubectl get deployments -o wide
NAME      READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS    IMAGES          SELECTOR
myapp     1/1     1            1           5m    python        python:3.8.10   app=python

✅ 输出字段说明:

  • CONTAINERS: 容器名称
  • IMAGES: 容器使用的镜像版本
  • SELECTOR: 标签选择器

💡 小技巧:

  • 如果你想查看所有命名空间下的 Deployment,可以加上 -A--all-namespaces 参数:
    kubectl get deployments -o wide -A
    

4. 总结

本文介绍了三种获取 Kubernetes Deployment 当前镜像的方法:

方法 特点
kubectl jsonpath 灵活,适合脚本中提取特定字段
kubectl get deployments -o wide 简洁直观,适合快速查看
kubectl get pod -o jsonpath 可用于查看 Pod 级别使用的镜像

✅ 实际使用建议:

  • 日常排查或脚本中推荐使用 jsonpath,可精确控制输出内容。
  • 在查看整体部署状态时,kubectl get deployments -o wide 更加直观。
  • 若需确认 Pod 实际运行的镜像版本,可查看 Pod 的 image 字段。

掌握这些方法可以帮助我们更好地进行版本控制、部署验证和故障排查,避免因镜像版本不一致导致的“本地能跑,线上报错”等常见问题。


原始标题:Get Current Image of Kubernetes Deployment