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