Criar cluster kubernetes multi-master
- 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
#disabled_plugins = ["cri"]

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