什么是 Helm
在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随 着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本 管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理
Helm 本质就是让 K8s 的应用管理(Deployment,Service(svc) 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署 一套yaml搞定多套环境。
Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和 release
- chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。
- release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release
Helm 包含三个组件:Helm 客户端,chart仓库,和实例release
- Helm 客户端负责 chart 和 release 的创建以及和kubernetes API通信
- Repository 用于发布和存储chart包的仓库, 类似yum仓库或docker仓库
- Release 用chat包部署的一个实例,通过chart在k8s中部署的应用都会产生一个唯一的Release, 同一chart部署多次会产生多个Release
理解:将这些yaml部署完成后,他也会记录一个版本,维护一个release的版本,通过release这个实例,帮我们创建具体的pod和deployment等资源
helm2和helm3的区别
1 2 3 4 5 6 7 8 9 |
(1).helm3移除了Tiller组件helm2中helm客户端和k8s通信是通过Tiler组件和k8s通信,helm3移除了Tier组件,直接使用kubeconfig文件和k8s的 apiserver通信 (2).删除 release 命令变更#helm delete release-name --purge ->> helm uninstall release-name (3).查看 charts 信息命令变更 #helm inspect release-name -->> helm show release-name (4).拉取 charts 包命令变更 ->> helm pull chart-name #helm fetch chart-name (5).helm3中必须指定release 名称,如果需要生成一个随机名称,需要加选项--generate-name,helm2中如果不指定release名称,可以自动生成一个随机名称 |
Helm3 部署
helm分为(客户端 和 服务端)
Helm 由客户端命令行工具 helm 和仓库组成,Helm 的安装十分简单。
客户端安装(helm)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#下载 helm 命令行工具到 master 节点 node1 的 /usr/local/bin 下,这里下载的 2.13. 1版本: ntpdate ntp1.aliyun.com wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz tar -zxvf helm-v2.13.1-linux-amd64.tar.gz cd linux-amd64/ cp helm /usr/local/bin/ chmod a+x /usr/local/bin/helm #下载安装helm3.x版本 #wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz #tar -zxf helm-v3.5.2-linux-amd64.tar.gz #ls helm-v3.5.2-linux-anid64.tar.gz linux-amd64 #ls linux-amd64/ heIm LICENSE README.md # mv linux-amd64/helm /usr/local/bin/ # helm version version,Buildinfofversion:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", Gitreestate:"dirty", Goversion:" go1.15.7" |
heml目录结构详解
1 |
helm create mychart |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mychart/ #chart包名称 ├── charts #存放子chart的目录,目录里存放这个chart依赖 ├── Chart.yaml #存放chart的基本信息,名称,描述,版本等变量,变量文件都可以被templates下文件引用 ├── templates #模板文件目录,目录里存放所有yaml模板文件 │ ├── deployment.yaml #创建deployment.yaml对象的模板文件 │ ├── _helpers.tpl #防止模板助手的文件,可以在整个chart中重复使用,放一些公共模板 │ ├── hpa.yaml │ ├── ingress.yaml │ ├── NOTES.txt #存放提示信息的文件,介绍这个chart的使用帮助 │ ├── serviceaccount.yaml │ ├── service.yaml │ └── tests #用于测试的文件,测试完部署完后,如是web,做一个链接看看是否部署正常 │ └── test-connection.yaml └── values.yaml #定义变量,渲染模板templates里面可调用的变量,这样发版的版本信息,以及环境信息,就不用准备好几套yaml,直接修改values.yaml的变量即可 #注:这个templates模板文件呢只是参考,实际应用可能templates下所有都清掉,按照自己项目来创建。 |
实操(笔记)(创建一个configmap)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#清理掉templates rm -rf templates/* #编写自己要用的configmap cd templates/* vim configmap.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: xiaozi-dev-cm namespace: xiaozi-dev data: xiaozi.jvm: "-Xms128m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m" xiaozi.denv: "dev" xiaozi.time: "Asia/Shanghai" |
创建一个release实例
1 2 |
#使用helm安装一个release的实例,指定release实例名称:myconfigmap, 指定chart目录./mychart helm install myconfigmap ./mychart |
安装成功后,用helm get manifest 【实例名】 命令可以查看已经发布到k8s中的release信息
1 |
helm get manifest myconfigmap |
1 |
我们通过helm install 来部署实例和 kubectl apply 来部署实例目前的情况效果是一样的。 |
删除实例
1 |
helm uninstall myconfigmap |
修改模板文件configmap.yaml data 值为变量,将变量值定义至values.yaml
1 2 3 4 5 6 7 8 9 |
apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap #最前面的.从作用域最顶层命名空间开始,既:在顶层ns中开始找Release对象,再查早name对象 ,Release就是创建实例时候的实例名"helm install [实例名] chart目录,最终cm的name就是"[实例名]-configmap"拼接起来的" .Release.Name属于内置变量 namespace: xiaozi-dev data: xiaozi.jvm: "-Xms128m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m" xiaozi.denv: {{ .Values.xiaozi_denv }} #这个变量的值是调用的values.yaml文件里面定义的变量,.Values这是个对象,意思是调用values.yaml文件。后面的是文件内的变量名称。来获取这个变量的值 xiaozi.time: "Asia/Shanghai" |
重新install, 并查询cm值
4. helm的测试渲染命令(不真正执行,只是看是否能运行)
1 |
helm提供了一个用来渲染模板的明亮,该命令可以将模板内容渲染出来,但是不会进行安装和其他操作,可以用该命令来测模板渲染的内容是否正确。 |
1 |
helm install [实例名] chart目录 --debug --dry-run |
1 |
helm install myconfigmap ./mychart --debug --dry-run |
- 本文固定链接: https://www.yoyoask.com/?p=11474
- 转载请注明: shooter 于 SHOOTER 发表