如何在kubectl run中从ConfigMap设置环境变量?

3
为了调试目的,我尝试通过kubectl run运行一个容器(alpine)并从ConfigMap或Secret设置一些环境变量。为了实现这个目标,我理解使用--override=参数。但是,当我执行容器并回显变量时,并没有设置任何内容。我的内联json结构是否有误?
kubectl run --dry-run=client --restart=Never --image=alpine -n app-ns psql-demo --overrides='
{
    "apiVersion": "v1",
    "spec": {        
        "env": [
            {
                "name": "POSTGRES_HOST",
                "valueFrom": {
                    "configMapKeyRef": {
                        "key": "POSTGRES_HOST",
                        "name": "db-config"
                    }
                }
            }
        ]
    }
}' -o yaml -- sh


我会尝试通过echo ${POSTGRES_HOST}进行检查。
这里的ConfigMap配置:
apiVersion: v1
data:
  POSTGRES_HOST: db.host.com
kind: ConfigMap
metadata:
  labels:
    component: postgres
  name: db-config
  namespace: app-ns

有什么想法吗?非常感谢!


你能分享一下configmap的yaml吗? kubectl describe configmaps NAME - omricoco
ConfigMap配置已添加。 - Gerrit
我需要将容器作为规范的属性吗? - Gerrit
1个回答

3
您的JSON结构有些问题,应该像这样:
{
  "spec": {
    "containers": {
      "env": [
        {
          "name": "POSTGRES_HOST",
          "valueFrom": {
            "configMapKeyRef": {
              "name": "db-config",
              "key": "POSTGRES_HOST"
            }
          }
        }
      ]
    }
  }
}

请注意,第一个“name”是实际环境变量名称,它将出现在您的容器内,它不必与您在configmap中使用的实际键完全相同。
重要提示:kubectl run会忽略未知字段。
为了调试此问题,您可以运行指定的命令,然后在另一个终端中运行:
kubectl get pod POD_NAME -o json
从那里,您可以看到实际的env规范结构是否与您的json覆盖值不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接