Kubernetes/OpenShift 3中ConfigMap挂载YAML文件报错咨询
问题解决:OpenShift 3中ConfigMap存YAML文件的报错与服务识别问题
报错原因
你看到的警告是因为OpenShift默认会尝试将ConfigMap data字段下的所有键转换为环境变量,但appconfig.yml、operatorconfig.yml这类带圆点的文件名不符合POSIX环境变量命名规则(仅允许大写字母、数字、下划线,且首字符不能是数字),所以触发了这个提示。这个警告不影响ConfigMap的创建,但如果你的服务依赖环境变量读取配置,自然无法识别这些YAML内容。
YAML文件在ConfigMap中是支持的
YAML格式的配置文件完全可以存在ConfigMap里,官方文档中属性文件能正常工作,要么是因为属性文件的键符合环境变量命名规范,要么是采用了挂载卷的方式读取,而非环境变量注入。你的问题核心是读取方式不对,不是YAML格式不被支持。
解决步骤
要让服务正确识别这些YAML配置,应该将ConfigMap挂载为卷,而非依赖环境变量注入:
- 修改你的Deployment或DeploymentConfig配置,添加卷挂载规则:
spec: template: spec: volumes: - name: app-config-volume configMap: name: app-config # 对应你的ConfigMap名称 containers: - name: 你的应用容器名 volumeMounts: - name: app-config-volume mountPath: /opt/app/config # 替换为你的服务读取配置的实际目录 readOnly: true
- 保存并更新Deployment/DeploymentConfig后,服务容器内的指定目录下会自动生成
appconfig.yml和operatorconfig.yml文件,服务直接读取该路径下的文件即可。
备选方案(不推荐)
如果非要通过环境变量传递YAML内容,需要将ConfigMap的data键改为符合环境变量命名的格式,比如:
data: APP_CONFIG_YML: | swarm: resource-adapters: ... OPERATOR_CONFIG_YML: {{ APP_OPERATOR_CONFIG | to_nice_yaml(width=99999) | trim | to_yaml(width=99999) }}
之后在服务启动脚本中,将这些环境变量的内容写入对应YAML文件,再让服务读取。这种方式步骤繁琐,不如挂载卷直接高效。
内容的提问来源于stack exchange,提问作者WesternGun
相关产品推荐
相关产品推荐

