无法通过Kustomize将ConfigMap注入Deployment的问题排查
Kustomize无法将ConfigMap注入Deployment的问题排查
我正在学习Kubernetes(K8s)基础知识,尝试用Kustomize将ConfigMap注入Deployment,但书中示例无法正常运行。执行kubectl kustomize .后,生成的YAML里没有把ConfigMap/env注入到Deployment中,以下是我的文件内容和命令输出,请问哪里操作错了?
kustomization.yaml
configMapGenerator: - name: outputmap files: - myconfig1.yaml resources: - nginxdeployment.yaml
myconfig1.yaml
apiVersion: v1 kind: ConfigMap metadata: name: examplemap data: | key1: value1 key2: value2
nginxdeployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginxexercise spec: replicas: 2 selector: matchLabels: appKey: nginxValue template: metadata: labels: appKey: nginxValue spec: containers: - image: "nginx:1.21.1" name: mynginx ports: - name: myport containerPort: 80
kubectl kustomize . 命令输出
apiVersion: v1 data: myconfig1.yaml: | apiVersion: v1 kind: ConfigMap metadata: name: examplemap data: | key1: value1 key2: value2 kind: ConfigMap metadata: name: outputmap-dc4gdb5cg2 --- apiVersion: apps/v1 kind: Deployment metadata: name: nginxexercise spec: replicas: 2 selector: matchLabels: appKey: nginxValue template: metadata: labels: appKey: nginxValue spec: containers: - image: nginx:1.21.1 name: mynginx ports: - containerPort: 80 name: myport
问题原因及解决方法
你的操作存在两个核心问题:
1. ConfigMapGenerator的使用方式错误
你当前通过files字段将整个myconfig1.yaml文件内容作为单个键值对存入了ConfigMap,这完全不是注入Deployment所需的键值对数据结构。
修正方式二选一:
- 方法一:修改
myconfig1.yaml为纯键值对格式(移除ConfigMap的API定义):
key1: value1 key2: value2
- 方法二:在
kustomization.yaml中改用literals字段直接定义键值:
configMapGenerator: - name: outputmap literals: - key1=value1 - key2=value2
2. 缺少ConfigMap与Deployment的关联配置
Kustomize不会自动将ConfigMap注入Deployment,必须显式配置关联关系,可通过两种方式实现:
方式一:用Kustomize的patches字段修改Deployment
在kustomization.yaml中添加补丁,将ConfigMap作为环境变量注入容器:
configMapGenerator: - name: outputmap literals: - key1=value1 - key2=value2 resources: - nginxdeployment.yaml patches: - target: kind: Deployment name: nginxexercise patch: |- - op: add path: /spec/template/spec/containers/0/envFrom value: - configMapRef: name: outputmap
方式二:直接修改Deployment配置
在nginxdeployment.yaml的容器部分添加envFrom字段,引用ConfigMap:
containers: - image: "nginx:1.21.1" name: mynginx ports: - name: myport containerPort: 80 envFrom: - configMapRef: name: outputmap
注意:使用ConfigMapGenerator时,生成的ConfigMap会自动添加哈希后缀(如
outputmap-dc4gdb5cg2),Kustomize会自动替换Deployment中的引用,无需手动修改名称。
内容的提问来源于stack exchange,提问作者curiousengineer
相关产品推荐
相关产品推荐

