2016-08-05 5 views
2

Я создал кластер consul из трех узлов. Теперь Мне нужно запустить контейнеры консула и контейнеры регистратора и присоединиться к агенту консула с одним из узлов сервера консула всякий раз, когда я запускаю экземпляр ECS или масштабирую ECS-экземпляр, на котором я запускаю свои микросервисы.Как автоматически запускать агент консула и контейнер регистратора при масштабировании экземпляра ECS

У меня есть автоматическая остановка процесса развертывания с обновлением обновлений. Но я должен вручную запускать агента консула и регистратора всякий раз, когда я масштабирую ECS-экземпляр.

У кого-нибудь есть идея, как мы можем автоматизировать это?

+0

@Takarii: В настоящее время я должен запускать агента консула и регистратора вручную при инсталляции ECS всякий раз, когда я масштабирую его. Я хочу автоматизировать эту задачу. Я запускаю следующие команды: export PRIVATE_IP = [ваш частный IP здесь]; export JOIN_IP = [IP узла консула сервера]; $ (docker run --rm progrium/consul cmd: запустить $ PRIVATE_IP :: 10.0.0.113 :: client -d -it); докер запуска -d --name регистратор \ -v /var/run/docker.sock:/tmp/docker.sock \ -h $ HOSTNAME gliderlabs/регистратором Консул: // $ PRIVATE_IP: 8500 –

+0

Попробуйте HTTP : //docs.aws.amazon.com/AmazonECS/latest/developerguide/start_task_at_launch.html и https://aws.amazon.com/blogs/compute/running-an-amazon-ecs-task-on-every-instance / – PratapSingh

ответ

1

Создайте ELB перед вами серверы consul или эластичный IP, чтобы он не менялся.

Тогда в 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 

Примечание: этот фрагмент кода предполагает, что ваша установка все локально достижимым, и т.д. Это из cloudformations от this blog post и this link

1
  1. Создание задачи-определение с двумя контейнеры, консул-клиент и регистратор.
  2. aws ecs start-task в ваших пользовательских данных.

This AWS post основное внимание уделяется этому вопросу.

Редактировать: Поскольку вы упомянули экземпляр ECS, я предполагаю, что у вас уже есть необходимая роль IAM для экземпляра.