如何从Kubernetes资源YAML中提取正在使用的镜像版本信息?
Kubernetes 提取工作负载镜像版本号解决方案
现有命令修正
你当前使用的命令存在字段大小写错误,Kubernetes API 中初始化容器的字段为 initContainers(首字母C大写),修正后可正常取值的命令如下:
kubectl get statefulset <你的StatefulSet名称> -n <目标命名空间> -o=jsonpath='{.spec.template.spec.initContainers[0].image}'
不同场景的提取方案
- 提取当前StatefulSet所有初始化容器的镜像列表:
kubectl get statefulset <StatefulSet名称> -n <命名空间> -o=jsonpath='{.spec.template.spec.initContainers[*].image}{"\n"}' - 提取业务容器(非初始化容器)的镜像列表:
kubectl get statefulset <StatefulSet名称> -n <命名空间> -o=jsonpath='{.spec.template.spec.containers[*].image}{"\n"}' - 同时输出容器名和对应镜像,方便核对关联关系:
kubectl get statefulset <StatefulSet名称> -n <命名空间> -o=jsonpath='{range .spec.template.spec.containers[*]}{.name}{"\t"}{.image}{"\n"}{end}' - 无需访问集群,直接从本地YAML文件提取镜像,可使用
yq工具处理:yq '.spec.template.spec.containers[].image' 本地StatefulSet文件路径.yaml
单独拆分版本号方法
如果需要从完整镜像字符串中单独取出版本标识,可通过管道加awk处理,适配镜像名:版本号、仓库地址/镜像名:版本号、镜像名@sha256:摘要值三类格式:
kubectl get statefulset <StatefulSet名称> -n <命名空间> -o=jsonpath='{.spec.template.spec.containers[0].image}' | awk -F '[:@]' '{print $NF}'
内容的提问来源于stack exchange,提问作者ChawleeJay
相关产品推荐
相关产品推荐

