Helm Chart 部署 Redis 的完美指南

2023-12-15 15:00:38

一、Helm介紹

Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前已經打包好的yaml檔案部署到kubernetes上。

三個基本概念:

  1. Chart:Chart 代表著 helm 包。它包含在 Kubernetes 叢集內部執行應用程式,工具或服務所需的所有資源定義。
  2. Repository:是 chart 的儲存庫。例如:https://charts.bitnami.com/bitnami
  3. 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,並在你的容器化旅程中提供一些有益的經驗。讓我們一起迎接技術的挑戰,不斷進步,探索更多的可能性。感謝你的閱讀,期待在未來的技術探索中再次相遇!