Skip to content

k8s helm包管理

helm简介

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml、service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署。

Helm 有三个重要的概念

Helm 有三个重要的概念:Chart 、Repository 和 Release

  • Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

  • Repository(仓库):Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

  • Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。

安装helm

下载 Helm 客户端:

访问 Helm 的 GitHub 标签页面 https://github.com/helm/helm/tags 来下载适合操作系统的 Helm 版本。例如,如果使用的是 Linux 系统,可以下载 helm-v3.6.0-linux-amd64.tar.gz。

安装

shell
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

验证

shell
helm version

添加仓库

shell
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator

更新仓库

shell
helm repo update

查看 Helm 仓库列表

shell
helm repo list

搜索 Chart

shell
helm search repo stable

移除某个仓库

shell
helm repo remove incubator

查看 Chart 信息

shell
helm show chart stable/mysql     # 查看基本信息
helm show all stable/mysql     # 获取所有信息

安装 Chart

使用 helm install 命令安装 Chart。可以指定一个 release 名称,或者使用 --generate-name 让 Helm 为生成一个随机名称。

shell
helm install my-redis bitnami/redis [-n default]  # 指定 release 名称
helm install bitnami/redis --generate-name     # 自动生成 release 名称

Helm Chart 自定义模板

Chart 结构概览

  • Chart.yaml:包含 chart 的元数据。
  • README.md:提供关于 chart 的信息和使用说明。
  • templates:包含 chart 的模板文件,如:
  • configurationFiles-configmap.yaml:配置文件的 ConfigMap 模板。
  • deployment.yaml:Deployment 资源的模板。
  • _helpers.tpl:辅助模板文件。
  • initializationFiles-configmap.yaml:初始化文件的 ConfigMap 模板。
  • NOTES.txt:安装后的说明和注意事项。
  • pvc.yaml:PersistentVolumeClaim 资源的模板。
  • secrets.yaml:Secret 资源的模板。
  • serviceaccount.yaml:ServiceAccount 资源的模板。
  • servicemonitor.yaml:ServiceMonitor 资源的模板。
  • service.yaml:Service 资源的模板。
  • ingress.yaml:Ingress 资源的模板。
  • tests:包含测试相关的模板文件。
  • values.yaml:包含 chart 的默认配置值。

创建自定义的 chart

使用 helm create 命令创建一个新的 Helm chart,例如 nginx。

shell
helm create nginx
tree nginx
nginx
├── charts
├── Chart.yaml
├── templates
   ├── deployment.yaml
   ├── _helpers.tpl
   ├── hpa.yaml
   ├── ingress.yaml
   ├── NOTES.txt
   ├── serviceaccount.yaml
   ├── service.yaml
   └── tests
       └── test-connection.yaml
└── values.yaml

templates 目录下的 YAML 文件模板中,变量(Go template 语法)的值默认在 nginx/values.yaml 中定义,只需修改 nginx/values.yaml 的内容,即可完成 templates 目录下 YAML 文件的配置。

例如在 deployment.yaml 中定义的容器镜像:

yaml
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"

查看默认值:

shell
cat nginx/values.yaml | grep repository
# 输出
repository: nginx

以上变量值是在 helm create 生成 chart 时自动生成的默认值,可根据实际情况修改。

打包和部署 Helm Chart

  • 使用 helm lint 命令检查 chart 的依赖和模板配置是否正确。
  • 使用 helm package 命令打包 chart,生成 .tgz 文件。
  • 使用 helm install 命令部署 chart,可以选择使用 --dry-run 和 --debug 参数进行测试。
  • 使用 helm install 命令正式部署 chart,可以指定命名空间和配置文件。

Helm 常用命令

  • helm create:在本地创建新的 chart;
  • helm dependency:管理 chart 依赖;
  • helm intall:安装 chart;
  • helm lint:检查 chart 配置是否有误;
  • helm list:列出所有 release;
  • helm package:打包本地 chart;
  • helm repo:列出、增加、更新、删除 chart 仓库;
  • helm rollback:回滚 release 到历史版本;
  • helm pull:拉取远程 chart 到本地;
  • helm search:使用关键词搜索 chart;
  • helm uninstall:卸载 release;
  • helm upgrade:升级 release;