← 返回上一頁
Kubernetes

在 Kubernetes 上使用 Helm 快速部署 Redis Cluster 與 RedisInsight

本頁目錄
RedisInsight Browser GUI 介面截圖

在後端開發的世界裡,Redis 幾乎是不可或缺的存在。不管是做快取、分散式鎖、排行榜,還是 Pub/Sub 訊息佇列,Redis 都能派上用場。而隨著容器化與 Kubernetes 的普及,把 Redis Cluster 搬上 K8s 已經是很常見的做法了。

這篇文章會帶你用 Helm 在 Kubernetes 上快速建立一組 Redis Cluster,並且搭配 RedisInsight 這套視覺化管理工具,讓你可以透過 Web UI 來操作與監控 Redis。整個流程不複雜,跟著做大概十幾分鐘就能搞定。

事前準備

在開始之前,請確認你的環境已經具備以下條件:

項目說明
Kubernetes 叢集至少 1 個 master + 1 個 worker node
Helm 3已安裝並能正常使用
StorageClass本範例使用 nfs-storage,請依你的環境調整
kubectl已設定好 kubeconfig

部署 Redis Cluster

新增 Bitnami Helm Repository

Bitnami 提供了品質不錯的 Redis Cluster Helm Chart,我們直接拿來用:

# 新增 bitnami repo
helm repo add bitnami https://charts.bitnami.com/bitnami

# 確認 repo 清單
helm repo list

下載並解壓縮 Chart

# 拉取指定版本的 chart
helm pull bitnami/redis-cluster --version 8.6.6

# 解壓縮
tar -zxvf redis-cluster-8.6.6.tgz

# 進入目錄
cd redis-cluster

調整設定檔

編輯 values.yaml,主要修改兩個地方:

參數說明
global.storageClassnfs-storage依你的 StorageClass 名稱填入
global.redis.password********設定 Redis 存取密碼

安裝 Redis Cluster

# 建立 namespace
kubectl create ns redis-cluster

# 透過 Helm 安裝
helm install redis-cluster . -n redis-cluster

驗證部署狀態

kubectl get pods,svc -n redis-cluster | grep redis

正常情況下你會看到 6 個 Pod(3 master + 3 replica)都是 Running 狀態:

Pod 名稱狀態說明
redis-cluster-0RunningMaster/Replica 節點
redis-cluster-1RunningMaster/Replica 節點
redis-cluster-2RunningMaster/Replica 節點
redis-cluster-3RunningMaster/Replica 節點
redis-cluster-4RunningMaster/Replica 節點
redis-cluster-5RunningMaster/Replica 節點

同時會建立兩個 Service:

Service 名稱TypePort
redis-clusterClusterIP6379/TCP
redis-cluster-headlessClusterIP (None)6379/TCP, 16379/TCP

測試連線

# 進入其中一個 Pod
kubectl exec -it redis-cluster-0 -n redis-cluster -- bash

# 使用 redis-cli 連線(透過 ClusterIP)
redis-cli -c -h redis-cluster -p 6379

連線後進行驗證:

> AUTH ********
OK
> SET name tony
OK
> GET name
"tony"

資料會自動根據 slot 分配到不同節點,這就是 Redis Cluster 的特性。

解除安裝

如果之後要移除,執行以下指令即可:

helm list -n redis-cluster
helm uninstall redis-cluster -n redis-cluster

安裝 RedisInsight

RedisInsight 是 Redis 官方提供的 GUI 管理工具,支援瀏覽資料、執行指令、監控效能等功能,非常實用。

RedisInsight Browser GUI 介面截圖
RedisInsight Browser 介面 -- 可視覺化瀏覽 Redis 中的 Key-Value 資料

建立 Deployment 與 Service

建立 redis-insight.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-insight
  namespace: redis-cluster
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-insight
  template:
    metadata:
      labels:
        app: redis-insight
    spec:
      containers:
      - name: redis-insight
        image: redislabs/redisinsight:1.12.1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8001
        volumeMounts:
        - name: db
          mountPath: /db
      volumes:
      - name: db
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: redis-insight-service
  namespace: redis-cluster
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8001
    nodePort: 31888
  selector:
    app: redis-insight
# 部署
kubectl apply -f redis-insight.yaml

# 確認 Service
kubectl get svc -n redis-cluster

存取 RedisInsight

透過瀏覽器開啟 http://<Node-IP>:31888 就能進入 RedisInsight 的 Web UI。

連線設定

在 RedisInsight 中新增資料庫連線,填入以下資訊:

欄位
Hostredis-cluster-headless.redis-cluster.svc.cluster.local
Port6379
Nameredis-cluster-headless
Password********

存取格式為:<svc名稱>.<namespace>.svc.cluster.local,這是 Kubernetes 內部 DNS 的標準解析方式。

連線成功後,你就能在 Web UI 上直接瀏覽所有的 Key、執行 Redis 指令、查看記憶體使用狀況等等。

移除 RedisInsight

kubectl delete -f redis-insight.yaml

Kubernetes 上的 Redis 架構概覽

Redis Enterprise on Kubernetes 架構示意圖
Redis Enterprise on Kubernetes 架構圖 -- 展示叢集在 K8s 中的部署拓撲

在 Kubernetes 上部署 Redis Cluster 時,每個 Redis 節點會以獨立的 Pod 運行,透過 StatefulSet 確保 Pod 的身份穩定性。Headless Service 則負責讓各節點之間能透過 DNS 互相發現與通訊。

結語

用 Helm 部署 Redis Cluster 真的蠻方便的,省去了自己寫一堆 YAML 的麻煩,Chart 裡面已經幫你把 StatefulSet、ConfigMap、Service 都設定好了。搭配 RedisInsight 的話,日常的資料查詢與除錯效率也會提升不少。

如果是正式環境,建議可以進一步研究 Sentinel 或 Redis Operator 等方案,在高可用與自動故障轉移方面會更完善。

分享這篇
X LinkedIn Facebook Hacker News Reddit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料