DEV Community

Cover image for Configurando um Cluster Kubernetes em Alta Disponibilidade (1/5)
Silvio Silva
Silvio Silva

Posted on • Edited on

1 2

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

Resumo

Seguir os passos aqui descritos me ajudou a entender melhor como um Cluster Kubernetes funciona e a testar aspectos que só fazem sentido em um ambiente com vários servidores.

Fique à vontade para entrar em contato comigo e esclarecer qualquer dúvida, vamos continuar aprendendo juntos!

No entanto, acho importante enfatizar que o Cluster criado aqui tem como finalidade somente o aprendizado e não deve ser usado em ambientes de produção.

Dito isso, mãos à obra!


Seguindo este e os próximos posts você conseguirá:

Provisionar 8 máquinas virtuais:

Caso queira mudar o número de máquinas, a quantidade de memória, a faixa de endereços IP (192.168.10.0/26) assim como o domínio example.com, altere os valores no arquivo Vagrantfile. Os scripts que criam os servidores DNS e o Load Balancer HAProxy buscam essas informações de lá.

Máquina RAM IP
dns 512 MB 192.168.10.2
loadbalancer 512 MB 192.168.10.10
master-1 2 GB 192.168.10.11
master-2 2 GB 192.168.10.12
master-3 2 GB 192.168.10.13
worker-1 2 GB 192.168.10.21
worker-2 2 GB 192.168.10.22
worker-3 2 GB 192.168.10.23

*Sites como Spiceworks Subnet Calculator ajudam a entender melhor como funciona o dimensionamento de sub nets (CIDR - Classless Inter-Domain Routing).

Dica: digite 192.168.10.0/26 no campo "First Address or CIDR" e clique em "Generate". No campo "Last Address" você verá o último endereço dessa faixa de IP.

Configurar as Máquinas com os Pré-requisitos

  • Instalar o Ubuntu 18.04
  • Desativar o Swap
  • Configurar parâmetros de DNS
  • Configurar IP Fixo (usando netplan)
  • Configurar Rota para o Services (10.96.0.0/8)
  • Configurar Host Name com FQDN (ex: dns.example.com)
  • Instalar o containerd 1.2.13 como Container Runtime (CRI)

*Vale ressaltar que é possível usar outros Containers Runtimes como o Docker por exemplo como descrito na documentação aqui.

Porém, o Docker já usa o containerd e o Kubernetes já possui as features de network e storage que o Docker instala também e que não serão utilizadas.

A Ana Calin explica muito bem neste vídeo (em inglês sem legendas) a experiência de migrar de Docker para containerd e as motivações.

Assim, usar o containerd faz com que a nossa instalação seja mais "leve".

O containerd também é usado no projeto Moby (Moby Project) mantido pela Docker e o Moby é usado na Azure, ou seja, em última instância, clusters Kubernetes rodando na Azure (AKS) usam o containerd como Container Runtime.

Preparar os Nodes

Item Ação Masters Workers
kubeadm Instalar Sim Sim
kubelet Instalar Sim Sim
kubectl Instalar Sim Opcional
api-server Pull Sim Não
controller-manager Pull Sim Não
coredns Pull Sim Opcional
etcd Pull Sim Não
scheduler Pull Sim Não
kube-proxy Pull Sim Sim
pause Pull Sim Sim
weave-kube Pull Opcional Opcional
weave-npc Pull Opcional Opcional

Do que você vai precisar

  • Host Linux (usei um notebook com Ubuntu 20.04 e 16GB de RAM)
  • Virtualbox 6.1
  • Vagrant 2.2.9
  • Git
  • TMUX (Opcional mas muito útil)

Provisionando as Máquinas Virtuais

Clone e acesse o Repositório

git clone git@github.com:smsilva/kubernetes.git

cd kubernetes/install/kubeadm/vagrant

Verifique o Status das Máquinas Virtuais

vagrant status

Resultado esperado:

Current machine states:

dns                       not created (virtualbox)
loadbalancer              not created (virtualbox)
master-1                  not created (virtualbox)
master-2                  not created (virtualbox)
master-3                  not created (virtualbox)
worker-1                  not created (virtualbox)
worker-2                  not created (virtualbox)
worker-3                  not created (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

Crie as máquinas virtuais

./provision.sh

O processo de provisionamento deve levar em torno de 10 minutos (dependendo da velocidade da sua conexão) para criar as 8 máquinas virtuais e nesse processo está incluída a configuração dos servidores DNS e HAProxy Load Balancer.

Caso queira mais detalhes sobre o provisionamento, ele é feito através da execução de scripts que estão disponíveis no diretório kubernetes/install/kubeadm/vagrant/ubuntu/.

Cada escript é chamado no momento do provisionamento das máquinas e essas chamadas são coordenadas no arquivo kubernetes/install/kubeadm/vagrant/Vagrantfile.

Verifique novamente o status após a conclusão do processo de provisionamento.

vagrant status

Resultado esperado:

Current machine states:

dns                       running (virtualbox)
loadbalancer              running (virtualbox)
master-1                  running (virtualbox)
master-2                  running (virtualbox)
master-3                  running (virtualbox)
worker-1                  running (virtualbox)
worker-2                  running (virtualbox)
worker-3                  running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.


Próximo passo: Preparando as Máquinas Virtuais

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay