问题描述
假设我有一个ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: london-tz-config
data:
SERVER_TIMEZONE: "Europe/London"
我还有大约50个不同的部署。假设其中20个使用london-tz-config
ConfigMap来设置它们的环境,就像这样:
template:
metadata:
labels:
app: echo-app
spec:
containers:
- name: echo-app-container
image: ealen/echo-server:latest
ports:
- containerPort: 8080
env:
- name: SERVER_TIMEZONE
valueFrom:
configMapKeyRef:
name: london-tz-config # 引用我们的ConfigMap
key: SERVER_TIMEZONE
我不知道哪些部署在任何给定时间使用哪些ConfigMaps,除非手动检查集群。
有没有办法让Kubernetes显示所有包含对给定ConfigMap的引用的部署,通过它的metadata.name
属性?
无论是使用kubectl
还是Kubernetes API都可以。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案
您可以使用kubectl get -o json
命令,并使用jq
解析输出,以迭代部署,匹配任何所需的configMapKeyRef.name
,并返回部署的唯一列表。
以下是一个示例命令:
kubectl get deployments --all-namespaces -o json | jq -r '.items | map(select(.spec.template.spec.containers[]?.env[]?.valueFrom.configMapKeyRef.name == "london-tz-config" ) | .metadata.name) | .[]' | uniq
这个命令将返回所有引用名为london-tz-config
的ConfigMap的部署的唯一列表。
请注意,您需要安装jq
工具来解析JSON输出。您可以在这里找到有关jq
的更多信息和安装说明。
希望这可以帮助到您!
正文完