官网地址

支持中文界面

https://helm.sh

Helm是什么?

Helm在K8S当中扮演的角色相当于,在centos中的yum,可以很好的把yaml文件进行打包部署到K8S集群当中。

Helm优势

如果使用之前的方式部署,少量的应用,比较适合,管理起来不是那么费事儿,但是如果部署微服务项目,可能有几十上百的yaml文件,那么后期管理升级就太费劲了,Helm很好解决了这个问题。

Helm的三个概念

  • Helm:就是一个客户端的命令行工具,可以理解为kubectl。
  • tiller:部署在K8S集群当中,用于接收Helm发来的请求(在V3版本以后已经移除)
  • chart:将yaml文件集合,使用chart进行管理。
  • relese:基于chart的部署实体,一个chart被hemk运行以后都会生成一个relese在K8S集群中运行。

整体可以理解为helm=kubectl,chart=yaml文件集合,relese=pod,初学者可以先行这样理解有个概念,后续在针对性理解。

版本架构变化

图片为“B站尚硅谷”出品

在这里插入图片描述
在这里插入图片描述

安装helmV3

链接:https://pan.baidu.com/s/1iBO6zi8yeuADZvM88ZR0tA 提取码:46m6
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

 tar xvf helm-v3.0.0-linux-amd64.tar.gz 
 cp linux-amd64/helm /usr/local/bin/
 helm version
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}

在V3版本中,这样就可以使用了,但是在V2版本中,需要授权,还需要安装tiller,具体V2安装可以查看其他文档,我没写嘿嘿嘿!

添加chart仓库地址

因为官方仓库地址在国外,你懂的。

#微软
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#阿里
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add  aliyuncs https://apphub.aliyuncs.com
#查看是否添加成功
helm repo list
#NAME  	URL                                                   
#stable	http://mirror.azure.cn/kubernetes/charts              
#aliyun	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#更新源
helm repo update

感觉像不像配置yum仓库??哈哈哈哈
至此,helm就已经部署完毕了,接下来演示helm使用。

快速部署

列出当前所有能使用的chart——类似于docker search

helm search repo nginx
NAME                             	CHART VERSION	APP VERSION         	DESCRIPTION                                       
aliyun/nginx-ingress             	0.9.5        	0.10.2              	An nginx Ingress controller that uses ConfigMap...
aliyun/nginx-lego                	0.3.1        	                    	Chart for nginx-ingress-controller and kube-lego  
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.41.3       	v0.34.1             	DEPRECATED! An nginx Ingress controller that us...
stable/nginx-ldapauth-proxy      	0.1.6        	1.13.5              	DEPRECATED - nginx proxy with ldapauth            
stable/nginx-lego                	0.3.1        	                    	Chart for nginx-ingress-controller and kube-lego  
aliyun/gcloud-endpoints          	0.1.0        	                    	Develop, deploy, protect and monitor your APIs ...
stable/gcloud-endpoints          	0.1.2        	1                   	DEPRECATED Develop, deploy, protect and monitor..

安装——神似yum -y install哈哈哈

格式:helm install 新名字 charit

helm install nginx aliyuncs/nginx

#查看
helm list
NAME 	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART      	APP VERSION
nginx	default  	1       	2021-06-10 02:35:21.579608615 -0400 EDT	deployed	nginx-5.1.5	1.16.1 

#查看详细信息
helm status nginx
NAME: nginx
LAST DEPLOYED: Thu Jun 10 02:35:21 2021
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/"

pod已经运行了

kubectl get pod
NAME                                READY   STATUS      RESTARTS   AGE
nginx-7f5bc7bbf-wjbsc               1/1     Running     0          3m32s

svc

kubectl get svc
NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
kubernetes         ClusterIP   10.1.0.1       <none>        443/TCP                      11d
nginx              LoadBalancer    10.1.175.118   <none>        80:30360/TCP,443:32118/TCP   17m

测试可用性

访问IP为pod运行在哪个node上的IP,这是因为没有ingress。

curl -I 192.168.100.140:30360
HTTP/1.1 200 OK
Server: nginx/1.16.1

卸载

helm uninstall nginx

自主部署

快速部署是不是很像yum安装?什么依赖包都给你整理好了直接下载使用,自主部署相当于源码包安装,依赖需要自己解决。

创建chart模板

会生成几个模板

helm create web1
ls web1/
charts  Chart.yaml  templates  values.yaml

模板讲解

  • charts:没啥鸡毛太大用,存放子chart的地方。 chart.yaml:chart的一些默认值
  • Chart.yaml:chart的默认值。
  • templates:yaml文件集合的地方。
  • values.yaml:全局变量,yanl文件当中可以引用,这也就意味着,你在yaml文件中版本信息引用变量,后期升级直接改values.yaml即可。

创建yaml

这里就不再写了,直接生成了,一定要在templates里编辑yaml文件,别问问什么,“王八的屁股——规定”

cd web1/templates/
rm -rf ./*
#deployment.yaml
kubectl create  deployment web1 --image=nginx -o yaml > nginx-deployment.yaml
kubectl create -f nginx-deployment.yaml
 kubectl get pod
web1-74b5695598-v89z6               1/1     Running     0          31s

#svc.yaml
kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort -o yaml > svc.yaml

删除

之前创建只是为了生成svc

kubectl delete -f nginx-deployment.yaml 

生成chart

格式:helm install 名称 目录

helm install nginx web1/
NAME: nginx
LAST DEPLOYED: Thu Jun 10 07:28:11 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

查看chart

helm ls
NAME 	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART     	APP VERSION
nginx	default  	1       	2021-06-10 07:28:11.586300723 -0400 EDT	deployed	web1-0.1.0	1.16.0  

测试

curl -I 192.168.100.140:31743
HTTP/1.1 200 OK
Server: nginx/1.21.0
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