k8s原生微服務管理工具helm-v3使用

一、Helm-v3應用包管理器
1.1、 爲什麼需要Helm?
K8S上的應用對象,都是由特定的資源描述組成,包括deployment、service等。都保存各自文件中或者集中寫到一個配置文件。然後kubectl apply –f 部署。

1.2、爲什麼使用helm?
在k8s中,當我們去部署應用的時候,一般都是使用yaml文件去管理我們的應用的發佈,比如像微服務,其中包括deployment,service,configmap,ingress,但是如果我們有上百個微服務的話,每次的修改涉及也都會比較多,感覺就是不太靈活了,再去管理可能就覺得力不從心了,這只是一個問題,其實k8s缺少一個更高級的應用級別的管理,如果我們將這些yaml文件放在一個地方,基於一個應用層面的管理,那可能會更好了。

1.3、使用這些yaml文件面臨着一個什麼樣的問題?
且由於缺少對發佈過的應用版本管理和控制,使Kubernetes上的應用維護和更新等面臨諸多的挑戰,主要面臨以下問題:
如何將這些服務作爲一個整體管理,其實我們每次部署也針對這些yaml,然後apply 一下,然後也缺乏了怎麼統一的管理
這些資源文件如何高效複用,其實我們在部署的時候,模版的很多的類型都是一樣的,我們怎麼去使用一套模版來發布多個應用呢,發佈的時候只需要簡單修改一下
不支持應用級別的版本管理,那麼這裏有很多的yaml,怎麼可能可以去管理應用級別的呢,爲了解決這個問題,helm也就應運而生了。
1.4、 Helm 介紹
Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前打包好的yaml文件部署到kubernetes上。
比如像yum ,它主要解決一個依賴的問題,安裝yum的可能會有很多的yum去執行,這個helm就相當於一個yum的包管理器,它將直接按應用去安裝,這個helm也一樣。

1.5、Helm有三個重要概念:
helm:一個命令行客戶端工具,主要用於Kubernetes應用chart的創建、打包、發佈和管理。
Chart:應用描述,一系列用於描述 k8s 資源相關文件的集合。
Release:基於Chart的部署實體,一個 chart 被 Helm 運行後將會生成對應的一個 release;將在k8s中創建出真實運行的資源對象。

1.6、Helm v3 變化
2019年11月13日, Helm團隊發佈 Helm v3的第一個穩定版本。
該版本主要變化如下:
1.6.1、 架構變化
最明顯的變化是,簡單了很多,第一個變化就是,也是最明顯的,它把tiller之前作爲一個pod集羣中部署的它作爲一個服務端存在的,它主要接收helm客戶端發來的請求,發給API裏面,然後api去轉發,tiller還得需要單獨部署,並且還要授權,它能操作集羣的哪些命名空間,擁有哪些權限給刪除了。

kubeconfig連接集羣的配置文件直接連接apiserver,之前呢是直接連接的API,由它做一個轉發,現在呢直接使用kubeconfig,kubectl都是使用kubeconfig來連接集羣的,所以helm直接連接kubeconfig,再連接apiserver,然後部署chart的包,那簡化了很多,然後v2版本部署一個Helm,還需要tiller還能正常的工作,現在v3版本就不需要了,只需要下載一個helm的客戶端工具就可以了,首先這個部署已經簡化了很多,是更合理的,之前的權限管理也是很麻煩的,也是需要tiller去做權限管理,所以這個授權也是比較麻煩,感覺加這個tiller也是多餘的東西,也是當時設計的原因,附加了這麼一個tiller,這個也是一個可有可無的東西,有了kubeconfig,就可以直接通過原生的kubeconfig去完成了,所以也沒必要搞一個組件單獨去做這件事,比如授權,連接API,有一部分可以再helm的客戶端去實現了,那這麼一來的話用helm就很簡單了,這也就是社區一個認識的轉變,真正的讓helm作爲一個好用的工具存在。
在這裏插入圖片描述
1.6.2、Release名稱可以在不同命名空間重用,之前這個都是tiller去維護的,比如部署一個web產生一個發行版,這個發行版這個名稱,不能跨命名空間去使用,只能用一個名字,比如default使用了一個web的名稱,在kube-system的命名空間下就不能用,主要是全局管理,在一個命名空間下存儲這個信息的,所以說是每個命名空間下維護的信息,這個命名空間裏面不要重複。
1.6.3、支持將 Chart 推送至 Docker 鏡像倉庫中 ,也就是chart可以推送到harbor倉庫上了,之前是有專門的存儲工具,也就是這個支持,可以只用一個倉庫來存儲多個類型,比如通過harbor放我們的鏡像還能存放我們的chart的包管理工具
1.6.4、使用JSONSchema驗證chart values ,主要去驗證你使用values這個格式的變量的文件
1.6.5、其他
1)爲了更好地協調其他包管理者的措辭 Helm CLI個別更名
helm delete更名爲helm uninstall
helm inspect更名爲helm show
helm fetch更名爲helm pull
但以上舊的命令當前仍能使用。
2)移除了用於本地臨時搭建 Chart Repository的 helm serve 命令。
3)自動創建名稱空間
在不存在的命名空間中創建發行版時,Helm 2創建了命名空間。Helm 3遵循其他Kubernetes對象的行爲,如果命名空間不存在則返回錯誤。
4) 不再需要requirements.yaml, 依賴關係是直接在chart.yaml中定義。
基本上就是v3版本的helm就是代碼基本上算是重構了
二、Helm部署
2.1、部署Helm客戶端

