如何在Kubernetes集群中列出使用指定ConfigMap的所有Deployment
查询使用指定ConfigMap的Deployment方法
目前kubectl没有直接提供--with-config-map这类参数,但可以通过以下几种简便方法实现需求:
方法一:用kubectl结合jq精准筛选
通过kubectl输出JSON格式数据,再用jq过滤出包含指定ConfigMap引用的Deployment:
kubectl get deployments -o json | jq '.items[] | select(.spec.template.spec.containers[].env[]?.valueFrom.configMapKeyRef.name == "my-config-map") | .metadata.name'
如果要覆盖envFrom方式引用ConfigMap的场景,可扩展jq表达式:
kubectl get deployments -o json | jq '.items[] | select( (.spec.template.spec.containers[].env[]?.valueFrom.configMapKeyRef.name == "my-config-map") or (.spec.template.spec.containers[].envFrom[]?.configMapRef.name == "my-config-map") ) | .metadata.name'
方法二:用grep快速临时查询
如果没有jq工具,也可以结合kubectl的YAML输出和grep筛选:
kubectl get deployments -o yaml | grep -B5 -A5 "configMapKeyRef:" | grep -B10 -A10 "name: my-config-map" | grep "metadata:" -A1 | grep "name:"
注:该方法可能会出现重复输出,需要手动去重,适合临时快速查询。
方法三:自定义kubectl插件(适合频繁使用)
如果需要经常执行这类查询,可以写一个简单的shell脚本作为kubectl插件,命名为kubectl-findcm:
#!/bin/bash if [ -z "$1" ]; then echo "Usage: kubectl findcm <configmap-name>" exit 1 fi kubectl get deployments -o json | jq ".items[] | select(.spec.template.spec.containers[].env[]?.valueFrom.configMapKeyRef.name == \"$1\") | .metadata.name"
给脚本赋予执行权限后,就可以像原生kubectl命令一样使用:
kubectl findcm my-config-map
附:ConfigMap变更后批量重启Deployment
查到目标Deployment后,可执行以下命令批量滚动重启:
kubectl get deployments -o json | jq -r '.items[] | select(.spec.template.spec.containers[].env[]?.valueFrom.configMapKeyRef.name == "my-config-map") | .metadata.name' | xargs kubectl rollout restart deployment
内容的提问来源于stack exchange,提问作者stasiekz
相关产品推荐
相关产品推荐

