DEV Community

Silvio Silva
Silvio Silva

Posted on • Edited on

1

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

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs