top of page

Criar cluster kubernetes multi-master

  • Foto do escritor: fernando freitas do vale
    fernando freitas do vale
  • 23 de out. de 2022
  • 3 min de leitura

Atualizado: 25 de out. de 2022


Fala pessoal, hoje vamos criar um cluster k8s com HA de master node.


Para realizarmos o LAB tenho o seguinte


- 2 servidores ubuntu 20.04 para masters nodes

- 2 servidores ubuntu 20.04 para workers nodes

- 1 servidor ubuntu para Load Balancer com HA Proxy


Existem 2 cenários em de HA, 1 com o etcd junto com o Master Node chamado Stacked Etcd e um em que o etcd fica isolado em um servidor próprio chamado External Etcd Topology, nesse caso vamos com o primeiro cenário.


Primeiro passo será com a criação de HA-Proxy:


No servidor destinado ao Load Balancer digite o seguinte comando:



apt-get install -y haproxy



Depois de instalado vamos em:



vim /etc/haproxy/haproxy.cfg

No final do arquivo adicione:



frontend kubernetes
        mode tcp
        bind 10.0.0.8:6443
        option tcplog
        default_backend masters

backend masters
        mode tcp
        balance roundrobin
        option tcp-check
        server master-1 10.0.0.4:6443 check fall 3 rise 2
        server master-2 10.0.0.5:6443 check fall 3 rise 2

Bind: Pode ser um Ip virtual ou ip do HA proxy já que não possuímos Load Balancer do HA Proxy

Default_Backend: nome da configuração de backend que contem os servidores

Balance: algoritmo para realizar o balanceamento, existem outras configurações na documentação.

Server: ip interno dos servers masters mais a configuração de verificação de health, no caso 3 checks para down e 2 para up.



Em seguida executar o comando:


systemctl restart haproxy

Se retornar algum erro executar o comando, ele realiza um check no arquivo de configuração:


haproxy -f /etc/haproxy/haproxy.cfg -c

Realizada a configuração do HA Proxy, vamos instalar o kubernetes em nossos master nodes. Antes é preciso instalar o runtime que é o docker.


curl -fsSL https://get.docker.com | bash



Agora vamos intalar os kubernets é importante rodar o comando fora do usuário root utilizando o sudo:


sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl



Agora vamos adicionar o nome do HAPROXY nos hosts dos masters:


sudo vim /etc/hosts

Adicionar:


10.0.0.8 k8s-haproxy



Agora vamos desabilitar o swap que é pré requisito do kubernets:


sudo swapoff –a

Altere o seguinte arquivo:


sudo vim /etc/containerd/config.toml

Comente a linha



Agora reiniciar o Containerd:


sudo systemctl restart containerd

Agora vamos configurar o HA do Kubeadm:


Esse comando é rodado somente no primeiro master node, nos demais serão adicionados conforme o comando de join do kubernets

sudo kubeadm init --control-plane-endpoint "k8s-haproxy:6443" --upload-certs

Salve os outputs de kubeadm join para o cluster e para os nodes.


Em seguida rode os seguintes comandos:


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

Agora o comando para o network:


kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

Agora vamos verificar os nodes:


kubectl get nodes


Agora vamos no outro master node e executar o comando salvo do output:


sudo kubeadm join k8s-haproxy:6443 --token cq3paz.qrhg3li5tnrof619 --discovery-token-ca-cert-hash sha256:05c0458740d4a5e962929d33da0fdee7d086b3d1234e045875e4f7b2ad54c159 --control-plane --certificate-key d58ef27d673a67803ef751799d5856f11300844117a343902fdf70e29169c116

Caso não tenha salvo esse comando execute:


kubeadm init phase upload-certs --upload-certs

Salve o ID do certificado gerado e execute:


kubeadm token create --print-join-command --certificate-key 'IDAnterior'


Execute no novo master:

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

Agora para conferir execute:


kubectl get nodes


Agora vamos trabalhar nos 2 workers


Repita os passos até a edição do arquivo config.toml para:


 #disabled_plugins = ["cri"] e restart do Cointainerd

Caso encontre o seguinte problema:


W: GPG error: https://packages.cloud.google.com/apt kubernetes-xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB

Rode o seguinte comando, alterar a key conforme aparecer:


apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B57C5C2836F4BEB

Caso não tenha salvo o comando de join dos workers, rode o seguinte comando no master:

kubeadm token create --print-join-command

Output


kubeadm join k8s-haproxy:6443 --token g019yw.yqp6r7qa3e7ynq9a --discovery-token-ca-cert-hash sha256:05c0458740d4a5e962929d33da0fdee7d086b3d1234e045875e4f7b2ad54c159

Rode o comando nos workers que deseja adicionar.


kubectl get nodes



Espero que tenham gostado.


Enjoy!!




 
 
 

Comments


bottom of page