与配置映射通信时出现错误。

11

嗨,我正在使用Google Kubernetes Engine部署我的应用程序。我尝试添加一个configMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
  namespace: default
data:
  database_user: root
  database_password: root
  database_db: db
  database_port: 5432
  database_host: mypostgres

然后在我的应用程序部署文件中,我映射了环境变量,如下所示:

 spec:
      containers:
      - env:
        - name: DATABASE_HOST
          valueFrom:
            configMapKeyRef:
              name: configmap
              key: database_host
        - name: DATABASE_NAME
          valueFrom:
            configMapKeyRef:
              name: configmap
              key:  database_db
        - name: DATABASE_PASSWORD
          valueFrom:
            configMapKeyRef:
              name: configmap
              key: database_password
        - name: DATABASE_USER
          valueFrom:
            configMapKeyRef:
              name: configmap
              key: database_user

        - name: DATABASE_PORT
          valueFrom:
            configMapKeyRef:
              name: configmap
              key: database_port

我的服务没有运行,并且我收到了以下错误:

CreateContainerConfigError,当我尝试显示pod的结果时。

当我执行"描述我的pod"命令时,我得到以下错误:

错误:找不到密钥database_host

我的问题是,为什么我的部署文件与我定义的configmap没有通信?

我使用以下命令创建了configmap:

kubectl create configmap configmap --from-file=configmap.yaml

3个回答

4
如在 "kubectl create configmap --help" 中所述: --from-env-file='': 指定一个文件路径,读取 key=val 行以创建一个 configmap(即 Docker .env 文件)。
因此,您只需要创建一个名为 conf 的文件,并将其值设置为:
database_user= root
database_password= root
database_db= db
database_port= 5432
database_host= mypostgres

并运行:"kubectl create configmap coco-config --from-env-file=conf"

更新: 如果您将数据放在“”中,问题将得到解决。

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
  namespace: default
data:
  database_user: "root"
  database_password: "root"
  database_db: "db"
  database_port: "5432"
  database_host: "mypostgres"

2
不要使用--from-file命令。 尝试使用kubectl apply -f configmap.yaml。

使用-f configmap.yaml代替--from-file会有影响吗? - bencampbell_14

2
尝试使用configmap --from-env-file=configm命令进行配置映射。

非常感谢您的回复。但是,每当我运行命令"kubectl create configmap configmap --from-env-file=configmap.yaml"时,我都会收到此错误:"apiVersion:v1"不是有效的键名:有效的环境变量名称必须由字母字符、数字、'_'、'-'或'.'组成,并且不能以数字开头(例如'my.env-name'或'MY_ENV.NAME'或'MyEnvName1',用于验证的正则表达式是'[-._a-zA-Z][-._a-zA-Z0-9]*')。 - Ennar.ch
成功了!我把所有的“:”都改成了“=”,然后运行了“kubectl create configmap configmap --from-env-file=configmap.yaml”命令。但是我不明白为什么添加“--from-env-file”就解决了问题,如果我在我的configmap中添加更多的键值对而它们不是环境变量,会发生什么? - Ennar.ch

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