在後端開發的世界裡,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.storageClass | nfs-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-0 | Running | Master/Replica 節點 |
| redis-cluster-1 | Running | Master/Replica 節點 |
| redis-cluster-2 | Running | Master/Replica 節點 |
| redis-cluster-3 | Running | Master/Replica 節點 |
| redis-cluster-4 | Running | Master/Replica 節點 |
| redis-cluster-5 | Running | Master/Replica 節點 |
同時會建立兩個 Service:
| Service 名稱 | Type | Port |
|---|---|---|
| redis-cluster | ClusterIP | 6379/TCP |
| redis-cluster-headless | ClusterIP (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 管理工具,支援瀏覽資料、執行指令、監控效能等功能,非常實用。

建立 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 中新增資料庫連線,填入以下資訊:
| 欄位 | 值 |
|---|---|
| Host | redis-cluster-headless.redis-cluster.svc.cluster.local |
| Port | 6379 |
| Name | redis-cluster-headless |
| Password | ******** |
存取格式為:<svc名稱>.<namespace>.svc.cluster.local,這是 Kubernetes 內部 DNS 的標準解析方式。
連線成功後,你就能在 Web UI 上直接瀏覽所有的 Key、執行 Redis 指令、查看記憶體使用狀況等等。
移除 RedisInsight
kubectl delete -f redis-insight.yaml
Kubernetes 上的 Redis 架構概覽

在 Kubernetes 上部署 Redis Cluster 時,每個 Redis 節點會以獨立的 Pod 運行,透過 StatefulSet 確保 Pod 的身份穩定性。Headless Service 則負責讓各節點之間能透過 DNS 互相發現與通訊。
結語
用 Helm 部署 Redis Cluster 真的蠻方便的,省去了自己寫一堆 YAML 的麻煩,Chart 裡面已經幫你把 StatefulSet、ConfigMap、Service 都設定好了。搭配 RedisInsight 的話,日常的資料查詢與除錯效率也會提升不少。
如果是正式環境,建議可以進一步研究 Sentinel 或 Redis Operator 等方案,在高可用與自動故障轉移方面會更完善。

發佈留言