helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-release staging 1 2020-03-23 22:24:12.345011 +0800 CST deployed redis-10.5.11 5.0.8
查看 configMap
[root@master mychart]# kubectl get cm mychart-configmap
NAME DATA AGE
mychart-configmap 1 2m6s
helm package mychart
Successfully packaged chart and saved it to: /root/Downloads/charts/mychart-0.1.0.tgz
用 tgz 包安装
helm install mychart-0.1.0.tgz --namespace test -n mychart
NAME: mychart
LAST DEPLOYED: Thu Nov 8 15:03:19 2018
NAMESPACE: test
STATUS: DEPLOYED
RESOURCES:
==> v1/Service
NAME AGE
message-service-of-mychart 1s
==> v1beta2/Deployment
message-service-of-mychart 1s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
message-service-of-mychart-b545dfc84-fthg9 0/1 Pending 0 1s
查看部署
helm ls
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
mychart 3 Thu Nov 8 15:09:29 2018 DEPLOYED mychart-0.1.0 1.0 test
下线部署
helm delete mychart
更新部署
在更新chart后,编辑 mychart/Chart.yaml 种的 version 信息。
例如,我更新 version 为 version: 0.1.1。然后重新打包 helm package mychart
helm upgrade course ./mychart-0.1.1.tgz
helm Release "mychart" has been upgraded. Happy Helming!
LAST DEPLOYED: Thu Nov 8 15:52:17 2018
NAMESPACE: test
STATUS: DEPLOYED
回滚部署
回滚一个版本。
helm rollback course 1
helm rollback
helm rollback my-release # 回滚到上一个 revision
helm rollback my-release n # 回滚到第 n 个 revision
Helm
Helm 类似于 Linux 系统下的包管理器,如yum ,apt等,可以方便快捷的 将之前打包好的 yaml 文件快速部署进 kubernetes 内,方便管理维护。
Helm 的一些名字
一个命令行的客户端工具,主要用于 kubernetes 应用 chart 的 创建/打包/发布。
helm 的服务端,部署于 kubernetes 内,Tiller 接受 helm 的请求,并根据 chart 生成 kubernetes 部署文件(helm称为release),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
helm 的软件包,采用 tar 格式,其中包含运行一个应用所需的 所有镜像/依赖/资源定义 等。 还可能包含 kubernetes 集群中服务定义。
在 kubernetes 中集群中运行的一个 Chart 实例,在同一个集群上,一个 Chart 可以安装多次,每次安装均会生成一个新的release。
用于发布和存储 Chart 的仓库,Helm 客户端通过 HTTP 协议来访问仓库中 Chart 的索引文件和压缩包。
工作流程
Helm 从指定的目录或者 tgz 文件中解析出 Chart 结构信息
Helm 将指定的Chart结构和Values信息通过 gRPC 传递给 Tiller
Tiller 根据 Chart 和 Values 生成一个Release
Tiller 将 Release 发送给 Kubernetes 运行。
Helm 从指定的目录或者tgz文件中解析出 Chart 结构信息
Helm 将要更新的 Release 的名称和 Chart 结构,Values 信息传递给 Tiller
Tiller 生成 Release 并更新指定名称的 Release 的 History
Tiller 将 Release 发送给 Kubernetes 运行
Helm 将回滚的 release 名称传递给 Tiller
Tiller 根据 Release 名称查找 History
Tiller 从 History 中获取到上一个 Release
Tiller 将上一个 Release 发送给 Kubernetes 用于替换当前 Release
helm v3 安装部署
Helm3 不需要安装tiller,不需要执行 helm init。 需要提前准备一个 kubernetes 集群,在 kubectl 可以运行的机器上安装 Helm。
Helm 采用 客户端/服务器 架构
Chart 文件结构
Chart.yaml
用于描述 Chart 的基本信息,包括名称,版本等
常见配置
values.yaml
Deployment 等 yaml 配置文件,其中的双大括号包扩起来的部分是Go template。 这个值就是在 values.yaml 文件中定义的。
比如 ,Deployment 的 yaml 配置文件
values.yaml
操作
创建自己的 Chart 之后,可以删除 template 下的所有文件,并创建自己的 YAML 比如,创建一个
mychart/templates/configmap.yaml
由于创建的 yaml 文件在 template 下,安装,Tiller 就读取此文件,会将其发送给kubernetes。
其中,my-release 是 release 名称。Releases 也是 Helm 的概念之一。每次安装都会产生新的 release,更新时则会产生新的 release revision。你可以使用 helm list 命令查看当前命名空间下的所有 releases
查看 configMap
使用 模板指令。
{{.Release.Name}}
将 release 名称注入模板。 Release 对象是 Helm 的内置对象之一。Chart 打包
用 tgz 包安装
查看部署
下线部署
更新部署 在更新chart后,编辑 mychart/Chart.yaml 种的 version 信息。 例如,我更新 version 为
version: 0.1.1
。然后重新打包helm package mychart
回滚部署 回滚一个版本。
helm rollback
事例
做一个 go2cloud-api-doc 应用。
Charts 目录
templates/deployment.yaml
templates/service.yaml
values.yaml
Chart.yaml
升级副本数量
Helmfile
Helm 不提供 apply 命令,因此在 CI/CD 场景中必须考虑到判断是 install 还是 upgrade。
Helmfile 的文档非常简明、直接,例如
将以上内容保存为
helmfile.yaml
文件,随后执行helmfile apply
即可。Helmfile 将会帮我们:因此,上面提到的操作
可直接被简化为
同时,如果你安装了 helm-diff 插件,Helmfile 还会在执行操作前输出清晰的 diff。