Skip to content
返回部署

Kubernetes ConfigMap

存非敏感配置为键值对,挂载为环境或文件。

容器进阶

为什么

ConfigMap 分离配置和镜像 — 同镜像用不同配置在 dev/staging/prod 工作。挂载为环境变量或文件无需重建镜像。

Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。

何时使用

非敏感配置(日志级、功能开关)用 ConfigMap。敏感用 Secret。

如何做

1. 创建 — kubectl create configmap 或 YAML 2. 从文件 — --from-file=config.yaml 3. 环境 — envFrom 或 env.valueFrom 4. Volume — 挂载为 pod 中文件 5. 更新 — kubectl apply,pod 需重启 6. 不可变 — immutable: true 性能 7. 大小 — 每 ConfigMap 最大 1MB

示例

# configmap.yaml apiVersion: v1 kind: ConfigMap metadata: { name: app-config } data: LOG_LEVEL: info FEATURE_FLAGS: "auth,search" config.yaml: | database: { pool: 10, timeout: 5000 } # deployment.yaml — 用作环境和 volume spec: containers: - name: app envFrom: - configMapRef: { name: app-config } volumeMounts: - name: config mountPath: /etc/config volumes: - name: config configMap: { name: app-config }

常见问题

  • ⚠配置未更新 — pod 不自动重载,需 rollout restart
  • ⚠过大 — 1MB 限制,大配置文件用 volume
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓所有配置用 envFrom — 一行注入所有 ConfigMap 键为环境
  • ✓配置更新后 rollout restart — kubectl rollout restart deployment/app
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答