Helm 构建 ConfigMap 与 Secret 教程

AI摘要
本文是一篇关于使用Helm工具在Kubernetes中构建和管理ConfigMap与Secret的技术教程。文章属于【知识分享】,详细介绍了从项目结构、模板编写、配置定义到部署流程及进阶优化的完整实践步骤,旨在帮助读者实现配置的集中管理与多环境自动化部署。
# Helm 构建 ConfigMap 与 Secret 教程

## 一、背景说明

在 Kubernetes 中:

- **ConfigMap**:用于存储非敏感配置(如地址、端口、开关)
- **Secret**:用于存储敏感信息(如密码、密钥)

Helm 通过模板机制,将 `values.yaml` 中的配置渲染为 K8S 资源,实现统一管理。

---

## 二、项目结构

一个标准 Helm Chart 结构如下:

my-chart/
├── Chart.yaml
├── values.yaml
└── templates/
├── configmap.yaml
├── secret.yaml
└── deployment.yaml


---

## 三、定义 ConfigMap

### 1. 编写模板(templates/configmap.yaml)

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.config.name }}
  namespace: {{ .Release.Namespace }}
data:
{{- range $key, $value := .Values.config.data }}
  {{ $key }}: {{ $value | quote }}
{{- end }}

2. 编写配置(values.yaml)

config:
  name: app-config
  data:
    APP_ENV: production
    LOG_LEVEL: info
    SERVICE_HOST: app-service
    SERVICE_PORT: "8080"

3. 生成效果(示例)

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: "production"
  LOG_LEVEL: "info"
  SERVICE_HOST: "app-service"
  SERVICE_PORT: "8080"

四、定义 Secret

1. 编写模板(templates/secret.yaml)

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Values.secret.name }}
  namespace: {{ .Release.Namespace }}
type: Opaque
data:
{{- range $key, $value := .Values.secret.data }}
  {{ $key }}: {{ $value | b64enc }}
{{- end }}

2. 编写配置(values.yaml)

secret:
  name: app-secret
  data:
    DB_PASSWORD: mypassword
    API_KEY: my-api-key

3. 生成效果(示例)

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  DB_PASSWORD: bXlwYXNzd29yZA==
  API_KEY: bXktYXBpLWtleQ==

注意:Secret 中的数据会自动进行 base64 编码


五、在 Deployment 中引用

1. 引用 ConfigMap 和 Secret

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  template:
    spec:
      containers:
        - name: app
          image: my-app:latest
          envFrom:
            - configMapRef:
                name: app-config
            - secretRef:
                name: app-secret

2. 容器内效果

容器启动后,会自动拥有如下环境变量:

APP_ENV=production
LOG_LEVEL=info
SERVICE_HOST=app-service
SERVICE_PORT=8080
DB_PASSWORD=mypassword
API_KEY=my-api-key

六、部署流程

1. 安装 Chart

helm install my-app ./my-chart

2. 更新配置

helm upgrade my-app ./my-chart

3. 查看资源

kubectl get configmap
kubectl get secret

4. 查看渲染结果(推荐)

helm template my-app ./my-chart

七、多环境配置(推荐)

可以通过不同 values 文件区分环境:

values-dev.yaml
values-test.yaml
values-prod.yaml

部署方式:

helm install my-app -f values-prod.yaml ./my-chart

八、进阶优化

1. 自动触发 Pod 重启(配置变更)

在 Deployment 中增加:

metadata:
  annotations:
    checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}

2. 按模块拆分配置

建议不要将所有配置放在一个 ConfigMap 中:

app-db-config
app-cache-config
app-message-config

3. 最小权限原则

  • 只给需要的服务注入对应配置

  • 避免所有服务共享所有 Secret


九、总结

Helm 构建配置的核心逻辑:

values.yaml(配置)
        +
templates/*.yaml(模板)
        ↓
生成 Kubernetes ConfigMap / Secret

通过这种方式,可以实现:

  • 配置集中管理

  • 多环境隔离

  • 自动化部署

本作品采用《CC 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
php @ 远程
文章
95
粉丝
16
喜欢
77
收藏
88
排名:522
访问:1.6 万
私信
所有博文
社区赞助商