求在K8s上部署Redis Cluster/Sentinel的有效方案及最新教程
解决K8s上Redis集群部署及Kong TCPIngress配置问题
Redis Cluster 部署(Bitnami Helm 修正版)
- 先更新Helm仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update - 部署时必须指定集群节点数,Bitnami默认需要6个节点(3主3从),这是很多人踩坑的点:
helm install redis-cluster bitnami/redis-cluster \ --set replicaCount=3 \ --set cluster.nodes=6 \ --set auth.enabled=false \ # 测试阶段先关闭认证,稳定后再开启 --set service.type=ClusterIP - 等待集群初始化完成:
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=redis-cluster --timeout=5m - 验证集群状态,看到
cluster_state:ok才算正常:kubectl exec -it redis-cluster-0 -- redis-cli cluster info
Kong TCPIngress 配置要点
Redis Cluster需要同时暴露数据端口(6379)和集群总线端口(16379),TCPIngress配置如下:
apiVersion: configuration.konghq.com/v1beta1 kind: TCPIngress metadata: name: redis-cluster-ingress spec: rules: - port: 6379 backend: serviceName: redis-cluster servicePort: 6379 - port: 16379 backend: serviceName: redis-cluster servicePort: 16379
- 客户端连接时必须开启集群模式,Another Redis Desktop Manager里要勾选"Cluster Mode",用Kong的IP+6379端口连接,别用单机模式。
Sentinel 模式备选方案(如果Cluster模式仍有问题)
- 用Bitnami的Redis Sentinel Helm包部署:
helm install redis-sentinel bitnami/redis \ --set sentinel.enabled=true \ --set sentinel.replicaCount=3 \ --set auth.enabled=false \ --set service.type=ClusterIP - TCPIngress配置需要暴露Sentinel端口(26379)和Redis端口(6379):
apiVersion: configuration.konghq.com/v1beta1 kind: TCPIngress metadata: name: redis-sentinel-ingress spec: rules: - port: 6379 backend: serviceName: redis-sentinel servicePort: 6379 - port: 26379 backend: serviceName: redis-sentinel-headless servicePort: 26379 - 客户端选择"Sentinel"模式,填入Kong IP+26379,主节点名称默认是
mymaster。
常见问题排查
- 插入键失败:大概率是用了单机模式连接,Redis Cluster不支持跨槽的单机操作,必须用集群客户端。
- 无法显示已创建的键:Another Redis Desktop Manager在集群模式下需要手动刷新,或者检查是否开启了集群模式,部分键可能存储在其他节点,集群模式下客户端会自动路由,但工具需要同步节点信息。
- 集群初始化失败:查看pod日志
kubectl logs redis-cluster-0,如果是认证问题先关闭auth;如果是DNS解析失败,检查K8s CoreDNS是否正常,Bitnami的chart依赖headless service的DNS解析。
内容的提问来源于stack exchange,提问作者SrCabra
相关产品推荐
相关产品推荐

