k8s 部署了 redis 集群,節點重啟后,ip 變化導致集群不可用的問題


通過命令查詢集群狀態:

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
# 略
  1. 啟動參數增加了 --cluster-announce-ip, 其值來自環境變量 POD_IP. 注意 $(POD_ID) 這里是小括號而非大括號。
  2. 這個環境變量的值又來自 status.podIP, 即當前 pod 的 ip. 每次 pod 啟動時會分配一個不同的 ip, 通過 status.podIP 可以拿這個 ip,進而通知集群。

修改錯亂的 nodes.conf
可以直接到 pv 中找到對應的文件修改它。修改完成后重啟各個 pod 即可。

重啟集群各個 pod

k apply -f redis.yaml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM