你的 YAML 文件中存在 缩进错误,导致 Kubernetes 无法正确解析 envFrom
字段的结构。以下是详细分析和解决方案:
❌ 核心问题
envFrom
是一个 列表类型字段,其子项必须以 -
开头且 不能缩进。你的原始文件中 - configMapRef:
前多了缩进,导致 YAML 解析器将其误认为一个映射(Key-Value),而非列表项。
✅ 修正后的 YAML 文件
apiVersion: v1
kind: Pod
metadata:
name: multi-key-test-pod
spec:
containers:
- name: test-container
image: busybox:1.28
command: [ "/bin/sh", "-c", "env" ]
envFrom: # ⚠️ 确保 envFrom 下的内容严格对齐
- configMapRef: # ✅ - 必须顶格写,不能缩进!
name: druid-config # ✅ 正常缩进属于 configMapRef 的子项
restartPolicy: Never
📌 关键修正点
错误位置 | 错误原因 | 修正方案 |
---|---|---|
envFrom: 下的 - configMapRef: | - 前多了缩进,导致解析器认为这是映射而非列表项 | 去掉 - 前的缩进,使其与 envFrom: 对齐 |
configMapRef: 的缩进 | configMapRef 是 - 的子项,需正常缩进 | 保持现有缩进(属于 - 的子项) |
🔍 为什么这样修改?
- YAML 列表语法要求:列表项必须以
-
开头,且-
不能缩进(必须与父级字段对齐)。 - 你的原始文件:
→ 解析器认为envFrom: - configMapRef: # ❌ - 前多了缩进! name: druid-config
envFrom
的值是一个映射(而非列表),导致报错。 - 修正后:
→ 解析器识别为列表,第一个元素是envFrom: - configMapRef: # ✅ - 与 envFrom: 对齐 name: druid-config
configMapRef
。
🧪 验证方法
-
本地校验(推荐):
kubectl apply --dry-run=client -f pod-mul-configmap.yml
若无报错则说明语法正确。
-
实际部署:
kubectl apply -f pod-mul-configmap.yml kubectl logs multi-key-test-pod
查看日志应能看到
druid-config
ConfigMap 中的所有键值对已注入环境变量。
📝 补充说明
envFrom
vsenv
:envFrom
:将整个外部来源(如 ConfigMap/Secret)的所有键值对批量注入环境变量。env
:逐个显式定义环境变量(适合少量变量)。
- 优先级:若同时使用
envFrom
和env
,后者会覆盖前者中的同名变量。