Helm 包管理

一个应用常由十几个 yaml 组成,还要在开发/生产间改镜像、调副本数,手动复制粘贴极易出错。Helm 是 Kubernetes 的包管理器,把一组资源打包成 Chart(模板+参数),一条命令完成安装、升级、回滚与卸载,相当于 Linux 的 apt/yum。

核心概念

概念说明
Chart应用的打包模板,含资源 yaml 模板与默认参数
ReleaseChart 的一次部署实例,每次 install 产生一个
Repository存放 Chart 的仓库,类似软件源
values.yamlChart 内的默认参数,部署时可覆写

安装 Helm 与配置仓库

先在客户端安装 helm 命令(方式见官方文档),再添加 Chart 仓库:

helm version
# 输出:version.BuildInfo{Version:"v3.x.x", ...}
helm repo add bitnami https://charts.bitnami.com/bitnami   # 添加仓库
helm repo update                      # 更新仓库索引
helm search repo nginx                # 搜索 Chart
# 输出:NAME            CHART VERSION   APP VERSION
#       bitnami/nginx   19.x.x         1.25.x

常用部署命令

安装、升级、回滚、卸载构成完整生命周期:

helm install my-nginx bitnami/nginx          # 安装,my-nginx 是 release 名
helm list                                    # 查看已安装的 release
helm upgrade my-nginx bitnami/nginx --set replicaCount=3   # 升级并覆写参数
helm history my-nginx                        # 查看 release 的版本历史
helm rollback my-nginx 1                     # 回滚到第 1 个版本
helm uninstall my-nginx                      # 卸载

Chart 目录结构

一个 Chart 的典型结构如下,templates 里是带占位符的资源模板:

mychart/
├── Chart.yaml          # 名称、版本等元信息
├── values.yaml         # 默认参数
├── charts/             # 依赖的子 Chart
└── templates/
    ├── deployment.yaml # Deployment 模板
    ├── service.yaml    # Service 模板
    └── _helpers.tpl    # 公共模板函数

values.yaml 覆写

部署时按环境覆盖默认值,优先级:--set > -f 自定义文件 > values.yaml 默认值:

helm upgrade my-nginx bitnami/nginx -f prod-values.yaml
# prod-values.yaml
replicaCount: 3
image:
  repository: myregistry/nginx
  tag: "1.25.3"

模板简例

模板用 {{ .Values.xxx }} 引用 values.yaml 的值,配合模板函数动态生成:

# templates/deployment.yaml(片段)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

values.yaml 里 image.tag 写成 1.25.3,渲染出的镜像就是 myregistry/nginx:1.25.3;模板函数可加默认值兜底,如 {{ .Values.image.tag | default "latest" }}。

小结:Helm 用 Chart 打包应用、values.yaml 存参数、模板渲染出可部署的 yaml;install 部署、upgrade 升级、rollback 回滚、uninstall 卸载一气呵成,多环境差异用 -f 与 --set 覆写即可。

笔记加载中…