系统环境:
Helm 版本:v3.1.0
Kubernetes 版本:v1.16.3
参考地址:
一、Helm 介绍 Helm 是一款能够帮助你管理 Kubernetes 应用的程序,它可以让你创建自己的应用模板(chart),然后模板来创建配置很多可自定义参数,每次我们只需要设定很少或者不设置参数(使用默认参数)就可以将应用部署到 Kubernetes 中,后期就可以通过 Helm 来进行升级、回滚、删除等等操作的管理。
Helm 的 Charts 类似于应用商店,里面存有很多公司提供不同应用的模板,例如常部署的 Redis、Mysql、Nginx 等等,可以让我们很方便的采用别人的模板,然后进行一定的配置,就能在我们的 Kubernetes 集群中创建对应的应用。
Helm 还经常与 CI\CD 配置使用,在这个过程中用于维护应用程序的安装、升级、回滚等操作。
如上,现在学习如何安装、使用 Helm,已经是学习如何使用 Kubernetes 的重要部分了,下面将记录一下这个安装过程。
二、下载并安装 Helm 客户端 访问 Helm Github 下载页面 https://github.com/helm/helm/releases 找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。
1 2 $ wget https://get.helm.sh/helm-v3.1.0-linux-amd64.tar.gz
接下来解压下载的包,然后将客户端放置到 /usr/local/bin/ 目录下:
1 2 3 4 5 $ tar -zxvf helm-v3.1.0-linux-amd64.tar.gz $ cp linux-amd64/helm /usr/local/bin/
注意:helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上,否则 helm 将不可用。
三、添加 Chart 仓库 在 Helm 3.0 版本中,默认是不会添加 Chart 仓库,所以这里我们需要手动添加,下面是添加一些常用的 Charts 库,命令如下:
1 2 3 4 5 6 $ helm repo add elastic https://helm.elastic.co $ helm repo add gitlab https://charts.gitlab.io $ helm repo add harbor https://helm.goharbor.io $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com $ helm repo add stable https://kubernetes-charts.storage.googleapis.com
增加完仓库后,需要执行更新命令,将仓库中的信息进行同步:
注意:如果有的仓库不能正常解析,请更换 DNS 地址,在测试过程中,发现有的能正常解析,有的不能。如果还不行,就直接将域名和对应的地址写死在 Host 文件中。
四、Helm 的基本操作 安装应用 通过 Helm 在 Repo 中查询可安装的 Redis 包:
1 2 3 4 5 6 $ helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION bitnami/nginx 4.3.13 1.16.1 Chart for the nginx server bitnami/nginx-ingress-controller 5.1.0 0.26.1 Chart for the nginx Ingress controller stable/nginx-ingress 1.25.0 0.26.1 An nginx Ingress controller that uses ConfigMap...
安装测试:
–namespace:指定安装的 Namespace
1 $ helm install nginx bitnami/nginx -n mydlqcloud
查看应用状态
1 $ helm status nginx -n mydlqcloud
卸载应用 卸载应用,并保留安装记录
1 $ helm uninstall nginx -n mydlqcloud --keep-history
查看全部应用(包含安装和卸载的应用)
1 $ helm list -n mydlqcloud --all
卸载应用,不保留安装记录
1 $ helm delete nginx -n mydlqcloud
升级应用 创建新的配置:
1 2 3 4 5 6 $ cat > values.yaml << EOF service.type: NodePort service.nodePorts.http: 30002 EOF
应用更新:
1 $ helm upgrade -f values.yaml nginx bitnami/nginx -n mydlqcloud
查看新配置是否生效:
1 2 3 4 5 $ helm get values nginx -n mydlqcloud USER-SUPPLIED VALUES: service.nodePorts.http: 30002 service.type: NodePort
应用回滚 如果升级过程发生错误,进行回滚,首先查看应用的历史版本:
1 2 3 4 5 $ helm history nginx -n mydlqcloud REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Sat Nov 23 17:40:40 2019 superseded nginx-4.3.13 1.16.1 Install complete 2 Sat Nov 23 17:44:44 2019 deployed nginx-4.3.13 1.16.1 Upgrade complete
知道 REVISION 号后就可以进行回滚操作:
1 2 3 $ helm rollback nginx 1 -n mydlqcloud Rollback was a success! Happy Helming!
渲染模板 如果想查看通过指定的参数渲染的 Kubernetes 部署资源模板,可以通过下面命令:
1 $ helm template bitnami/nginx -n mydlqcloud
可以看到渲染的模板如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 --- apiVersion: v1 kind: Service metadata: name: RELEASE-NAME-nginx labels: app.kubernetes.io/name: nginx helm.sh/chart: nginx-5.1.12 app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - name: http port: 80 targetPort: http selector: app.kubernetes.io/name: nginx app.kubernetes.io/instance: RELEASE-NAME --- apiVersion: apps/v1 kind: Deployment metadata: name: RELEASE-NAME-nginx labels: app.kubernetes.io/name: nginx helm.sh/chart: nginx-5.1.12 app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm spec: selector: matchLabels: app.kubernetes.io/name: nginx app.kubernetes.io/instance: RELEASE-NAME replicas: 1 template: metadata: labels: app.kubernetes.io/name: nginx helm.sh/chart: nginx-5.1.12 app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm spec: containers: - name: nginx image: docker.io/bitnami/nginx:1.16.1-debian-10-r63 imagePullPolicy: "IfNotPresent" ports: - name: http containerPort: 8080
—END—