用Helm部署Kubernetes應用,支持多環境部署與版本回滾

1 前言

Helm是優秀的基於Kubernetes的包管理器。利用Helm,能夠快速安裝經常使用的Kubernetes應用,能夠針對同一個應用快速部署多套環境,還能夠實現運維人員與開發人員的職責分離。如今讓咱們安裝並體現一下,如何經過Helm安裝MongoDB吧。node

Kubernetes環境搭建可參考:Mac上使用Docker Desktop啓動Kubernetes,踩坑後終於搞掂python

2 Helm相關概念

包管理是一種複用理念,HelmKubernetes的關係,就像是yumCentOSpippythonnpmJavaScriptHelm的做用有如下幾點:git

  • 快速安裝經常使用應用:許多大公司都有helm倉庫,爲咱們提供了許多優秀的應用,能夠直接拉取安裝,如快速部署Redis集羣、安裝Jenkins等。
  • 多環境部署:一般咱們須要多套環境,如開發環境、測試環境、生產環境等,helm能夠經過模板+變量的形式實現快速部署;
  • 運維與開發隔離:運維人員管理k8s資源,寫部署模板及默認配置;開發人員只須要提供少許配置便可,把精力專一在業務開發上。

在使用helm以前,如下概念應該要搞懂:github

  • helm客戶端:安裝在能連上kubernetes集羣的機器都行,用於安裝、卸載應用等。
  • tiller:這是helm的服務端,部署在kubernetes集羣中。客戶端發請求給TillerTiller再提交給kubernetes。在helm3已經再也不須要tiller了,因此建議使用v3版本的helm
  • chart:一個helm的軟件包,採用TAR格式打包,其實就是一堆用來定義kubernetes資源的YAML文件的集合。
  • Repository:倉庫,存放Chart的地方,helm能夠同時管理多個Repository,很是方便。
  • Release:使用helm部署在kubernetes的應用集叫Release,它是以label的方式來標記的。

3 安裝並使用

3.1 安裝helm

這裏安裝helm v3,緣由已經講過,這樣能夠省去安裝tiller。經過直接從GitHub下載安裝的方式,地址爲:https://github.com/helm/helm/releasesmongodb

下載解壓後,添加環境變量到.bash_profile便可。docker

export HELM_HOME=/Users/pkslow/Software/helm
export PATH=$PATH:$HELM_HOME

測試一下命令:數據庫

$ helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

3.2 倉庫管理

列出已經配置的倉庫(我配置了阿里和微軟的庫):npm

$ helm repo ls
NAME  	URL                                                   
stable	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
azure 	http://mirror.azure.cn/kubernetes/charts

新增倉庫:json

$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

刪除倉庫:bash

$ helm repo remove bitnami
"bitnami" has been removed from your repositories

更新倉庫包信息到本地:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "azure" chart repository
Update Complete. ⎈ Happy Helming!⎈

3.3 安裝MongoDB

查看有什麼MongoDB相關的包:

$ helm search repo mongo
NAME                             	CHART VERSION	APP VERSION	DESCRIPTION                                       
azure/mongodb                    	7.8.10       	4.2.4      	DEPRECATED NoSQL document-oriented database tha...
azure/mongodb-replicaset         	3.16.1       	3.6        	NoSQL document-oriented database that stores JS...
azure/prometheus-mongodb-exporter	2.5.0        	v0.10.0    	A Prometheus exporter for MongoDB metrics         
stable/mongodb                   	0.4.27       	3.7.1      	NoSQL document-oriented database that stores JS...
stable/mongodb-replicaset        	2.3.1        	3.6        	NoSQL document-oriented database that stores JS...
azure/unifi                      	0.10.0       	5.12.35    	Ubiquiti Network's Unifi Controller

指定Chart安裝MongoDB

$ helm install release101 azure/mongodb

其中release101Release的名字,可按本身需求指定。查看Release狀態:

$ helm ls
$ helm status release101

查看Dashboard以下,已經安裝成功:

3.4 卸載重裝

默認它的Service類型是ClusterIP,只能供kubernetes使用,咱們將它刪除:

$ helm delete release101
release "release101" uninstalled

從倉庫下載Chart到本地:

$ helm fetch azure/mongodb

解壓Chart的壓縮文件:

$ tar zxvf ./mongodb-7.8.10.tgz

目錄結構以下:

  • Chart.yaml文件:用於描述Chart的基本信息,如名稱、版本等;

  • templates目錄:部署文件模板目錄;

  • values.yaml文件:默認配置文件。

咱們修改一下values.yaml文件,再從新安裝:

修改Service類型爲NodePort,並配置端口:

service:
  annotations: {}
  type: NodePort
  port: 27017
  nodePort: 30018

指定目錄安裝:

$ helm install pkslow1 ./mongodb

安裝完成後,會提示如何獲取MongoDB的用戶名和密碼,其中用戶名爲root,鑑權庫爲admin,密碼經過如下命令獲取(會提供命令):

$ kubectl get secret --namespace default pkslow1-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode

獲取以後,就能夠經過Robo3T鏈接數據庫了:

4 玩點新花樣

4.1 更新變量

複製values.yamlvalues-pkslow.yaml,修改一下端口爲30028,執行如下命令:

$ helm upgrade pkslow1 ./mongodb --values ./mongodb/values-pkslow.yaml

只是更新了端口,用戶名和密碼沒有變,改了一下端口即可以鏈接。

查看定義了哪些變量:

$ helm get values pkslow1

4.2 部署一個新環境

一樣準備一份yaml文件:values-pkslow-uat.yaml,修改想要的參數後,執行如下命令:

$ helm install pkslow-uat ./mongodb --values ./mongodb/values-pkslow-uat.yaml

查看列表:

$ helm ls
NAME      	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART         	APP VERSION
pkslow-uat	default  	1       	2020-07-09 16:57:32.971523 +0800 CST	deployed	mongodb-7.8.10	4.2.4      
pkslow1   	default  	2       	2020-07-09 16:45:41.217333 +0800 CST	deployed	mongodb-7.8.10	4.2.4

這樣就有兩個環境了,其它一個環境還有兩個版本,能夠回滾。

4.3 版本回滾

查看歷史版本:

$ helm history pkslow1
REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
2       	Thu Jul  9 16:45:41 2020	deployed  	mongodb-7.8.10	4.2.4      	Upgrade complete

回滾到版本1

$ helm rollback pkslow1 1
Rollback was a success! Happy Helming!

再查看一下版本:

$ helm history pkslow1
REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
2       	Thu Jul  9 16:45:41 2020	superseded	mongodb-7.8.10	4.2.4      	Upgrade complete
3       	Thu Jul  9 17:06:49 2020	deployed  	mongodb-7.8.10	4.2.4      	Rollback to 1

5 總結

一句話,helm就是一個方便部署的工具,沒有它同樣能夠,有它就會更方便,真香!


歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!

歡迎關注微信公衆號<南瓜慢說>,將持續爲你更新...

多讀書,多分享;多寫做,多整理。

歡迎你們關注、轉發、在看、點贊一波四連。

相關文章
相關標籤/搜索