- Helm 介绍
- 官网:
https://v3.helm.sh/zh/docs/
https://helm.sh/
helm 官方的 chart 站点:
https://hub.kubeapps.com/- Helm 是 kubernetes 的包管理工具,相当于 linux 环境下的 yum/apg-get 命令。
- Helm 的首要目标一直是让“从零到 Kubernetes”变得轻松。无论是运维、开发人员、经验丰富的DevOps 工程师,还是刚刚入门的学生,Helm 的目标是让大家在两分钟内就可以在 Kubernetes 上安装应用程序。
- Helm 可以解决的问题:
运维人员写好资源文件模板,交给开发人员填写参数即可- Helm 中的一些概念:
(1)helm:命令行客户端工具,主要用于 Kubernetes 应用中的 chart 的创建、打包、发布和管理。
(2)Chart:helm 程序包,一系列用于描述 k8s 资源相关文件的集合,比方说我们部署 nginx,需要 deployment 的 yaml,需要 service 的 yaml,这两个清单文件就是一个 helm 程序包,在 k8s 中把这些 yaml 清单文件叫做 chart 图表。
vlues.yaml 文件为模板中的文件赋值,可以实现我们自定义安装,如果是 chart 开发者需要自定义模板,如果是 chart 使用者只需要修改 values.yaml 即可
repository:存放 chart 图表的仓库,提供部署 k8s 应用程序需要的那些 yaml 清单文件chart--->通过 values.yaml 这个文件赋值-->生成 release 实例
helm 是 go 语言开发
(3)Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release,将在 k8s 中创建出真实运行的资源对象。
总结:
helm 把 kubernetes 资源打包到一个 chart 中,制作并完成各个 chart 和 chart 本身依赖关系并利用 chart 仓库实现对外分发,而 helm 还可通过 values.yaml 文件完成可配置的发布,如果 chart 版本更新了,helm 自动支持滚更更新机制,还可以一键回滚,但是不是适合在生产环境使用,除非具有定义自制 chart 的能力。- helm 属于 kubernetes 一个项目:
下载地址:
https://github.com/helm/helm/releases- Helm v3 版本变化
2019 年 11 月 13 日,Helm 团队发布 Helmv3 的第一个稳定版本。 该版本主要变化如下:
架构变化:
1、Helm 服务端 Tiller 被删除
2、Release 名称可以在不同命名空间重用
3、支持将 Chart 推送至 Docker 镜像仓库中
4、使用 JSONSchema 验证 chartvalues- 安装 Helm v3
K8s 版本支持的各个 helm 版本对照表:
https://helm.sh/zh/docs/topics/version_skew/- tar xf helm-v3.7.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/ 配置国内存放 chart 仓库的地址
阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)
官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国内可能无法访问。
微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的 chart这里都有,国内可能无法访问。
添加阿里云的 chart 仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories
添加 bitnami 的 chart 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
更新 chart 仓库
helm repo update
查看配置的 chart 仓库有哪些
helm repo list 删除 chart 仓库地址
helm repo remove aliyun
"aliyun" has been removed from your repositories
Helm 基本使用
- 搜索和下载 Chart
查看阿里云 chart 仓库中的 memcached
helm search repo aliyun |grep memcached
查看 chart 信息
helm show chart aliyun/memcached 下载 chart 包到本地
helm pull aliyun/memcached
Chart.yaml: chart 的基本信息,包括版本名字之类
templates: 存放 k8s 的部署资源模板,通过渲染变量得到部署文件
values.yaml:存放全局变量,templates 下的文件可以调用
_helpers.tpl 存放能够复用的模板
NOTES.txt 为用户提供一个关于 chart 部署后使用说明的文件部署 chart
- helm 部署 memcached 服务
修改 statefulset.yaml 文件
cd memcached
vim templates/statefulset.yaml- helm install memcached ./
测试 memecached 服务是否正常:
yum install nc -y
export POD_NAME=$(kubectl get pods --namespace default -l "app=memcached-memcached" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward $POD_NAME 11211
另外打开一个终端
echo -e 'set mykey 0 60 5\r\nhello\r' | nc localhost 11211
自定义 Chart 模板
- 自定义一个 Chart
安装好 helm 之后可以开始自定义 chart,那么需要先创建出一个模板如下:
helm create myapp ./
├── charts 用于存放所依赖的子 chart
├── Chart.yaml 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates 模板目录,保留创建 k8s 的资源清单文件
│ ├── deployment.yaml deployment 资源的 go 模板文件
│ ├── _helpers.tpl 模板助手文件,定义的值可在模板中使用
│ ├── hpa.yaml 水平 pod 自动扩缩容 go 模板文件
│ ├── ingress.yaml 七层代理 go 模板文件
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml service 的 go 模板文件
│ └── tests
│ └── test-connection.yaml
└── values.yaml 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件- Chart.yaml 编写规则
vim Chart.yaml
解释说明:
Chart.yaml 文件主要用来描述对应 chart 的相关属性信息,其中 apiVersion 字段用于描述对应 chart 使用的 api 版本,默认是 v2 版本;
name 字段用于描述对应 chart 的名称;
description 字段用于描述对应 chart 的说明简介;
type 字段用户描述对应 chart 是应用程序还是库文件,应用程序类型的 chart,它可以运行为一个 release,但库类型的 chart 不能运行为 release,它只能作为依赖被 application 类型的 chart 所使用;
version 字段用于描述对应 chart 版本;
appVersion 字段用于描述对应 chart 内部程序的版本信息- go 模板文件渲染
cat templates/deployment.yaml
解释·:该部署清单模板文件,主要用 go 模板语言来写的,其中{{ include "myapp.fullname" . }}就表示取 myapp 的全名;
{{ .Values.image.repository }}这段代码表示读取当前目录下的 values 文件中的 image.repository 字段的值;
{{ .Values.image.tag | default .Chart.AppVersion }}表示对于values 文件中 image.tag 的值或者读取 default.chart 文件中的 AppVersion 字段的值;
简单讲 go 模板就是应用对应 go 模板语法来定义关属性的的值;
一般都是从 values.yaml 文件中加载对应字段的值作为模板文件相关属性的值。
nindent 4:表示首行缩进 4 个字母
TRUNC(NUMBER)表示截断数字
values.yaml 文件编写
- cat values.yaml
解释:比如我们要引用 values.yaml 文件中的 image 字段下的 tag 字段的值,我们可以在模板文件中写成{{ .Values.image.tag }};
如果在命令行使用--set 选项来应用我们可以写成 image.tag;
修改对应的值可以直接编辑对应 values.yaml 文件中对应字段的值,也可以直接使用--set 指定对应字段的对应值即可;
默认情况在命令行使用--set 选项给出的值,都会直接被替换,没有给定的值,默认还是使用 values.yaml 文件中给定的默认值;部署 release
- helm install myapp .
Helm 常用命令演示
- 检查 values 语法格式
helm lint /root/myapp/
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!