Configurando um Cluster Kubernetes em Alta Disponibilidade (4/5)
Published: 2020-06-11 20:02:31

Continuando o post [anterior](https://dev.to/silvio_silva/configurando-um-cluster-kubernetes-em-alta-disponibilidade-3-4p2a)

# Adicionando os outros `masters` ao Cluster

Agora que o `master-1` está pronto, podemos adicionar o `master-2` e o `master-3` ao `Control Plane` usando o comando `kubeadm join` com o parâmetro `--control-plane`.

Para montar o comando de join, precisaremos dos valores dos seguintes tokens gerados durante a inicialização do `master-1`:

* `token`
* `discovery-token-ca-cert-hash`
* `certificate-key`

Execute o comando abaixo para obter os valores dos tokens a partir do arquivo de log gerado durante a inicialização do `master-1`:

```shell
KUBEADM_LOG_FILE="${HOME}/kubeadm-init.log" && \
grep "\-\-certificate-key" "${KUBEADM_LOG_FILE}" --before 2 | grep \
  --only-matching \
  --extended-regexp "\-\-.*" | sed 's/\-\-control-plane //; s/^/  /'
```

A saída do comando anterior deve se parecer com isso:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/0joyqa4jal01zr2c51wi.png)

Você deve copiar as três últimas linhas como as que listei abaixo:

```shell
  --token wx6o8y.mdmkxmj9gfeiq1fe \
  --discovery-token-ca-cert-hash sha256:65446ecd54074326caff65fdbbac91118dd591593930eae0842f5ea2a72e2bdf \
  --certificate-key cfcf9ea9ee8adafd9210858fa8f344596888d1041ef96cce6125b4e960cd3e41
```

Monte o comando de join adicionando as 3 linhas copiadas anteriormente como no exemplo abaixo:

```shell
NODE_NAME=$(hostname --short) && \
LOCAL_IP_ADDRESS=$(grep ${NODE_NAME} /etc/hosts | head -1 | awk '{ print $1 }') && \
echo "" && \
echo "NODE_NAME..................: ${NODE_NAME}" && \
echo "LOCAL_IP_ADDRESS...........: ${LOCAL_IP_ADDRESS}" && \
sudo kubeadm join lb:6443 \
  --v 3 \
  --control-plane \
  --node-name "${NODE_NAME}" \
  --apiserver-advertise-address "${LOCAL_IP_ADDRESS}" \
  --token wx6o8y.mdmkxmj9gfeiq1fe \
  --discovery-token-ca-cert-hash sha256:65446ecd54074326caff65fdbbac91118dd591593930eae0842f5ea2a72e2bdf \
  --certificate-key cfcf9ea9ee8adafd9210858fa8f344596888d1041ef96cce6125b4e960cd3e41
```

## Executando o comando no `master-2`

Você deve mudar para o painel do `master-2` e pode fazer isso usando `C-b + seta-para-baixo + seta-para-direita` ou ativar o modo mouse com `C-b m` e simplesmente clicar no painel.

Tanto faz em qual `master` (`master-2` ou `master-3`) você executará o comando de `join` primeiro e inclusive pode executar no `master-3` enquanto ainda estiver executando no `master-2`.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/b3fftl88lfsckqgwmthy.png)

Novos `masters` adicionados e prontos:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/o56eabahrxgb0abyleyq.png)

### Nota sobre `etcd`

Durante o processo que deve levar menos de 1 minuto, você pode notar uma mensagem com a informação de que o `etcd leader` mudou.

Isso acontece porque nesta configuração o `etcd cluster` é criado nos mesmos `nodes` do `Control Plane`, isto é, usando os `masters` (configuração chamada de `stacked`).

O cluster `etcd` precisa de no mínimo 3 integrantes para que possa haver a "eleição" do líder.

Como novos integrantes desse cluster estão sendo incluídos é esperado que essa "eleição" ocorra.

Mais detalhes sobre a configuração do `etcd` em modo `stacked` podem ser encontradas [aqui](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology).

---
Próximo: [Adicionando os workers ao Cluster](https://dev.to/silvio_silva/configurando-um-cluster-kubernetes-em-alta-disponibilidade-5-k7c)