随笔

Helm Chart

发现越来越多公司用 K8S 了,反正不管服务多大多小,都上 K8S,那之前了解过的简单的 deployment 部署就不够用了,就得用上更上一层的工具 Helm。

What

Helm 是打包+模版+发布工具,它可以把各种资源如 Deployment、Service、ConfigMap 写成模版,打成一个 Chart,并在运行时根据 values 动态渲染这些模版并部署资源,并且支持发布回滚。

Helm 是基于 Go 语言实现的,所以模板语法采用的是 Go 的 template。

How

一个典型的 Helm Chart 结构大概是这样:

mychart/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── deployment.yaml
    ├── service.yaml

或者更典型的包含前后端的项目大概是这样:

mychart/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── frontend/
    │   ├── deployment.yaml
    │   └── service.yaml
    ├── backend/
    │   ├── deployment.yaml
    │   └── service.yaml
    └── _helpers.tpl

其中 values 就是存放变量的地方,在 templates 下面的各个 yaml 配置中引用,比如前端项目中的仓库以及暴露的端口可以定义为变量:

spec:
      containers:
      - name: frontend
        image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}"
        ports:
        - containerPort: {{ .Values.frontend.service.port }}

具体每个放什么可以拷贝上方目录结构,然后对着 AI 吟唱:请帮我生成一个 Helm Chart,目录参考以上,技术栈用的是 XXX+XXX。

接着是运行该 Chart

helm install myapp ./mychart
helm upgrade myapp ./mychart

以及如果运行了发现有问题,需要回滚

helm rollback myapp <revision>

如果觉得 CLI 工具不够直观,操作起来不够简单,也有许多开源的 GUI 工具,比如 Argo CD 基于 GitOps 工作流,当 Helm Chart 仓库产生变更时自动执行部署。

比如当进入测试阶段后,当测试提出问题,开发修复完成后,就可以在构建完成后提交一个 PR,测试进行 MR 后自动部署,接着就可以验收之前提出的问题。

回顾历史演进,到目前为止可以细分为五个阶段:

阶段 0: 直接部署
阶段 1: Docker 单机部署
阶段 2: Docker Compose 多服务协调
阶段 3: Kubernetes YAML 资源部署
阶段 4: Kubernetes Helm 模板化部署

本文链接:https://note.lilonghe.net/post/helm-chart.html

-- EOF --