前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes中Consul重启自动加入集群实践

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

原创
作者头像
sherlock99
发布2018-08-02 12:01:29
1.6K0
发布2018-08-02 12:01:29
举报
文章被收录于专栏:日常工作总结日常工作总结

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

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

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

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

代码语言:javascript
复制
consul join consul-1 consul-2 

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

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

代码语言:javascript
复制
-retry-join=consul.svc.cluster.local

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

代码语言:javascript
复制
/ # 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容器后,可以看到已经自动加入了集群:

代码语言:javascript
复制
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也已经被选举出来

代码语言:javascript
复制
[INFO] consul: New leader elected: consul-2

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

代码语言:javascript
复制
[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容器已经被踢出了集群。

代码语言:javascript
复制
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不能自动移除老的节点,需要手工移除:

代码语言:javascript
复制
consul operator raft -remove-peer -address="192.168.23.41:8300"    -token="xxxx"

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档