我已经在启用哨兵的情况下在k8s上部署了redis helm 图表。
我用哨兵拓扑学建立了主副本,意思是一个主人和两个奴隶.每个吊舱都成功地运行了redis和sentinel容器:
NAME READY STATUS RESTARTS AGE IP NODE
my-redis-pod-0 2/2 Running 0 5d22h 10.244.0.173 node-pool-u
my-redis-pod-1 2/2 Running 0 5d22h 10.244.1.96 node-pool-j
my-redis-pod-2 2/2 Running 0 3d23h 10.244.1.145 node-pool-e现在,我有了一个python脚本,它连接到redis并通过传递容器的ip来发现主程序。
sentinel = Sentinel([('10.244.0.173', 26379),
('10.244.1.96',26379),
('10.244.1.145',26379)],
sentinel_kwargs={'password': 'redispswd'})
host, port = sentinel.discover_master('mymaster')
redis_client = StrictRedis(
host=host,
port=port,
password='redispswd')让我们假设主节点位于我的- redis -po-0上,当我做kubectl delete pod来模拟一个导致我失去吊舱的问题时,哨兵将把其他奴隶中的一个提升为主人,而库伯奈特将给我一个带红星和哨兵的新吊舱。
NAME READY STATUS RESTARTS AGE IP NODE
my-redis-pod-0 2/2 Running 0 3m 10.244.0.27 node-pool-u
my-redis-pod-1 2/2 Running 0 5d22h 10.244.1.96 node-pool-j
my-redis-pod-2 2/2 Running 0 3d23h 10.244.1.145 node-pool-e问题是,我怎样才能告诉哨兵自动将这个新ip添加到列表中(没有代码更改)?
谢谢!
发布于 2021-12-28 05:15:42
您可以将dns条目用于无头服务,而不是使用IP。
无头服务是通过显式指定
ClusterIP: None然后,您将能够按照下面的方式使用dns条目,其中redis-0将是主控项。
#syntax
pod_name.service_name.namespace.svc.cluster.local
#Example
redis-0.redis.redis.svc.cluster.local
redis-1.redis.redis.svc.cluster.local
redis-2.redis.redis.svc.cluster.local参考资料:什么是无头服务,它做什么/完成什么,以及它的一些合法用例是什么?
https://www.containiq.com/post/deploy-redis-cluster-on-kubernetes
https://stackoverflow.com/questions/70499332
复制相似问题