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。
安装
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm验证
helm version添加仓库
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更新仓库
helm repo update查看 Helm 仓库列表
helm repo list搜索 Chart
helm search repo stable移除某个仓库
helm repo remove incubator查看 Chart 信息
helm show chart stable/mysql # 查看基本信息
helm show all stable/mysql # 获取所有信息安装 Chart
使用 helm install 命令安装 Chart。可以指定一个 release 名称,或者使用 --generate-name 让 Helm 为生成一个随机名称。
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。
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 中定义的容器镜像:
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"查看默认值:
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;