Helm架构
图片来自IBM Developer Blog。
部署Helm
本文只展示二进制方式安装,其他方式可查看官方文档。
下载安装包
K8S Master1节点上
[root@K8S-PROD-M1 workspace]# wget https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gz
解压安装包
[root@K8S-PROD-M1 workspace]# tar -zxvf helm-v3.4.1-linux-amd64.tar.gz
[root@K8S-PROD-M1 workspace]# mv linux-amd64/helm /usr/local/bin/helm
与K8S 交互
采用与执行kubectl命令时的与K8S集群进行交互的配置文件:/root/.kube/config。
Chart仓库操作
常用仓库:
-
gitlab:https://charts.gitlab.io
-
harbor:https://helm.goharbor.io
-
elastic:https://helm.elastic.com
- 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
仓库操作:
添加仓库
[root@K8S-PROD-M1 ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@K8S-PROD-M1 ~]# helm repo add brigade https://brigadecore.github.io/charts
[root@K8S-PROD-M1 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
[root@K8S-PROD-M1 ~]# helm repo add harbor https://helm.goharbor.io
更新苍鹭
[root@K8S-PROD-M1 ~]# helm repo update
搜索仓库
[root@K8S-PROD-M1 ~]# helm repo list
[root@K8S-PROD-M1 ~]# helm search repo stable
[root@K8S-PROD-M1 ~]# helm search repo brigade
删除仓库
[root@K8S-PROD-M1 ~]# helm repo remove aliyun
可搜索全部可用chart
[root@K8S-PROD-M1 ~]# helm search hub
[root@K8S-PROD-M1 ~]# helm search hub wordpress
其他命令
- 查看配置
heml env
- 查看帮助
helm help
常用选项
- 模拟安装
--dry-run
- 生成release名称
-g, --generate-name
- 跳过命令行的运行钩子
--no-hooks
测试Helm
安装应用
查找确认存在
[root@K8S-PROD-M1 ~]# helm search repo nginx
安装repo期间,helm客户端将显示有关创建了哪些资源,发布状态是什么以及是否可以或应该执行其他配置步骤的有用信息。
由于许多chart需要较大的镜像,需要一定时间才能正确部署至集群,Helm不会等到所有资源都在运行后才退出。
默认安装的namespace是:default, 也可通過-n明確指定。
以repo中chart安装
[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami/nginx
以压缩包中chart安装
[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami.nginx.tgz
以解压后的目录安装
[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami/nginx/
指定变量
[root@K8S-PROD-M1 ~]# helm install --set name=prod my-nginx bitnami/nginx/
指定变量的值为string类型
[root@K8S-PROD-M1 ~]# helm install --set-string long_int=123 my-nginx bitnami/nginx/
指定引用的文件地址
[root@K8S-PROD-M1 ~]# helm install --set-file my_script=dothings.sh my-nginx bitnami/nginx/
同时指定多个变量
[root@K8S-PROD-M1 ~]# helm install --set foo=bar --set bar=foo my-nginx bitnami/nginx/
查看已安装的release
[root@K8S-PROD-M1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2020-11-30 15:29:44.362452632 +0800 CST deployed nginx-8.2.0 1.19.5
状态查看
[root@K8S-PROD-M1 ~]# helm status my-nginx
NAME: my-nginx
LAST DEPLOYED: Mon Nov 30 15:29:44 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
...
查看安装历史
[root@K8S-PROD-M1 ~]# helm history my-nginx
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Nov 30 15:29:44 2020 deployed nginx-8.2.0 1.19.5 Install complete
回滚指定历史版本
[root@K8S-PROD-M1 ~]# helm rollback my-nginx 1
Helm3中,删除release也会删除发布记录。如果希望保留删除发布记录,可使用helm uninstall --keep-history。
使用helm list --uninstalled将仅显示带有--keep-history标志卸载的发行版。
卸载release
[root@K8S-PROD-M1 ~]# helm uninstall my-nginx
查看所有Release
[root@K8S-PROD-M1 ~]# helm list --all
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2020-11-30 15:29:44.362452632 +0800 CST uninstalled nginx-8.2.0 1.19.5
卸载应用,不保留安装记录
[root@K8S-PROD-M1 ~]# helm delete my-nginx
release "my-nginx" uninstalled
自定义参数安装应用
Helm 中支持使用自定义yaml文件和 --set命令参数对要安装的应用进行参数配置,首先查看可配置参数:
查看可配置参数
[root@K8S-PROD-M1 ~]# helm show values bitnami/nginx
使用自定义values.yaml文件安装应用
创建自定义配置文件: values.yaml
[root@K8S-PROD-M1 nginx]# cat > values.yaml << EOF
image:
registry: docker.io
repository: bitnami/nginx
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 1000m
memory: 512Mi
EOF
使用自定义配置文件运行应用
helm install -f values.yaml bitnami/nginx
使用--set配置参数进行安装应用
--set参数是在使用helm命令时候添加的参数,可以在执行helm安装与更新应用时使用,多个参数间用”,“隔开。
如果配置文件和--set同时使用,则--set设置的参数会覆盖配置文件中的参数配置。
对于--set配置参数,Helm官方对于不同的配置类型给出了不同的写法,如下:
[root@K8S-PROD-M1 nginx]# helm install --set 'registry.registry=docker.io,registry.repository=bitnami/nginx' bitnami/nginx
升级应用
创建新的配置参数文件values.yaml
[root@K8S-PROD-M1 nginx]# cat > values.yaml << EOF
service.type: NodePort
service.nodePorts.http: 30002
EOF
应用更新
[root@K8S-PROD-M1 nginx]# helm upgrade -f values.yaml my-nginx bitnami/nginx -n default
查看新配置是否生效
[root@K8S-PROD-M1 nginx]# helm get values my-nginx
渲染模板
查看通过指定的参数渲染的Kubernetes部署资源模板:
[root@K8S-PROD-M1 ~]# helm template bitnami/nginx
开发Chart
创建chart
[root@K8S-PROD-M1 ~]# mkdir -p /root/workspace/helm
[root@K8S-PROD-M1 ~]# cd /root/workspace/helm
[root@K8S-PROD-M1 helm]# helm create chart-demo
[root@K8S-PROD-M1 helm]# tree chart-demo/
chart-demo/
├── charts #该目录保存其他依赖的 chart(子 chart)
├── Chart.yaml
├── templates #chart配置模板,用于渲染最终的Kubernetes YAML文件
│ ├── deployment.yaml #Kubernetes deployment 配置
│ ├── _helpers.tpl #用于创建模板时的帮助类
│ ├── hpa.yaml
│ ├── ingress.yaml #Kubernetes ingress配置
│ ├── NOTES.txt #用户运行helm install时候的提示信息
│ ├── serviceaccount.yaml #Kubernetes serviceaccount配置
│ ├── service.yaml #Kubernetes service配置
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 定义chart模板中的自定义配置的默认值,可以在执行helm install或helm update的时候覆盖
3 directories, 10 files
修改Chart
上一步创建的是一个标准的chart目录结构,可以编辑相应配置从而创建自己的chart。
验证创建后是否正常
[root@K8S-PROD-M1 helm]# helm lint chart-demo/
==> Linting chart-demo/
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
将创建的进行打包
[root@K8S-PROD-M1 helm]# helm package chart-demo/
Successfully packaged chart and saved it to: /root/workspace/helm/chart-demo-0.1.0.tgz