DEV Community

Silvio Silva
Silvio Silva

Posted on

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

Continuando o post anterior

Instalando o Control Plane no primeiro Master

Ao mudar para a janela 1-masters o comando ./conn.sh deve estar pronto para ser executado. Faça isso pressionando ENTER.

Alt Text

Configure o auto completion para o kubectl

cat <<EOF | tee --append ~/.bashrc

source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k
EOF
source ~/.bashrc

Além de configurar o completion, o comando anterior também criou um alias que permite usar apenas k ao invés de kubectl.

Alt Text

Atenção: deste ponto em diante, você deve realizar a configuração apenas no primeiro master

Para isso, você precisa desativar a sincronização de janelas no TMUX.

A configuração que usei consiste na combinação C-b y. Caso queira usar a mesma combinação de teclas, sugiro criar o arquivo ${HOME}/.tmux.conf exatamente como criei aqui.

Você também pode pressionar C-b (CTRL+b) e digitar o comando abaixo (incluindo os dois pontos no início da linha) para desativar a sincronização dos painéis:

:set-window-option synchronize-panes off

Tenha certeza de que os painéis não estão mais sincronizados (digite algo no terminal ou pressione ENTER algumas vezes para ter certeza):

Alt Text

Configurando a versão do Kubernetes

Neste exemplo você pode manter a versão 1.18 mas este processo também foi testado com sucesso na 1.17.

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%-*}" && \
LOCAL_IP_ADDRESS=$(grep $(hostname --short) /etc/hosts | awk '{ print $1 }') && \
LOAD_BALANCER_PORT='6443' && \
LOAD_BALANCER_NAME='lb' && \
CONTROL_PLANE_ENDPOINT="${LOAD_BALANCER_NAME}:${LOAD_BALANCER_PORT}" && \
echo "" && \
echo "LOCAL_IP_ADDRESS...........: ${LOCAL_IP_ADDRESS}" && \
echo "CONTROL_PLANE_ENDPOINT.....: ${CONTROL_PLANE_ENDPOINT}" && \
echo "KUBERNETES_BASE_VERSION....: ${KUBERNETES_BASE_VERSION}" && \
echo ""

Três informações serão exibidas:

  • O endereço IP da máquina (192.168.10.11)
  • O Control Plane Endpoint (lb:6443 - endereço que será usado por todos os nodes para comunicação com o Control Plane)
  • A versão mais recente encontrada no repositório

Observe a imagem abaixo:

Alt Text

Inicializando o Control Plane

SECONDS=0 && \
KUBEADM_LOG_FILE="${HOME}/kubeadm-init.log" && \
NODE_NAME=$(hostname --short) && \
sudo kubeadm init \
  --v 3 \
  --node-name "${NODE_NAME}" \
  --apiserver-advertise-address "${LOCAL_IP_ADDRESS}" \
  --kubernetes-version "${KUBERNETES_BASE_VERSION}" \
  --control-plane-endpoint "${CONTROL_PLANE_ENDPOINT}" \
  --upload-certs | tee "${KUBEADM_LOG_FILE}" && \
printf '%d hour %d minute %d seconds\n' $((${SECONDS}/3600)) $((${SECONDS}%3600/60)) $((${SECONDS}%60))

Esse processo não deve levar mais que 1 minuto pois já havíamos efetuado o preloading das imagens usadas por ele.

Ao término da execução você deve visualizar as seguintes informações no terminal:

Alt Text

Você deve configurar o acesso do kubectl ao cluster recém criado

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Verificando o Status do Cluster

Neste momento, o Control Plane está ativo porém, o único nó do cluster é o master-1 e ele está como NotReady.

Isso acontece porque ainda não instalamos o plugin de CNI (Container Network Interface) para habilitar a POD Network que é a rede que permite a comunicação entre as PODs no Cluster.

Para entender melhor, vamos deixar executando um comando que vai exibir os nós e alguns objetos que já foram criados no namespace kube-system usando o comando abaixo:

watch -n 3 'kubectl get nodes,pods,services -o wide -n kube-system'

Observe o status do master-1:

Alt Text

Perceba também que as duas PODs do coredns estão com o status Pending e continuarão assim até que seja instalado um plugin CNI.

Como esse ambiente destina-se ao aprendizado de Kubernetes e temos uma limitação considerável de memória, usaremos o Plugin Weave.

Você pode encontrar uma lista de plugins e suas instruções de instalação aqui.

Antes de executar o comando para instalar o plugin Weave, criarei um novo painel no TMUX para executar os comandos e manter o monitoramento do passo anterior na tela.

Optei por fazer isso para que você possa perceber quando:

  • O master-1 mudar de NotReady para Ready
  • As novas PODs para o agente Weave forem criadas, e
  • As PODs do coredns mudarem para Running.

Para criar um novo painel no TMUX (considerando que você está usando a mesma configuração que eu no arquivo ${HOME}/.tmux.conf), use o comando C-b ".

O painel do master-1 será então dividido em dois:

Alt Text

Você pode ajustar os tamanhos dos painéis usando o mouse.

Para habilitar isso, pode usar o comando C-b m (esse comando ativa ou desativa o modo mouse).

Veja como reduzi o tamanho dos painéis inferiores:

Alt Text

No novo painel, precisamos conectar ao master-1 usando ssh. Para isso usaremos a função nativa do Vagrant:

vagrant ssh master-1

Nova conexão ao master-1 realizada:

Alt Text

Agora execute o comando para instalar o plugin Weave Net para a Pod Network.

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

Após executar o comando anterior você verá um log de alguns objetos criados e no painel superior poderá acompanhar a atualização das PODs e do status do master-1.

Alt Text

Após alguns segundos, verifique que as atualizações mencionadas anteriormente aconteceram:

Alt Text


Próximo: Adicionando os outros masters ao Cluster

Top comments (0)