需求为在 docker swarm 或者 k8s 中,部署 etcd 集群或者 memberlist 集群。 我在网上找到一种解决方案: 先手动启动一个实例,获得第一个实例的 ip ,再让后面启动的实例通过该 ip 加入集群。 但我并不想让集群启动过程手动化。各个实例应该差不多是同时部署或者升级的。
1
ysicing 2023-01-08 15:58:55 +08:00
k8s 内部可以用 headless service 可以参考 https://github.com/bitnami/charts/blob/main/bitnami/etcd/templates/svc-headless.yaml
|
2
xzysaber 2023-01-08 16:27:47 +08:00
一般都是使用 headless service ,这个时候可以获取到 Pod IP 对应的域名。
像分布式系统的多实例之间在使用 StatefulSet 部署的时候,一般会在 Init containers 里面循环一直到其他 Pod ready 为止。 |
3
Cola98 2023-01-08 16:32:28 +08:00
K8S 里面可以看下关于 service ,不过也要注意是什么类型。
|
4
qwwe01 2023-01-08 18:54:24 +08:00
k8s service
{service name}.{service namespace}.svc.{domin} 这种么 |
6
wzcloud 2023-01-08 22:07:56 +08:00
pod 内也可以调用 k8s 的 api ,通过获取 service 的信息(包含 endpoints 信息),应该可以知道所有实例的地址,可以试一下
|
8
julyclyde 2023-01-09 09:38:14 +08:00
|
9
novolunt 2023-01-09 19:54:26 +08:00
你说的是 endpoint ,kubectl get ep -A 可以获取全部实例的地址和端口。
同一集群走 svc ,跨集群使用 smart dns |