Skip to content

1. Helm:Kubernetes 的包管理工具

是什么?

• 相当于 Kubernetes 的 "apt/yum",用于管理复杂应用的打包、部署和版本控制。 • 通过 Chart(包含预定义模板和配置)简化多资源部署。

核心概念

术语作用示例
Chart应用包,包含所有K8s资源模板和默认配置helm create myapp 生成一个Chart目录
ReleaseChart 的运行时实例(每次安装生成唯一Release)helm install myapp ./myapp-chart 创建名为 myapp 的Release
Values动态参数配置,支持覆盖默认值helm install --set replicaCount=3 覆盖副本数

典型使用场景

bash
# 安装一个MySQL Chart(带自定义密码)
helm install my-db bitnami/mysql --set auth.rootPassword=123456

# 升级应用版本
helm upgrade my-db bitnami/mysql --version 9.0.0

2. Kustomize:原生配置管理工具

是什么?

• Kubernetes 内置 的配置管理方案(kubectl apply -k 直接支持)。 • 通过 文件叠加(overlays) 实现环境差异化,不修改原始YAML

核心概念

术语作用示例
Base基础配置(原始YAML文件)kustomization.yaml 中定义 resources: [deployment.yaml]
Overlay环境特定配置(通过patch/替换实现差异化)overlays/prod/ 目录下修改镜像标签或副本数
Patch对基础配置的局部修改通过JSON Patch或YAML片段覆盖特定字段

典型使用场景

bash
# 目录结构
base/
├── deployment.yaml
└── kustomization.yaml
overlays/
└── prod/
    ├── replica-patch.yaml  # 修改副本数
    └── kustomization.yaml

# 部署生产环境配置
kubectl apply -k overlays/prod

3. 直观对比

功能HelmKustomize
模板引擎支持复杂逻辑(Go模板)仅支持简单字段替换
环境管理通过不同 values.yaml 文件通过 overlays 目录结构
学习成本较高(需学模板语法)低(纯YAML操作)
适用阶段适合应用开发阶段(打包分发)适合集群运维阶段(配置管理)
版本控制内置版本回滚(helm rollback需配合Git管理

4. 如何选择?

用 Helm 如果:

• 需要将应用打包分发(如数据库、中间件) • 配置需要动态参数化(如不同环境不同资源限制) • 涉及复杂依赖(如应用依赖Redis和PostgreSQL)

用 Kustomize 如果:

• 追求简单性,避免模板语法 • 需要审计配置变更(所有修改可见于YAML文件) • 已有一套YAML配置,只需小范围调整


5. 快速示例

Helm 示例

yaml
# values.yaml
replicaCount: 1
image:
  repository: nginx
  tag: "1.23"

# templates/deployment.yaml
spec:
  replicas: { { .Values.replicaCount } }
  containers:
    - image: { { .Values.image.repository } }:{{ .Values.image.tag }}

Kustomize 示例

yaml
# base/kustomization.yaml
resources:
  - deployment.yaml

# overlays/prod/replica-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3

总结

Helm = 应用商店(适合分发复杂应用) • Kustomize = 配置版本控制(适合管理已有配置)

大多数团队会混合使用: • 用 Helm 安装第三方应用(如Prometheus) • 用 Kustomize 管理自研服务的环境差异

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer