在我们学习 kubernetes 的过程中,用的最多的是 kubectl 命令行工具,使用 kubectl 工具需要我们编写好各种部署文件,这在生产中是非常不方便的,因此 Helm 这个 kubernetes 包管理工具就应运而生了。
Helm 包管理工具不仅可以为我们安装网上已经成熟的部署库文件,而且可以生产本地部署模板,我们只需要简单改一改,就可以完成一个应用的部署,不需要我们记住那么多的命令和配置。下面我们就看一下 Helm 的使用。
Helm V2/V3 的对比
组件架构对比:
- Helm2:由2个二进制组成:helm(客户端cli)、tiller(服务端)
- Helm3:只有1个二进制组成:helm、移除了tiller
工作原理对比:
- Helm2:helm->tiller->k8s。首先由helm和tiller交互,然后由tiller负责和k8s交互来完成操作。
- Helm3:helm->k8s。由helm命令去调用/root/.kube/config获取k8s权限,然后直接与apiserver交互操作。
Helm 安装的 Chart 的元信息记录到k8s的secret里面,secret名字叫sh.helm.release.v1.${NAME}.v1,另外还有一个serviceaccount,名字叫${NAME}-${CHART名}。helm list命令读取secret才知道安装了哪些包。
Helm 主要模块
- chart:包含应用程序所需要的所有 k8s 资源定义。
- repository:存放chart的仓库,类似于docker的镜像仓库。
- release:chart的实例化,将chart安装到k8s上,就叫做生成一个release。
安装 Helm
因为 helm3 只有一个二进制文件,因此安装非常简单
# 二进制下载地址页面: https://github.com/helm/helm/releaseswget https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gztar zxf helm-v3.4.1-linux-amd64.tar.gzcp linux-amd64/helm /usr/local/bin/helm
source
添加仓库
命令自动补全,在 /etc/profile 里面增加如下内容:
helm 和 docker 一样有默认的官方仓库,也可以添加第三方仓库和本地仓库
helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo add stable https://mirror.azure.cn/kubernetes/chartshelm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo list
更新仓库缓存(helm repo add的时候会获取一次chart列表并缓存,接下来的helm search都是读取本地缓存列表,因此我们需要经常更新缓存)
查看添加了哪些仓库
helm repo update
移除仓库
helm repo remove $仓库名
安装应用
以安装 nginx 为例
# 从官方hub搜索helm search hub nginx# 从所有添加的第三方仓库中搜索,支持模糊匹配helm search repo nginx# 搜索指定仓库的应用(并没有原生支持,是因为格式都是"仓库名/chart名",所以可以通过"仓库名/"来匹配)helm search repo bitnami/ | grep nginx
我们安装bitnami仓库的nginx,并指定release名字为myweb
helm install myweb bitnami/nginx
![ea7a684bbd664de368c80d441051c233.png](https://i-blog.csdnimg.cn/blog_migrate/d66cfb9e00cda972b25b308059333d65.jpeg)
如果要指定命名空间,则加上-n参数
helm install myweb bitnami/nginx -n kube-system
查看安装了哪些库
helm list --all-namespaces
![6e47488dea25c835ccc4d1273e4da89f.png](https://i-blog.csdnimg.cn/blog_migrate/b26c47ed85a832340b06f4df6827f7fc.jpeg)
自定义参数
helm支持两种自定义参数的方式
- values.yaml文件
- 命令行参数--set
如果两种同时使用的话,--set的优先级要高于values.yaml,我们可以通过以下命令来查看一个chart支持哪些配置参数
helm show values 仓库名/应用名helm show values bitnami/nginx
- 使用values.yaml自定义参数来安装
cat > values.yaml <
- 使用--set自定义参数来安装
# 多个参数用英文逗号,隔开helm install --set 'resources.limits.cpu=500m,resources.limits.memory=256Mi,resources.requests.cpu=500m,resources.requests.memory=256Mi' myweb2 bitnami/nginx
查看我们在某个chart中自定义了哪些参数
helm get values myweb
升级应用
假设要扩容cpu、memory,则修改values.yaml内容,改为
resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 1000m memory: 512Mi
升级命令
helm upgrade -f values.yaml myweb bitnami/nginx
应用回滚
回滚前先查看历史版本
helm history myweb
![6db0e27f4820cb6f66d74c59b89685ae.png](https://i-blog.csdnimg.cn/blog_migrate/4ff61d1b2efb02da6cac768b52b0a736.jpeg)
获得REVISION号后就可以进行回滚操作
helm rollback myweb 2
卸载应用
卸载并保留历史记录,加上--keep-history(不影响卸载应用,但会保留记录)
helm uninstall myweb1 --keep-history
查看卸载过哪些应用(只有保留记录的才能看到)
helm list --uninstalled --all-namespaces
Chart 目录结构
如果我们不能联网,那么也可以通过helm创建一个本地chart
helm create foo
foo目录结构如下:
├── .helmignore # 编译包的时候忽略哪些文件├── Cha