1 前言 Helm是優秀的基於Kubernetes的包管理器。利用Helm,可以快速安裝常用的Kubernetes應用,可以針對同一個應用快速部署多套環境,還可以實現運維人員與開發人員的職責分離。現在讓我們安裝並體現一下,如何通過Helm安裝MongoDB吧。 Kubernetes環境搭建可參考:M ...
1 前言
Helm
是優秀的基於Kubernetes
的包管理器。利用Helm
,可以快速安裝常用的Kubernetes
應用,可以針對同一個應用快速部署多套環境,還可以實現運維人員與開發人員的職責分離。現在讓我們安裝並體現一下,如何通過Helm
安裝MongoDB
吧。
Kubernetes
環境搭建可參考:Mac上使用Docker Desktop啟動Kubernetes,踩坑後終於搞掂
2 Helm相關概念
包管理是一種復用理念,Helm
與Kubernetes
的關係,就像是yum
與CentOS
,pip
於python
,npm
於JavaScript
。Helm
的作用有以下幾點:
- 快速安裝常用應用:許多大公司都有
helm
倉庫,為我們提供了許多優秀的應用,可以直接拉取安裝,如快速部署Redis
集群、安裝Jenkins
等。 - 多環境部署:通常我們需要多套環境,如開發環境、測試環境、生產環境等,
helm
可以通過模板+變數
的形式實現快速部署; - 運維與開發隔離:運維人員管理
k8s
資源,寫部署模板及預設配置;開發人員只需要提供少量配置即可,把精力專註在業務開發上。
在使用helm
之前,以下概念應該要搞懂:
helm
客戶端:安裝在能連上kubernetes
集群的機器都行,用於安裝、卸載應用等。tiller
:這是helm
的服務端,部署在kubernetes
集群中。客戶端發請求給Tiller
,Tiller
再提交給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/releases
下載解壓後,添加環境變數到.bash_profile
即可。
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 倉庫管理
列出已經配置的倉庫(我配置了阿裡和微軟的庫):
$ helm repo ls
NAME URL
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
azure http://mirror.azure.cn/kubernetes/charts
新增倉庫:
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
刪除倉庫:
$ 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
其中release101
是Release
的名字,可按自己需求指定。查看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.yaml
為values-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獲取更多精彩文章!
歡迎關註微信公眾號<南瓜慢說>,將持續為你更新...
多讀書,多分享;多寫作,多整理。
歡迎大家關註、轉發、在看、點贊一波四連。