什么是 kubernetes 集群中使用的 redis headless 服务

what is the redis headless service used for in kubernetes cluster

今天遇到一个问题,kubernetes集群中的redis报错如下:

2021-11-16T05:32:18 [INFO] - increment delete failed...,MobcError(RedisCMDError(An error was signalled by the server: You can't write against a read only replica.))

我检查了我的 redis 配置,发现配置 url 是这样的:

redisConnectionStr="redis://default:password@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/3"

查看servcie发现它映射到redis cluster master和replica,请问headness service user是什么情况?为什么不只保留主服务和副本服务?如果读取操作,使用任何服务都可以。如果写,只使用主服务。我应该什么时候使用 headness 服务?

why not only keep the master service and replica servcie?

只要你能实现,你就能做到。因为 redis helm 可能不会对 运行 Read/Write 副本使用特定标签,所以很难转移和创建不同的服务 read & write.

如果您使用 helm 部署 Redis,它将在 K8s 集群中创建这两个服务

一个是 Headless 服务,另一个是正常的 service ClusterIP.

在应用端,我们应该使用普通服务。

所以想法是无头 return 如果您使用哨兵或 Redis 集群,应用程序将进一步使用副本 IP 来管理集群。

如果您使用的是普通服务,它将根据条件自动将流量移动或路由到 Read/Write 个副本。

而如果您使用的是哨兵,则可以 ping 哨兵服务,它将 return 主控和读取副本 IP。

您现在可以根据要求使用内部代码,因为您正在使用 sentinel 获取写入和读取 ip。

helm 图表中你可以看到一个配置

sentinel:
  enabled: true

在 bitnami docs 他们明确提到这个命令将 return 当前主节点的地址,可以从集群内部访问..

阅读更多信息:https://github.com/bitnami/charts/tree/master/bitnami/redis#master-replicas-with-sentinel