专栏首页日常工作总结Kubernetes中Consul重启自动加入集群实践
原创

Kubernetes中Consul重启自动加入集群实践

在容器环境下,Consul原有的启动后join集群的方式都失效了:

  1. 启动时配置join IP:IP不固定,无法配置
  2. 启动时配置rejoin:之前的容器已经被销毁,没有rejoin需要的信息

长期以来我们的业务只能采用重启后登录容器,手工执行join命令的方式:

登录consul-0容器,执行命令:

consul join consul-1 consul-2 

近期频繁的容器母机调整导致我们的业务需要多次重启,不得不寻找一种自动重建Consul集群的方式。在网上搜索和学习一番后发现,基本没有针对Kubernetes容器环境的自动重建方案。

经过一番折腾后,利用Kubernetes容器集群对容器内域名的支持,找到了解决方案,在consul server启动参数中增加一行:

-retry-join=consul.svc.cluster.local

这里的consul.svc.cluster.local是Kubernetes内的域名,通过多次尝试解析并加入这个域名对应的consul实例的IP,来构建或重建Consul集群。

/ # nslookup consul.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      consul.svc.cluster.local
Address 1: 192.168.10.37  consul-2.consul.svc.cluster.local
Address 2: 192.168.11.195 consul-0.consul.svc.cluster.local
Address 3: 192.168.47.189 consul-1.consul.svc.cluster.local

以下是实际演示,Consul版本1.1.0

启动3个consul server容器后,可以看到已经自动加入了集群:

Node           Address              Status  Type    Build  Protocol  DC   Segment
consul-0  192.168.18.187:8301  alive   server  1.1.0  2         dc1  <all>
consul-1  192.168.47.189:8301  alive   server  1.1.0  2         dc1  <all>
consul-2  192.168.10.36:8301   alive   server  1.1.0  2         dc1  <all>

leader也已经被选举出来

[INFO] consul: New leader elected: consul-2

这时候,我们随便重启一个容器(consul-0),使用consul monitor命令观察日志

[INFO] memberlist: Suspect consul-0 has failed, no acks received
[INFO] memberlist: Marking consul-0 as failed, suspect timeout reached (0 peer confirmations)
[INFO] serf: EventMemberFailed: consul-0 192.168.18.187
[INFO] consul: Removing LAN server consul-0 (Addr: tcp/192.168.18.187:8300) (DC: dc1)
---
[INFO] serf: EventMemberJoin: consul-0 192.168.11.195
[INFO] consul: Adding LAN server consul-0 (Addr: tcp/192.168.11.195:8300) (DC: dc1)

可以观察到,换了IP的同名consul容器已经被加入了集群,老IP的consul容器已经被踢出了集群。

Node           Address              Status  Type    Build  Protocol  DC   Segment
consul-0  192.168.11.195:8301  alive   server  1.1.0  2         dc1  <all>
consul-1  192.168.47.189:8301  alive   server  1.1.0  2         dc1  <all>
consul-2  192.168.10.36:8301   alive   server  1.1.0  2         dc1  <all>

删除leader容器也是同样的效果,会自动重新选举新的leader并且在新容器重启完毕后,自动加入集群,不过耗时久一点。

以上是基于Consul 1.1.0版本的测试。对于0.7.4版本,同样的配置,有个问题,虽然consul server能自动组成集群,但是在重启容器后,raft不能自动移除老的节点,需要手工移除:

consul operator raft -remove-peer -address="192.168.23.41:8300"    -token="xxxx"

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • apache+php参数调优

    httpd.conf设置 <IfModule prefork.c> ServerLimit 15000 StartServers 300 MinSpareSer...

    sherlock99
  • Git常用命令汇总

    Git配置 git config --global user.name "xx" git config --global user.email "xx@gma...

    sherlock99
  • ASP.NET MVC中使用AJAX传参技巧

        一般情况下进行GET请求才会这么做,类似在浏览器的地址栏敲进去的url地址那样,客户端的js代码如下,这里对服务器端做了一个请求(这里用GET),请求通...

    sherlock99
  • 微服务Consul系列之集群搭建

    在上一篇中讲解了Consul的安装、部署、基本的使用,使得大家有一个基本的了解,本节开始重点Consul集群搭建,官方推荐3~5台Server,因为在异常处理中...

    五月君
  • consul基础运维-备份还原导入导出

    工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作。

    jeremyxu
  • spring cloud: 使用consul来替换eureka

    eureka官方已经正式宣布:自2.0起不再维护该项目,并在github 项目wiki上放出了一段吓唬人的话:

    菩提树下的杨过
  • 安装Consul集群

    TIPS •本文基于Consul 1.5.3,理论适用于Consul 1.6及更低版本。•安装单机版Consul详见:《安装单机版Consul》

    用户1516716
  • consul服务中心

    2.1. 添加 maven 依赖 2.2. springboot 配置 application.yml 注册服务

    suveng
  • consul怎么在windows下安装

    1.去官网下载:https://www.consul.io/downloads.html 2.解压:

    ydymz
  • consul安全加固

    最近的工作需要对默认安装的consul集群进行安全加固,这里将安全加固的步骤记录下来。

    jeremyxu

扫码关注云+社区

领取腾讯云代金券