Descobrir o IP que o etcd está escutando
O endereço que o etcd está escutando pode ser encontrado em /run/systemd/system/etcd.service.d/20-cloudinit.conf
, então um truque é adicionar alguma configuração extra ao serviço etcd para que ele grave isso em um arquivo de ambiente que você possa usar em suas unidades do etcd.
Essa abordagem é útil quando seu cluster cresce a um ponto em que você deseja um cluster do etcd separado para os trabalhadores reais - então você só tem uma unidade global gravando o arquivo de ambiente para cada trabalhador.
Criando /etc/etcd.environment
Vamos supor que você esteja executando o etcd em cada máquina
Primeiramente, adicione alguma configuração extra à inicialização do serviço do etcd para criar um novo arquivo de ambiente contendo o endereço no qual o ETCD está escutando. Aqui está um fragmento bash que irá escrever a configuração necessária para você ...
cat << EOF > /run/systemd/system/etcd.service.d/30-environment.conf
[Service]
#write an environment file to use in other units
#see http://serverfault.com/a/741283/2411
ExecStartPost=/bin/bash -c "echo ETCD_ENDPOINT=\${ETCD_ADDR} > /etc/etcd.environment"
EOF
chmod 644 /run/systemd/system/etcd.service.d/30-environment.conf
Você pode reinicializar para que isso tenha efeito ou apenas recarregue assim ...
systemctl daemon-reload
systemctl restart etcd
Usando o /etc/etcd.environment em um arquivo de unidade
Você pode usar esse /etc/etcd.environment
nas descrições de sua unidade e passar o ETCD_ENDPOINT ao seu contêiner para vê-lo como uma variável de ambiente ...
[Service]
EnvironmentFile=/etc/etcd.environment
ExecStart=/usr/bin/docker run --rm \
-e ETCD_ENDPOINT=${ETCD_ENDPOINT} \
--name example \
ubuntu:15.10
Agora, seu contêiner pode usar isso para criar linhas de comando curl
ou, melhor ainda, copiar o binário etcdctl
no contêiner e usá-lo.