通过Helm Chart依赖部署单实例Redis出现多副本问题如何解决?
现有配置错误点
- 默认依赖的Bitnami Redis Chart 15.x版本默认启用
replication主从架构,会自动创建1个主节点StatefulSet + 3个副本节点StatefulSet,和你单实例的需求不符。 - 你自行定义的Service标签选择器
app: redis无法匹配Bitnami Redis Chart生成的Pod标签:Bitnami Chart生成的Pod默认使用标准Kubernetes标签,前缀带你的Helm Release名称,比如你当前实例Release名为myapp,Pod标签为app.kubernetes.io/name: redis、app.kubernetes.io/instance: myapp,导致你创建的redis-svc没有关联后端Pod。 - Service配置的端口6355和Redis默认服务端口6379不匹配,就算selector正确也无法正常转发请求。
调整方案
- 在你自己Chart的
values.yaml中添加如下配置,强制Redis Chart启动单实例模式:
redis: architecture: standalone
配置后Redis Chart只会部署1个单实例Pod,不会生成副本集相关的StatefulSet资源。
2. 不需要自行定义Service资源,Bitnami Redis Chart部署完成后会自动生成名为{你的Release名称}-redis的ClusterIP Service,默认端口为6379,集群内部直接使用该服务名作为Redis访问地址即可。
如果确实需要自定义Service,将selector修改为匹配Bitnami生成的Pod标签即可:
apiVersion: v1 kind: Service metadata: name: redis-svc spec: ports: - port: 6379 targetPort: 6379 selector: app.kubernetes.io/name: redis app.kubernetes.io/instance: myapp # 替换为你实际的Helm Release名称
- 执行如下命令更新依赖并重部署:
helm dependency update helm upgrade {你的Release名称} {你的Chart路径}
部署完成后执行kubectl get statefulset只会看到1个Redis实例相关的资源,符合单实例需求。
内容的提问来源于stack exchange,提问作者Rudziankoŭ
相关产品推荐
相关产品推荐

