docker swarm 和 k8s 中,如何获得服务其它各个实例的地址,以组成集群?

2023-01-08 14:44:11 +08:00
 teli

需求为在 docker swarm 或者 k8s 中,部署 etcd 集群或者 memberlist 集群。 我在网上找到一种解决方案: 先手动启动一个实例,获得第一个实例的 ip ,再让后面启动的实例通过该 ip 加入集群。 但我并不想让集群启动过程手动化。各个实例应该差不多是同时部署或者升级的。

1879 次点击
所在节点    Kubernetes
10 条回复
ysicing
2023-01-08 15:58:55 +08:00
xzysaber
2023-01-08 16:27:47 +08:00
一般都是使用 headless service ,这个时候可以获取到 Pod IP 对应的域名。
像分布式系统的多实例之间在使用 StatefulSet 部署的时候,一般会在 Init containers 里面循环一直到其他 Pod ready 为止。
Cola98
2023-01-08 16:32:28 +08:00
K8S 里面可以看下关于 service ,不过也要注意是什么类型。
qwwe01
2023-01-08 18:54:24 +08:00
k8s service
{service name}.{service namespace}.svc.{domin}
这种么
Nnq
2023-01-08 22:02:16 +08:00
@qwwe01 +1
wzcloud
2023-01-08 22:07:56 +08:00
pod 内也可以调用 k8s 的 api ,通过获取 service 的信息(包含 endpoints 信息),应该可以知道所有实例的地址,可以试一下
teli
2023-01-09 07:48:05 +08:00
@wzcloud 这是一个很好的思路。docker 也有类似 api
julyclyde
2023-01-09 09:38:14 +08:00
需要横向联系的集群,我觉得其实不适宜“太动态”
徒增麻烦而已

另外 etcd 可以用 discovery.etcd.io 来做初始发现
novolunt
2023-01-09 19:54:26 +08:00
你说的是 endpoint ,kubectl get ep -A 可以获取全部实例的地址和端口。
同一集群走 svc ,跨集群使用 smart dns
teli
2023-01-10 22:30:24 +08:00
@julyclyde 这个看起来很匹配需求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX