You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:27:32