V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
teli
V2EX  ›  Kubernetes

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

  •  
  •   teli · 2023-01-08 14:44:11 +08:00 via Android · 2157 次点击
    这是一个创建于 720 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    另外 etcd 可以用 discovery.etcd.io 来做初始发现
    novolunt
        9
    novolunt  
       2023-01-09 19:54:26 +08:00
    你说的是 endpoint ,kubectl get ep -A 可以获取全部实例的地址和端口。
    同一集群走 svc ,跨集群使用 smart dns
    teli
        10
    teli  
    OP
       2023-01-10 22:30:24 +08:00 via Android
    @julyclyde 这个看起来很匹配需求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 15:01 · PVG 23:01 · LAX 07:01 · JFK 10:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.