Helm客戶端下載地址:https://github.com/helm/helm/releases
解壓移動到/usr/bin/目錄即可。
wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
tar zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/

2.2、Helm常用命令
在這裏插入圖片描述
2.3、配置國內Chart倉庫
準備好客戶端工具之後,就要配置一下這個Chart的倉庫,chart就是一個應用的包
微軟倉庫(http://mirror.azure.cn/kubernetes/charts/)這個倉庫推薦使用,基本上官網有的chart這裏都有。
阿里雲倉庫(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方倉庫(https://hub.kubeapps.com/charts/incubator)官方chart倉庫,國內有點不好使。
2.3.1、添加存儲庫:

helm repo add azure http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
helm repo update   #更新

2.3.2、查看配置的存儲庫:
這裏也可以添加多個倉庫,比如阿里雲,微軟的,都可以通過search會幫你列出來你倉庫所有的

[root@k8s-master1 ~]# helm repo list
NAME    URL                                     
stable  http://mirror.azure.cn/kubernetes/charts

2.3.3、刪除存儲庫:

helm repo remove aliyun

三、Helm基本使用
3.1、主要介紹三個命令:

chart install        安裝
chart update         升級
chart rollback       回滾

四、構建一個Helm Chart

[root@k8s-master1 helm]# helm create mychart
Creating mychart
[root@k8s-master1 helm]# ls
mychat
[root@k8s-master1 helm]# cd mychart/
[root@k8s-master1 mychart]# ls
charts  Chart.yaml  templates  values.yaml

4.1、修改templates下的deployment.yaml爲以下內容

[root@k8s-node1 templates]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ .Values.name }}
  name: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
      - image: {{ .Values.image }}:{{ .Values.Tag }}
        name: {{ .Values.name }}

4.2、修改templates下的service.yaml爲以下內容

[root@k8s-node1 templates]# cat service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: {{ .Values.name }}
  name: {{ .Values.name }}
spec:
  ports:
  - port: {{ .Values.targetPort }}             
    protocol: TCP
    targetPort: {{ .Values.targetPort }}
  selector:
    app: {{ .Values.name }}
  type: NodePort

4.3、修改mychart下的values.yaml爲以下內容

[root@k8s-node1 mychart]# cat values.yaml 
name: web
image: liujixiao/java-demo
Tag: latest
replicas: 1

targetPort: 8080

4.4、查看渲染之後的效果

[root@k8s-node1 helm]# helm install --dry-run web1 mychart/
NAME: web1
LAST DEPLOYED: Wed Apr  1 16:27:36 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web1
  name: web1
spec:
  ports:
  - port: 8080             
    protocol: TCP
    targetPort: 8080
  selector:
    app: web1
  type: NodePort
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web1
  name: web1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web1
  template:
    metadata:
      labels:
        app: web1
    spec:
      containers:
      - image: liujixiao/java-demo:latest
        name: web1

4.5、應用mychart

[root@k8s-node1 helm]# helm install  web mychart/

4.6、升級

進入vim /app/helm/mychart/values.yaml 文件將鏡像的tag修改即可
[root@k8s-node1 helm]# helm  upgrade web mychart
Release "web" has been upgraded. Happy Helming!
NAME: web
LAST DEPLOYED: Tue Dec 21 12:47:55 2018
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

4.7、回滾

[root@k8s-node1 helm]# helm  rollback  web
Rollback was a success! Happy Helming!

4.8、查看歷史版本

[root@k8s-node1 helm]# helm  history web
REVISION	UPDATED                 	STATUS    	CHART        	APP VERSION    DESCRIPTION     
1       	Wed Apr  1 15:18:40 2020	superseded	mychart-0.1.0	1.16.0         Install complete
2       	Wed Apr  1 16:37:55 2020	deployed  	mychart-0.1.0	1.16.0         Upgrade complete

4.9、刪除

[root@k8s-node1 helm]# helm list     #查看列表
[root@k8s-node1 helm]# helm uninstall web
release "web" uninstalled

五、使用傳參方式部署/更新pod
5.1、部署pod

[root@k8s-node1 helm]# helm install web2 --set image=liujixiao/java-demo mychart/   

5.2、更新副本數

[root@k8s-node1 helm]# helm upgrade web2 --set replicas=3 mychart/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章