1. helm 基本介绍
1.1 helm 项目
Helm 帮助您管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。Helm Chart 易于创建、发版、分享和发布,所以停止复制粘贴,开始使用 Helm 吧。Helm 是 CNCF 的毕业项目,由 Helm 社区维护。
优势:
复杂性管理:
即使是最复杂的应用,Helm Chart 依然可以描述, 提供使用单点授权的可重复安装应用程序。
易于升级:
随时随地升级和自定义的钩子消除您升级的痛苦。
分发简单:
Helm Chart 很容易在公共或私有化服务器上发版,分发和部署站点。
回滚:
使用 helm rollback 可以轻松回滚到之前的发布版本。
1.2 helm 基本原理
- helm cli: 一个命令行工具,用于本地开发及管理chart,chart仓库管理等
- tiller: 是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release. helm V3 版本已废弃
- chart: Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源
- release : 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release.
Helm3 可以支持所有的 Kubernetes 认证及鉴权等全部安全特性。Helm和本地的 kubeconfig flie 中的配置使用一致的权限。管理员可以按照自己认为合适的粒度来管理用户权限,下图可详细看出helm2到helm3的改变
2. helm 安装和使用
安装须知:
【1】 保证你的helm 和 k8s/k3s 在一台机器上,或helm 在机器或者容器能够直接调用kubectl命令
【2】安装k8sHelm与您的集群兼容
2.1. 使用二进制文件安装
#1.本人机器是mac m1, m1
cd /home/
tar zxvf helm-v3.10.0-linux-arm64.tar.gz
cp linux-arm64/helm /usr/local/bin/helm
# 源配置,使用国内源
helm repo add aliyun
helm repo add stable
helm repo update
root@master:~# helm repo list
NAME URL
stable
aliyun
2.2 helm 常用使用命令
#查看环境信息
helm env
#查看版本信息
helm version
#查找软件
helm search repo nginx
helm search hub nginx
#查看已有仓库列表
helm repo list
#更新仓库资源
helm repo update
#删除一个仓库
helm repo remove bitnami
#创建仓库索引
helm repo index /root/helm/repo
#部署chart
helm install centos-nginx bitnami/nginx
#chart状态查看
helm status centos-nginx
#卸载chart
helm uninstall centos-nginx
#查看chart列表 -A 表所有namespace
helm list -A
#chart部署记录
helm history centos-nginx
#chart更新
helm upgrade --set image.tag=nginx.18 centos-nginx bitnami/nginx
#chart回滚
helm rollback centos-nginx 1
3. helm chart 包快速构建和调试
root@master:~/helm# tree -L 2 airflow
airflow
├── Chart.yaml
├── README.md
├── charts
│ ├── postgresql
│ └── redis
├── requirements.lock
├── requirements.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── config
│ ├── extra-manifests.yaml
│ ├── flower
│ ├── pvc-logs.yaml
│ ├── pvc.yaml
│ ├── rbac
│ ├── scheduler
│ ├── webserver
│ └── worker
└── values.yaml
# ------------------------------------ #
# Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
# values.yaml:用于存储 templates 目录中模板文件中用到变量的值。
# Templates:目录里面存放所有 yaml 模板文件, 。
# charts:目录里存放这个 chart 依赖的所有子 chart。
# requirements.lock, requirements.yaml helm v2 将模块依赖注册在这里,V3 版本部署以来注册在Charts.yaml
# NOTES.txt:用于介绍 Chart 帮助信息,helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
# _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用。
3.1 快速开始,hello world demo
- 快速构建一个 简单实例
helm create mychart
rm -rf mychart/templates/*
创建一个名为 mychart/templates/configmap.yaml的文件开始,模板命令 {{ .Release.Name }} 将发布名称注入了模板。值作为一个 命名空间对象 传给了模板,用点(.)分隔每个命名空间的元素。
Release前面的点表示从作用域最顶层的命名空间开始(稍后会谈作用域)。这样.Release.Name就可解读为“通顶层命名空间开始查找 Release对象,然后在其中找Name对象.
- Chart.yaml 定义
核心关注参数:
- version: chart 包版本,必需要参数
- apiVersion: helm api server 调用的版本,必需要参数
- name: 包名称, 必需要参数
- appVersion: 应用版本,非必需参数
从开发维护角度来说,可添加如下参数:
- maintainers: 开发和维护者信息
- description: 包的用途和描述说明
- Vayaml 定义
主要定义参数:
- 副本集定义
- 镜像 :仓库地址和版本tag 定义
- service 定义
- 服务探活: readiness, liveness
- 资源限制:resouce
- 机器标签: nodeSelector
- 资源亲和:Affinity
3.2 chart 快速调试
- 可以使用 helm install --debug --dry-run <helm-release-name> <helm-chart-path>
- 现在安装资源,可以立即看到模板命令的结果
4. helm + chart的最佳实践(gostack-api)
4.1 命名规范
类型 |
定义格式 |
示例 |
node label |
region级别: ${svc_name}.ctyun.io/${region_group}: ${region_group} AZ级别: ${svc_name}.ctyun.io/${az_group}: ${az_group} |
region: haproxy.ctyun.io/region-control: region-control az: gostack.ctyun.io/group-control: {{ .Release.Namespace }}-control-group |
sevice label |
io.kompose.service: ${service_name} |
labels: io.kompose.service: gostack-api name: gostack-api |
svc |
region级别: ${svc_name}.default.svc.cluster.netaz级别: ${svc_name}.${az_namespace}.svc.cluster.net |
|
4.2 chart 模版快速创建
- 快速构建chart包模版
4.3 chart 编写
- configmap 定义:对应模版文件 {{xx}}-configmap.yaml
- service 定义:对应模版文件 {{xx}}-service.yaml
- deployment定义:对应模版文件 {{xx}}-deployment.yaml
- values定义:对应模版文件 yaml
- chart 包调试(dryrun 模式)
调试结束后,可以下发真是的安装