通过ConfigMap的名称获取所有引用该ConfigMap的部署

36次阅读
没有评论

问题描述

假设我有一个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的更多信息和安装说明。

希望这可以帮助到您!

正文完