首页 > 解决方案 > Openshift - confimap 和 pod 之间的相关性

问题描述

有一种快速的方式/oc 命令来获取哪个部署使用一个或多个配置映射?

就我而言,我需要知道我需要推出哪个部署来应用 configmap 更新。

没有关于 dc YAML 文件的证据。

提前致谢!

标签: openshift

解决方案


来自OpenShift 3.9 中的指南

在 DeploymentConfig 中,这是从 ConfigMap 中提取所有环境变量的节。

spec:
  containers:
    ...
      envFrom: 
        - configMapRef:
            name: env-config
    ...

可能值得为configMap特定命名空间/项目中的关键字查找所有部署配置,以检查您是否附加了 configMap

$ oc get dc -o json -n $(oc project -q) | grep -A2 configMap
                                        "configMapRef": {
                                            "name": "printenv-config"
                                        }

假设从 configmaps 注入环境变量,可能有更简单的方法来做到这一点?- 但您也可以通过管道输入 jq 并根据envFrom数组键不为空进行过滤

oc get dc -o json | jq -r '[.items[] | select(.spec.template.spec.containers[].envFrom[]? != null)]' | jq -c '.[] | {namespace: .metadata.namespace, dcname: .metadata.name, configMap: .spec.template.spec.containers[].envFrom[].configMapRef.name}'

结果是:

{"namespace":"aps-env","dcname":"openshift-tasks","configMap":"another-config-map"}
{"namespace":"aps-env","dcname":"printenv","configMap":"printenv-config"}

或者,您可能正在通过卷安装安装您的 configMap,在这种情况下,Stanza 是不同的,您需要相应地调整上述内容

"volumes": [
...
    {
        "configMap": {
            "defaultMode": 420,
            "name": "gogs"
        },
        "name": "config-volume"
    }
...

基于卷安装的 configMap 的不同查询

$ oc get dc -o json | jq -r '[.items[] | select(.spec.template.spec.volumes[]?.configMap != null)]' | jq -c '.[] | {dcname: .metadata.name, configMapName: .spec.template.spec.volumes[].configMap.name}' | grep -v null

结果是:

{"dcname":"gogs","configMapName":"gogs-configmap"}

推荐阅读