一、Helm介紹
Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前已經打包好的yaml檔案部署到kubernetes上。
三個基本概念:
- Chart:Chart 代表著 helm 包。它包含在 Kubernetes 叢集內部執行應用程式,工具或服務所需的所有資源定義。
- Repository:是 chart 的儲存庫。例如:https://charts.bitnami.com/bitnami
- Release:Release 是執行在 Kubernetes 叢集中的 chart 的例項。一個 chart 通常可以在同一個叢集中安裝多次。每一次安裝都會建立一個新的 release。以 MySQL chart為例,如果你想在你的叢集中執行兩個資料庫,你可以安裝該chart兩次。每一個資料庫都會擁有它自己的 release 和 release name。
二、安裝Helm
wget https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz
tar -xvf helm-v3.13.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
安裝完後可以使用 helm version
檢視版本
三、配置Helm的repository
# 新增倉庫
helm repo add bitnami https://charts.bitnami.com/bitnami
# 也可以新增國內的一些庫(阿里雲等)
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
新增完成後可以使用 helm list
檢視repo列表:
四、部署chart(以部署redis為例)
1. 搜尋chart
# 查詢redis
helm search repo redis
搜尋出來可以看到有單機的redis或者叢集的redis-cluster,APP VERSION表示redis的版本。
2. 拉取chart
# 拉取redis
helm pull bitnami/redis
拉取下來是一個tgz的壓縮包,需要進行解壓 tar -xvf redis-18.5.0.tgz
,解壓後會得到一個redis目錄,裡面包含了redis的各種配置檔案和啟動檔案。
Chart.yaml # 包含了chart的一些基本資訊
charts # 該目錄儲存其他依賴的 chart
templates # chart 配置模板,用於渲染最終的 Kubernetes YAML 檔案
NOTES.txt # 使用者執行 helm install 時候的提示資訊
values.yaml # 定義 chart 模板中的自定義配置的預設值,可以在執行 helm install 或 helm update 的
3. 修改values.yaml的一些配置(簡單演示一下基本的配置)
- global部分修改redis密碼,如果有動態儲存可以加上你提前建好的storgeClass,保證資料永續性;
-
architecture部分表示這個redis是叢集還是單節點執行,如果叢集改為replication,單節點改為standalone
-
service部分修改redis的服務,包括埠,是否對外訪問,這裡我們不對外,就改為ClusterIP
4. 啟動chart
helm install redis-cluster ./redis/ -n redis
# redis-cluster表示部署的名稱
# ./redis/ 表示chart的本地路徑,這裡為當前目錄下的reids
# -n redis 表示名稱空間,可以提前建立一個redis的命令空間
啟動後會有一些提示,包括告訴你如何進入redis容器內,對外暴露埠等一些操作。
# 檢視redis是否啟動成功
kubectl get all -n redis
可以看到redis這個chart的所有狀態都為running,一主三從,進入redis終端內驗證,使用剛剛配置的密碼登入redis:
kubectl exec -it redis-master-0 -n redis bash
建立一些資料 set name kubernetes
,然後在從節點驗證資料是否存在。
可以看到從節點已經獲取到剛剛建立的name,但是在從節點建立資料是不行的,從節點只能讀取資料。
5. 升級和回滾
a. 升級
我們在剛剛已經建立了一個redis的chart,實際生產環境中,可能需要修改一些配置,然後基於這個chart對我們應用進行升級。
例如,我們這裡修改一些redis的密碼,然後升級這個chart,我們編輯一下values.yaml把開頭建立的密碼“redis123”改成“redis456”。
# 升級redis
helm upgrade redis-cluster ./redis/ -n redis
# redis-cluster表示部署的名稱
# ./redis/ 表示chart的本地路徑,這裡為當前目錄下的reids
# -n redis 表示名稱空間,可以提前建立一個redis的命令空間
可以從時間看到我們的pod剛剛進行了更新,並且狀態都處於running狀態,然後進入容器進行驗證,當我們輸入之前的密碼“redis123”,會報錯說密碼不正確,輸入更新後的密碼“redis456”,正常進入redis,如果一開始使用了資料持久化,這時候建立的資料應該也不會丟失。
b. 回滾
# 先看看我們歷史的chart
helm history redis -n redis
可以看到第一個狀態為superseded是我們最開始建立的chart,第二個狀態為deployed是我們剛剛升級的chart,就是正在執行的,我們將版本回滾到第一個版本。
helm rollback redis 1 -n redis
可以看到我們已經回滾到第一個版本,並且pod正在更新中,等到建立成功,可以驗證一下輸入“redis123”是否能進入到redis。
驗證成功,已經回滾到版本1,使用舊密碼成功登入redis。
當我們深入探索 Helm Chart 部署 Redis 的過程時,不僅僅是學習瞭如何利用 Helm 簡化複雜的部署任務,更是領略到了在容器化世界中管理和維護應用的便捷之處。透過 Helm Chart,我們可以輕鬆地定義、配置和部署複雜的應用程式,使得整個過程更加靈活、可維護性更高。
在未來,我們可以繼續深入學習 Helm 的更多高階功能,探索更多複雜應用場景下的部署和管理方法。透過不斷學習和實踐,我們能夠更好地應對日益複雜的容器化環境,提高工作效率,確保應用的可靠性和穩定性。
希望這篇部落格能夠幫助你更好地理解 Helm Chart 部署 Redis,並在你的容器化旅程中提供一些有益的經驗。讓我們一起迎接技術的挑戰,不斷進步,探索更多的可能性。感謝你的閱讀,期待在未來的技術探索中再次相遇!