通過命令查詢集群狀態:
k exec -it redis-app-0 -- redis-cli cluster info
第一行是 cluster_state:fail (正常應該是 ok)
如何解決?
這里參考了 https://github.com/redis/redis/issues/4289. 主要方法是啟動參數中設置 --cluster-announce-ip 為當前 pod 的 ip. 對於已經錯亂的 nodes.conf 文件,則修改其中的 ip.
修改 redis.yaml
# 略
containers:
- name: redis
image: redis
command:
- "redis-server"
args:
- "/etc/redis/redis.conf"
- "--protected-mode"
- "no"
- "--cluster-announce-ip"
- "$(POD_IP)"
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
# 略
- 啟動參數增加了 --cluster-announce-ip, 其值來自環境變量 POD_IP. 注意 $(POD_ID) 這里是小括號而非大括號。
- 這個環境變量的值又來自 status.podIP, 即當前 pod 的 ip. 每次 pod 啟動時會分配一個不同的 ip, 通過 status.podIP 可以拿這個 ip,進而通知集群。
修改錯亂的 nodes.conf
可以直接到 pv 中找到對應的文件修改它。修改完成后重啟各個 pod 即可。
重啟集群各個 pod
k apply -f redis.yaml