DEV Community

Silvio Silva
Silvio Silva

Posted on • Edited on

Configurando um Cluster Kubernetes em Alta Disponibilidade (2/5)

Continuando o post anterior.

Preparando as Máquinas Virtuais

Neste ponto, optei por usar o TMUX para executar os comandos um a um nas máquinas pois acho que faz parte do processo de perceber o que está sendo feito nelas.

É perfeitamente possível e recomendável automatizar esse tipo de processo usando ferramentas como Terraform ou Ansible mas lembre-se que o objetivo aqui é ter uma melhor visão do todo.

Usando o TMUX para acessar várias máquinas ao mesmo tempo

Para ajudar na criação de uma janela para cada máquina, sugiro que você baixe e configure este script em um diretório no seu path.

Copie o script ktx em sua máquina em um diretório que esteja incluído na variável de ambiente PATH.

A partir do diretório kubernetes/install/kubeadm/vagrant/, execute o script para abrir o TMUX e criar várias janelas divididas em painés, um painel para cada máquina virtual.

ktx

O TMUX iniciará uma sessão chamada "k8s" e criará 4 janelas:

  • 0-bash
  • 1-masters
  • 2-workers
  • 3-all (janela ativa)

Essas janelas estarão sincronizadas, isto é, o que for digitado em uma será repetido nas demais permitindo executar os próximos comandos em paralelo nas seis máquinas (masters e workers).

Alt Text

Pressione ENTER para conectar nas 6 máquinas virtuais.

Em alguns segundos a sua tela deve estar parecida com a imagem abaixo.

Alt Text

Pressione CTRL+l (L minúsculo) para limpar os terminais para que você possa ter uma visualização melhor.

Teste a Conectividade das máquinas com o Load Balancer (lb) na porta 6443

nc -d lb 6443 && echo "OK" || echo "FAIL"

A sua tela deve se parecer com a da imagem abaixo exibindo um "OK" como resultado do comando.

Alt Text

Pressione CTRL+l (L minúsculo).

Verifique se a rota para 10.96.0.0 foi configurada

route -n | grep --quiet "10.96.0.0" && echo "OK" || echo "FAIL"

A saída do comando deve exibir um "OK". Pressione CTRL+l novamente.

Alt Text

Atualize os pacotes do sistema e adicione a chave GPG do Google

sudo apt-get update | grep --invert-match --extended-regexp "^Hit|^Get" && \

sudo curl --silent "https://packages.cloud.google.com/apt/doc/apt-key.gpg" | sudo apt-key add -

A saída do comando deve se parecer com a imagem abaixo com um "OK" no final.

Alt Text

Pressione CTRL+l novamente (sugiro fazer isso após executar cada comando).

Adicione o Repositório do Kubernetes e atualize a lista de pacotes

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update | grep --invert-match --extended-regexp "^Hit|^Get"

O resultado deve ser:

Alt Text

Defina a versão do Kubernetes que deseja instalar

Algumas variáveis de ambiente serão atualizadas com formatos diferentes da versão mais recente encontrada no repositório adicionado no passo anterior.

KUBERNETES_DESIRED_VERSION='1.18' && \
KUBERNETES_VERSION="$(sudo apt-cache madison kubeadm | grep ${KUBERNETES_DESIRED_VERSION} | head -1 | awk '{ print $3 }')" && \
KUBERNETES_BASE_VERSION="${KUBERNETES_VERSION%-*}" && \
echo "" && \
echo "KUBERNETES_DESIRED_VERSION.: ${KUBERNETES_DESIRED_VERSION}" && \
echo "KUBERNETES_VERSION.........: ${KUBERNETES_VERSION}" && \
echo "KUBERNETES_BASE_VERSION....: ${KUBERNETES_BASE_VERSION}" && \
echo ""

Os três diferentes formatos devem ser exibidos dessa forma:

Alt Text

Instale em todos o kubeadm e o kubelet e somente o kubectl nos masters

SECONDS=0 && \
if grep --quiet "master" <<< $(hostname --short); then
  sudo apt-get install --yes \
    kubeadm="${KUBERNETES_VERSION}" \
    kubelet="${KUBERNETES_VERSION}" \
    kubectl="${KUBERNETES_VERSION}" && \
  sudo apt-mark hold \
    kubelet \
    kubeadm \
    kubectl
else
  sudo apt-get install --yes \
    kubeadm="${KUBERNETES_VERSION}" \
    kubelet="${KUBERNETES_VERSION}" && \
  sudo apt-mark hold \
    kubelet \
    kubeadm
fi && \
printf '%d hour %d minute %d seconds\n' $((${SECONDS}/3600)) $((${SECONDS}%3600/60)) $((${SECONDS}%60))

A instalação deve demorar menos de 1 minuto:

Alt Text

Agora que o utilitário crictl também foi instalado no passo anterior, configure o containerd e teste se consegue listar as imagens (neste momento a lista estará vazia)

sudo crictl config \
  runtime-endpoint unix:///var/run/containerd/containerd.sock \
  image-endpoint   unix:///var/run/containerd/containerd.sock && \
sudo crictl images

A lista de imagens estará vazia mas indica que o Container Runtime (containerd) está funcionando:

Alt Text

Faça o preloading das imagens para acelerar o tempo no momento em que formos configurar o Control Plane nos masters e adicionar os workers no cluster

SECONDS=0 && \
if grep --quiet "master" <<< $(hostname --short); then
  sudo kubeadm config images pull
else
  sudo crictl pull "k8s.gcr.io/kube-proxy:v${KUBERNETES_BASE_VERSION}"
fi
sudo crictl pull docker.io/weaveworks/weave-kube:2.6.4
sudo crictl pull docker.io/weaveworks/weave-npc:2.6.4
printf '%d hour %d minute %d seconds\n' $((${SECONDS}/3600)) $((${SECONDS}%3600/60)) $((${SECONDS}%60))

O processo deve levar um pouco mais de 1 minuto:

Alt Text

Liste as imagens que foram baixadas

sudo cricrtl images

Serão exibidas imagens diferentes nos masters e nos workers:

Alt Text

Deste ponto em diante, as máquinas virtuais serão configuradas separadamente.

Você pode fechar a janela 3-all do TMUX pressionando CTRL+d duas vezes (a primeira para desconectar das máquinas virtuais e a segunda para sair dos 6 terminais abertos na janela "all" o que, consequentemente, fechará essa janela).

Para mudar para a janela 1-masters, você deve pressionar CTRL+b e em seguida pressionar 1 (o número de identificação da janela).

Essa notação no TMUX é representada assim: C-b 1

Você também pode digitar exit e pressionar ENTER e repetir essa ação para fechar os painéis e a janela 3-all.

Na imagem abaixo são mostrados os painéis após digitar a primeira sequência:

Alt Text


Próximo: Instalando o Control Plane no primeiro Master

Top comments (0)