现场运行CoreOS etcd集群实例

阅读时间:3分钟

作为我们持续努力的一部分经济计算,同时保证100%可用性到集装箱的工作负载,如Kubernetes, Amazon Elastic集装箱运输和码头工人群。我们兴奋地分享Elastigroup & etcd2集成指南。

CoreOS-etcd

etcd是一个开源的分布式键值存储为容器提供共享的配置和服务发现Linux集群。etcd集群中的每台计算机上运行,优雅地处理网络分区和领导人选举现任领导人的损失。

您的集群上运行的应用程序容器etcd可以读取和写入数据。常见的例子是存储数据库连接细节,缓存设置,功能标志等等。

集群etcd现场实例

正如你可能已经知道的,etcd2发现服务没有很好的发挥post-bootstrap集群成员的加入和离开。在本教程中我们将使用不同的方法来减少依赖于外部系统。

自动化

我们的脚本首先查询Spotinst API来获取Elastigroup ID(成员发现)和使用AWS实例元数据获取实例idinstance-ip。这些信息将被写入到一个文件,并指导etcd2在启动时加载这些信息。

集群成员

Etcd指望实例在终止之前把自己从一个集群。因为我们正在与现货情况下有必要添加一些额外的逻辑使方案更加健壮,以便现场实例可以更换没有问题。

清理“坏”的成员

一次添加到我们的用户数据,脚本将处理清理留下的两种方法,以确保没有实例。

  • 状态的实例会问Spotinst API每30秒,将自己从etcd集群如果取消“终止”的状态出现。
  • 当出现一个新实例,这个过程会比较的列表成员由etcd Elastigroup运行机器的列表。一旦坏的主机(s)发现我们可以发送一个REST调用一个健康的集群的集群成员来执行清理任务。这将删除实例所取代。

# cloud-config coreos: etcd2: advertise-client-urls:“http:// private_ipv4:2379美元“initial-advertise-peer-urls:“http:// private_ipv4:2380美元“listen-client-urls:“http://0.0.0.0:2379, http://0.0.0.0:4001”listen-peer-urls:“http:// private_ipv4:2380美元”单位:-名称:etcd2。服务命令:停止——名字:spotinst-etcd-discovery。服务命令:开始内容:|(单位)描述= Spotinst Elastigroup发现[服务]ExecStartPre = / bin / bash - c ' / home /核心/ spotinst_etcd /发现。sh ' ExecStart = / usr / bin / systemctl开始etcd2 -名称:舰队。服务命令:开始——名字:spotinst-etcd-termination。服务内容:|(单位)描述=验证点服务器状态[服务]EnvironmentFile = / etc /环境类型=一次通过ExecStart = / bin / bash - c ' / home /核心/ spotinst_etcd /终止。sh”——名字:spotinst-etcd-termination。计时器命令:开始内容:|(单位)描述=检查现场实例状态[时间]OnCalendar = *: *: 0/30持久= true write_files:内容:|[服务]EnvironmentFile = / home /核心/ spotinst_etcd /同行路径:/运行/ systemd /系统/ etcd2.service.d / 30-etcd_peers。配置权限:“0644”-内容:| # !/bin/bash pkg = " spotinst_etcd_termination " version = " 0.0.1”spotinst_token =“XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”#创建目录写输出mkdir - p /home/core/spotinst_etcd / ec2_instance_id = $ (curl - s http://169.254.169.254/latest/meta-data/instance-id)如果[[!美元ec2_instance_id]];然后回声“$ pkg:未能得到实例元数据实例id”退出2 fi如果! (etcdctl成员列表| grep - q COREOS_PRIVATE_IPV4美元);然后回声“etcd重启etcd2机器没有找到”rm射频/var/lib/etcd2/* systemctl重启etcd2 fi ec2_instance_status = $ (curl - x - h - h“application / json - type:”“授权:无记名$ {spotinst_token}”“https://help.spotinst。io / aws ec2实例/ $ {ec2_instance_id} " |金桥”。反应| . items [0] | .lifeCycleState”)回声”ec2_instance_status = $ ec2_instance_status“如果[[$ ec2_instance_status = *“终止”*]];然后etcd_member_id = $ (etcdctl成员列表| grep COREOS_PRIVATE_IPV4美元| awk的{打印1美元}| awk - f‘:’“{打印1美元}”)回声”把etcd成员从集群:$ etcd_member_id etcdctl成员删除etcd_member_id fi路径:美元/home/core/spotinst_etcd /终止。sh权限:“0777”-内容:| # !/usr/bin/env bash curl -fsSL https://s3.amazonaws.com/spotinst-labs/etcd-cluster/elastigroup-discovery.sh | \ SPOTINST_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \ bash path: /home/core/spotinst_etcd/discovery.sh permissions: "0777"

注意:此脚本无法处理在这个时间和规模只会保持初始集群大小

结论

在这写我们设法创建一个功能性etcd集群运行的现场实例自动恢复。如果你有兴趣测试您自己的基于现货etcd集群请试一试,请在下面的评论中分享你的结果!

——Spotinst团队

Baidu
map