Kubernetes Helm

  • 什么是 Helm
  • Helm 组件
  • Helm 部署
  • 一、安装 Helm 3.2.4
  • 二、常用 chart 源
  • ①、初始化 chart 源仓库
  • ②、查找想要安装的软件程序
  • ③、安装一个 Helm 应用
  • 例:安装一个 Nginx 应用
  • ④、查看helm 生成应用、卸载应用


什么是 Helm

在没有使用 helm 之前,在 kubernetes 部署应用,需要依次部署 deployment、SVC 等步骤较为繁琐。

况且,随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包得方式,支持发布得版本管理和控制,很大程度上简化了 kubernetes 应用得部署以及管理。

Helm 本质就是让 K8S 得应用管理可方便配置,能动态生成。通过动态生成 K8S 资源清单文件。然后带哦用 kubectl 自动执行 K8S 资源部署

Helm 是官方提供的类似于 YUM 得包管理工具,是部署环境的流程封装。
Helm 有两个重要得概念:chart 和 release

  • chart :是创建一个应用的信息集合,包括各种 kubernetes 对象得配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署得自包含逻辑单元。可以将 chart 想象成 apt\yum 中得软件安装包。
  • release :是 chart 得运行实例,代表了一个正在运行得应用。当 chart 被安装到 kubernetes 集群,就会生成一个 release。chart 能够多次安装到同一个集群,但是只会有一个 release。

Helm 组件

helm 包含两个组件:helm客户端 和 Tiller 服务端,如下图所示

helm install 本地镜像 helm安装部署_php

  1. Helm Client 负责 chart 和 release 得创建和管理, 通过 gRPC 得方式与 Tiller 进行交互。
  2. Tiller 服务端运行在 kubernetes 集群中,它会处理 Helm 得请求,并发送给 KubeAPI。
  3. KubeAPI 将数据、资源得生成写入到 etcd ,被 kubelet 接受并创建。

Helm 部署

一、安装 Helm 3.2.4

helm 由客户端 helm 命令行工具和服务端 tiller 组成, helm 的安装十分简单。下载 helm 命令行工具到 master 节点 node1的 /usr/local/bin 下。

1、源码安装

https://github.com/helm/helm/releases/tag/v3.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
输出阻断日志


二、常用 chart 源

①、初始化 chart 源仓库

准备好 helm 后,需要添加 helm 源数据仓库。有以下几个常见的源库

  1. https://kubernetes-charts.storage.googleapis.com/ helm官网 chart 库,稳定
  2. https://apphub.aliyuncs.com 阿里云chart 库,速度最快

添加 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 库

[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
...


②、查找想要安装的软件程序

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 应用

要安装新软件包,请使用helm install命令。

它包含两个参数:您选择的 发行版名称 要安装的 chart 的名称

例:安装一个 Nginx 应用

查看都有哪些软件可用: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 生成应用、卸载应用

helm list 查看集群中有哪些 helm 应用

helm uninstall +应用名 卸载应用

“{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}”)
echo “NGINX URL: http://$SERVICE_IP/”
``