在没有使用 helm 之前,在 kubernetes 部署应用,需要依次部署 deployment、SVC 等步骤较为繁琐。
况且,随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包得方式,支持发布得版本管理和控制,很大程度上简化了 kubernetes 应用得部署以及管理。
Helm 本质就是让 K8S 得应用管理可方便配置,能动态生成。通过动态生成 K8S 资源清单文件。然后带哦用 kubectl 自动执行 K8S 资源部署
Helm 是官方提供的类似于 YUM 得包管理工具,是部署环境的流程封装。
Helm 有两个重要得概念:chart 和 release
helm 包含两个组件:helm客户端 和 Tiller 服务端,如下图所示
helm 由客户端 helm 命令行工具和服务端 tiller 组成, helm 的安装十分简单。下载 helm 命令行工具到 master 节点 node1的 /usr/local/bin 下。
1、源码安装
https://github.com/helm/helm/releases/tag/v3.2.4 官网3.2.4版本下载地址
[root@K8s-master ~]# tar -zxvf helm-v3.2.4-linux-amd64.tar.gz
[root@k8s-master src]# mv linux-amd64/helm /usr/local/bin
[root@k8s-master src]# helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
2、脚本安装
[root@k8s-master ~]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
[root@k8s-master ~]# chmod 700 get_helm.sh
[root@k8s-master ~]# ./get_helm.sh
准备好 helm 后,需要添加 helm 源数据仓库。有以下几个常见的源库
添加 chart 库
helm repo add
自定义名称 chart库的地址
[root@k8s-master ~]# helm repo add stable https://kubernetes-charts.storage.googleapis.com
[root@k8s-master ~]# helm repo add aliyuncs https://apphub.aliyuncs.com
查看当前集群有哪些 chart 库
helm repo list
[root@k8s-master ~]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
aliyuncs https://apphub.aliyuncs.com
查看某个 chart 库当中有哪些可安装程序
helm search repo chart库名
[root@k8s-master ~]# helm search repo aliyuncs
NAME CHART VERSION APP VERSION DESCRIPTION
aliyuncs/admin-mongo 0.1.0 1 MongoDB管理工具(web gui)
aliyuncs/aerospike 0.3.2 v4.5.0.5 A Helm chart for Aerospike in Kubernetes
https://hub.helm.sh/ 里面包含了所有的 chart 资源
docker search repo 程序名
例:helm search repo nginx 查找 nginx 程序都有哪些版本的应用
[root@k8s-master ~]# helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
aliyuncs/nginx 5.1.5 1.16.1 Chart for the nginx server
aliyuncs/nginx-ingress 1.30.3 0.28.0 An nginx Ingress controller that uses ConfigMap...
aliyuncs/nginx-ingress-controller 5.3.4 0.29.0 Chart for the nginx Ingress controller
aliyuncs/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
aliyuncs/nginx-php 1.0.0 nginx-1.10.3_php-7.0 Chart for the nginx php server
stable/nginx-ingress 1.40.1 0.32.0 An nginx Ingress controller that uses ConfigMap...
stable/nginx-ldapauth-proxy 0.1.4 1.13.5 nginx proxy with ldapauth
stable/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
stable/gcloud-endpoints 0.1.2 1 DEPRECATED Develop, deploy, protect and monitor...
要安装新软件包,请使用helm install
命令。
它包含两个参数:您选择的 发行版名称 要安装的 chart 的名称
查看都有哪些软件可用:helm search repo nginx
安装aliyun 的nginx :helm install nginx nginx/aliyuncs
[root@k8s-master ~]# helm install nginx aliyuncs/nginx
NAME: nginx
LAST DEPLOYED: Thu Jun 25 17:29:46 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w nginx'
export SERVICE_IP=$(kubectl get svc --namespace default nginx --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
查看访问的 SVC 映射端口:kubectl get svc --namespace default -w nginx
[root@k8s-master ~]# kubectl get svc --namespace default nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.99.153.167 <pending> 80:30367/TCP,443:32022/TCP 3m
访问该 nginx 的 web 页面:curl -I 192.168.168.11:30367
要跟踪发布的状态或重新读取配置信息,可以使用 helm status +应用名
[root@k8s-master ~]# helm status nginx
NAME: nginx
LAST DEPLOYED: Thu Jun 25 17:29:46 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w nginx'
export SERVICE_IP=$(kubectl get svc --namespace default nginx --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
helm list
查看集群中有哪些 helm 应用
helm uninstall +应用名
卸载应用
“{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}”)
echo “NGINX URL: http://$SERVICE_IP/”