我创建了一个由三个节点组成的consul集群。现在每当我启动ECS实例时,我需要运行consul代理和registrator容器并与consul服务器节点之一加入consul代理,或者扩展我运行微服务的ECS实例。
我通过滚动更新自动完成部署过程。 但是每当我扩展ECS实例时,我都必须手动启动consul代理和registrator。
任何人都知道如何自动化这个?
答案 0 :(得分:1)
在您的领事服务器或弹性IP之前创建一个ELB,以便它不会发生变化。
然后在userdata中:
#!/bin/bash
consul_host=consul.mydomain.local
#start the agent
docker run -it --restart=always -p 8301:8301 -p 8301:8301/udp -p 8400:8400 -p 8500:8500 -p 53:53/udp \
-v /opt/consul:/data -v /var/run/docker.sock:/var/run/docker.sock -v /etc/consul:/etc/consul -h \
$(curl -s http://169.254.169.254/latest/meta-data/instance-id) --name consul-agent progrium/consul \
-join $consul_host -advertise $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)`
#start the registrator
docker run -it --restart=always -v /var/run/docker.sock:/tmp/docker.sock \
-h $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --name consul-registrator \
gliderlabs/registrator:latest -ip $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) \
consul://$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4):8500
注意:此代码段假设您的设置全部可在本地访问,等等。来自this blog post和this link
的云端格式答案 1 :(得分:1)
aws ecs start-task
在您的用户数据中。This AWS post专注于此。
编辑:由于您提到了ECS实例,我假设您已经为该实例设置了必要的IAM角色。