如何在 K8S 集群中安装 Helm ?
Helm 官方文档:https://helm.sh/zh/docs/
1. 为什么需要 Helm?
每个成功的软件平台都有一个优秀的打包系统,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 则是 Kubernetes 上的包管理器。
如果只是部署单台或者少数的几台应用,那么使用 kubectl apply
这样的方式就已经足够。
但如果应用组成的服务多达几十上百呢?一个一个 apply 就显得太过麻烦,问题在于人工管理,有如下问题
- 人工管理,很难保存大量服务、应用之间的依赖关系。
- 服务应用的 yaml 配置无法模板化、参数化,导致配置文件无法复用,细微的改变都要新建一个 yaml 文件
- 无法支持应用级别的版本管理,只能对单个 Deployment 进行回滚。
- 无法对服务层级的应用状态进行验证,健康检查只对单个容器有用。
这时候,就需要一个更高层级的、用来管理大批量应用的工具,而这个工具就是 Helm
2. Helm 中的基本概念?
Helm 中有两个最重要的概念:
- chart:k8s 中对象的模板、参数关系、依赖关系、文档说明。类似于 Python编程中的 类
- release:chart 的具体运行实例,类似于 Python编程中的实例
Helm 中的组件有两个:
- Helm 客户端:helm 的命令行工具,与后端 Tiller 服务器交互,用来管理(从零新建、从k8s集群中安装) chart 的。
- Tiller 服务器:处理 helm 客户端的请求,负责管理(构建、升级、卸载) release 的
3. 如何部署 Helm?
具体查看:https://helm.sh/zh/docs/intro/install/
在安装有 kubectl 命令的节点上(我这里选 Master)
第一种方法:一条命令搞定
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
第二种方法:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
第三种方法:
去 https://github.com/helm/helm/releases ,根据自身平台下载安装包
这里以 Linux amd64 为例
wget https://get.helm.sh/helm-v3.5.4-linux-arm64.tar.gz
tar -zxvf helm-v3.5.4-linux-amd64.tar
mv linux-amd64/helm /usr/local/bin/helm
安装完成后,执行 helm version
检测是否安装成功。
helm 有很多子命令和参数,为了提高使用命令行的效率,通常建议安装 helm 的 bash 命令补全脚本,方法如下:
helm completion bash > .helmrc
echo "source .helmrc" >> .bashrc
接下来安装 helm 的 Tiller 服务器?
我安装的是 v3.5.3 的 helm,安装方法与之前 v2 的版本不一样
点进去一看,才发现 v3 的 helm 移除了 Tiller,所以也不用再安装它了。
4. 使用 helm ?
添加镜像仓库(注意不要用网上很多人推荐阿里源,已经很久没有更新了)
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
再查看仓库列表
helm repo list
查看源里可安装的包(chart)
helm search repo stable
安装一个包
helm install stable/mysql --generate-name
查询已经安装的 chart(应该叫release)
helm list