Helm - Kubernetes包管理器¶
Helm (英文原义是”舵”) 是用来管理Kubernetes应用程序的包管理器,Helm Charts 可以用于定义、安装以及更新复杂的Kubernetes应用程序。最新的Helm由 CNCF 负责维护,由微软、Google,Bitnami以及Helm社区合作。
注解
Helm是Kubernetes应用程序定义和安装、更新的管理器,而 Operator 是Kubernetes定义和部署工具。那么两者有什么区别和使用场景的不同呢? 在Haker News上有一个 Can anyone talk about the positives/negatives of Operators v/s Helm Charts? 的讨论
Comparing Kubernetes Operator Pattern with alternatives 对比了Operator和Helm在实践Postgres数据库的不同点,可以参考。
Helm分为客户端Helm (运行在你的客户端电脑,有多种版本) 和集群服务器端组件Tiller (运行在Kubernetes集群)
安装Helm¶
二进制执行程序安装¶
Helm的release 提供了不同操作系统的二进制执行程序,可以手工下载进行安装:
在 macOS 安装:
wget https://get.helm.sh/helm-v2.14.1-darwin-amd64.tar.gz tar -zxvf helm-v2.14.1-darwin-amd64.tar.gz sudo mv darwin-amd64/helm /usr/local/bin/helm
在 Linux 安装:
wget https://get.helm.sh/helm-v3.9.1-linux-amd64.tar.gz
tar -zxvf helm-v3.9.1-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
注解
其他操作系统二进制版本安装方法类似
脚本安装¶
https://git.io/get_helm.sh 提供了安装脚本:
curl -LO https://git.io/get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
当然,你也可以直接运行命令 curl -L https://git.io/get_helm.sh | bash
。
需要注意的是,上述网站访问可能需要翻墙。
安装Tiller¶
Tiller是 helm
命令的集群端组件,用于接收 helm
的命令并直接和Kubernetes API通讯以实际执行创建或删除资源的工作。大多数云平台激活了称为基于角色的访问控制(Role-Based Access Control, RBAC)功能。这种环境下,为了能够给予 Tiller 足够权限,可以使用 Kubernetes serviceaccount
资源。
最简单的在集群上安装 tiller
是使用 helm init
命令,该命令会校验 helm
的本地环境以便正确设置。然后会连接到 kubectl
默认连接的集群( 通过 kubectl config view
可以看到当前默认配置连接的集群 ),一旦正确连接到集群,就会在 kube-system
名字空间中安装 tiller
。
检查本地
kubectl
连接的默认集群:kubectl config view
注解
请检查当前连接集群 current-context
是否正确,如果是多个集群,需要使用 kubectl config set current-context my-context
切换。
在
kube-system
名字空间创建tiller
的serviceaccount
kubectl -n kube-system create serviceaccount tiller
将
tiller
这个serviceaccount
绑定到cluster-admin
角色:kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
执行
helm init
则将tiller
安装到集群中:helm init --service-account tiller
注解
注意默认Tiller部署采用的是非安全的 allow unauthenticated users
策略,为避免这个问题,请在运行 helm init
命令时添加参数 --tiller-tls-verify
。这里我是测试环境验证,后续生产环境部署需要改进。
安装完成后检查验证 tiller 运行,注意在kubernetes集群中的
kube-system
namespace有新的pod名为tiller-deploy-xxxx
kubectl get pods --namespace kube-system
输出显示:
NAME READY STATUS RESTARTS AGE
...
tiller-deploy-9bf6fb76d-lj2dx 1/1 Running 0 2m1s
注解
使用helm的实践待续…