'

Tudo sobre PaaS

Kubeadm Multi Master

Kubeadm

Se você está planejando implantar um cluster Kubernetes utilizando o kubeadm e a configuração de multi-master, juntamente com um HAProxy servindo como balanceador de carga, você está no caminho certo para garantir alta disponibilidade e escalabilidade para a sua infraestrutura.

O processo de instalação e configuração de um cluster Kubernetes dessa natureza requer atenção aos detalhes, mas os benefícios são inegáveis. Com a configuração multi-master, você terá uma maior tolerância a falhas, permitindo que o cluster mantenha a operação normal mesmo se um dos mestres apresentar algum problema.

Além disso, a inclusão do HAProxy como balanceador de carga garante a distribuição uniforme das requisições entre os nós mestres, otimizando o desempenho e a resiliência do cluster. Essa abordagem inteligente permite que o tráfego seja gerenciado de forma eficaz, evitando gargalos e garantindo uma experiência confiável para seus usuários.

Portanto, siga em frente com a instalação desse cluster Kubernetes robusto e confiável. Com a configuração multi-master e o HAProxy como balanceador de carga, você estará implementando as melhores práticas e garantindo uma base sólida para suas aplicações, permitindo que você desfrute dos benefícios da alta disponibilidade e escalabilidade em seu ambiente Kubernetes.

Instancias EC2

Para subir as instancias é necessário criar o par de chave rsa com ssh-keygen conforme demonstrando abaixo. O nome utilizado neste exemplo é ck-prod para a chave privada e ck-prod.pub para chave publica. Caso deseje alterar será necessário editar o arquivo das variáveis do Terraform em ec2/curso/main.tf. Procures por chave e altere o valor.

Repositório do projeto

Volte a raiz do repositório copiado do git no passo anterior, caso não tenha o repositório local faça o clone novametne e crie a branch do curso.

 git clone https://github.com/marconesns/modulo_k8s_I.git
 cd modulo_k8s_I/
 git checkout -b curso

Criando a chave

 cd terraform_k8s_multimaster
 ssh-keygen -f ec2/curso/ck-prod -t rsa -N ""

Criando as instancias

Antes de criar suas instâncias usando o Terraform, é essencial que você carregue os módulos necessários. Felizmente, esse processo é simples e direto. Tudo o que você precisa fazer é executar o comando init dentro do diretório ec2/curso. Essa etapa é fundamental para garantir que todas as dependências e recursos necessários sejam carregados corretamente.

Ao executar o comando init, o Terraform realizará a inicialização do ambiente, identificando e configurando todas as configurações e módulos necessários para a criação das suas instâncias. É uma etapa crucial para garantir que seu ambiente Terraform esteja pronto e funcionando adequadamente, além de garantir que todas as dependências sejam atendidas.

Ao seguir esse procedimento, você estará configurando seu ambiente com eficiência e preparando-o para a criação das instâncias desejadas. Certifique-se de executar o comando init no diretório correto, ec2/curso, para garantir que você esteja carregando e configurando os módulos relevantes para a sua aplicação.

Portanto, prepare-se para criar suas instâncias com confiança. Executar o comando init é o primeiro passo para garantir que você tenha tudo pronto e no lugar certo antes de dar continuidade à criação do seu ambiente no Terraform.

 terraform init

Apos este procedimento, você deverá executar um plan e identificar se existe alguma pendência.

 terraform plan

Pronto agora é possível criar as instancia executando um apply e respondendo yes para prosseguir. Ou caso esteja ciente de que vai aprovar, poderá adicionar a opção –auto-approve.

 terraform apply

Este procedimento criará varias instancias ec2 sendo haproxymaster e workers de acordo como valor definido no campo count do arquivo infra/main.tf. Ao final tem uma instrução output que mostrará os IPs públicos dados a cada instancia. Esses endereços serão usados para acesso remoto as instancias via ssh.

Para visualizar o output novamente, basta digitar o comando a seguir.

 terraform output

Configuração do Haproxy

Configuração do balanceamento de carga com HAProxy:

Uma etapa crucial para configurar um ambiente altamente disponível é instalar o HAProxy em um nó dedicado, que desempenhará o papel de balanceador de carga. Essa configuração permitirá que o HAProxy encaminhe o tráfego de entrada de forma eficiente para os nós do cluster, garantindo uma distribuição equitativa das solicitações.

Para começar, você precisará instalar o pacote do HAProxy e, em seguida, fazer os ajustes necessários no arquivo de configuração. Isso permitirá que você defina os parâmetros desejados, como as regras de roteamento, monitoramento de estado dos nós e equilíbrio de carga, para garantir um fluxo suave de tráfego entre os nós do cluster.

Ao concluir essas etapas, você estará configurando seu ambiente de forma inteligente e eficiente, garantindo que o HAProxy esteja pronto para lidar com o tráfego intenso e garantir alta disponibilidade para suas aplicações.

Portanto, certifique-se de seguir esses passos importantes ao instalar o HAProxy em um nó separado e configurá-lo corretamente como seu balanceador de carga. Sua infraestrutura se beneficiará significativamente com essa implementação, garantindo uma distribuição equilibrada da carga e alta disponibilidade para as cargas de trabalho do cluster.

Acessando como root

sudo -i

Install LoadBalancer

 apt -y install haproxy
cat >> /etc/haproxy/haproxy.cfg <<EOF
frontend kubernetes-frontend
  bind *:6443
  mode tcp
  option tcplog
  default_backend kubernetes-backend
backend kubernetes-backend
  option httpchk GET /healthz
  http-check expect status 200
  mode tcp
  option ssl-hello-chk
  balance roundrobin
    server k8smaster1 <IP_privado do Master1>:6443 check fall 3 rise 2
    server k8smaster2 <IP_privado do Master2>:6443 check fall 3 rise 2

listen stats
  bind :32600
  stats enable
  stats uri /
  stats hide-version
  stats auth admin:123456
EOF
vim /etc/haproxy/haproxy.cfg

Inicie o serviço do HAproxy e ative para o Inicio junto com o sistema operacional.

systemctl enable haproxy
systemctl start haproxy

Configuração dos Pré-requisitos

Configuração dos nós do cluster

Prepare os nós do cluster, garantindo que eles atendam aos requisitos mínimos de hardware e software. Os procedimentos devem ser executado em todas as instancias que terão função no cluster, ou seja as Masters e Works.

Acessando como root

sudo -i

Desativando a Swap

sed -i '/swap/d' /etc/fstab
swapoff -a

Habilitando módulos do kernel no boot

cat <<EOF | sudo tee /etc/modules-load.d/crio.conf
overlay
br_netfilter
EOF

Habilitando módulos do kernel em tempo de execução.

modprobe overlay
modprobe br_netfilter

Módulos de trafego agregado.

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system

Instalação dos pacotes do Kubernetes

Criação dos arquivos de repos de acordo com a versão.

OS=xUbuntu_22.04
CRIO_VERSION=1.27
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -

Atualizando lista de pacotes disponíveis.

apt update

Instalação do Container Runtime

Instale o cri-o em todos os nós do cluster. Em seguida, instale as dependências do Kubernetes, como o kubelet e o kubeadm, também em todos os nós.

Instalação do cri-o e do Kubernetes:

apt install -y cri-o cri-o-runc

Habilitando o serviço para subir junto com sistema operacional.

systemctl enable crio.service
systemctl start crio.service
apt-get install -y apt-transport-https ca-certificates curl

Instalação do Kubeadm, kubelet e kubectl

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
 apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet

Inicialização do master:

Escolha um dos nós para ser o master e execute o comando “kubeadm init” nele. Siga as instruções fornecidas pelo comando para configurar corretamente o master e obter o comando de junção necessário para adicionar os nodes workers.

kubeadm config images pull
kubeadm init --control-plane-endpoint="<IP publico do HAproxy>:6443" --upload-certs --apiserver-advertise-address=<ip privado do master>

Ao termino desse comando será gerado uma saída semelhante a essa apresentado abaixo. São os procedimento para configuração de acesso pelo kubeconfig, juntando demais nodes Master e juntando nodes Works ao cluster. Basta copiar a linha e colar nos seus nodes conforme função no cluster.

Sunset

Instalando o complemento de rede dos Pods CNI

O Kubernetes requer uma solução especial de rede entre os nós master e os container chamada rede dos PODs.

Uma Interface de rede do contêiner é um complemento de rede dos pods baseado em CNI para que seus pods possam se comunicar uns com os outros. O Cluster DNS (CoreDNS) não será inicializado antes da instalação de uma rede.

E assim que a Rede dos POD for criada, estamos prontos para continuar fazendo com que os works se juntem ao nó master.

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

Adicição do node Master 2

Acesso o outro node Master e cole a linha gerada na saída do comando kubeadm init do Master 1.

kubeadm join 34.218.246.132:6443 --token td73wn.... \
	--discovery-token-ca-cert-hash sha256:01b5b4c.... \
	--control-plane --certificate-key c26f62ff....

Adição dos nodes workers:

Acesse cada um dos nodes workers e execute o comando de junção fornecido pelo comando “kubeadm init” no master. Isso fará com que os nodes workers se juntem ao cluster.

kubeadm join 34.218.246.132:6443 --token td73wn.8.... \
	--discovery-token-ca-cert-hash sha256:01b5b4c42...
O token tem validade de 24 horas, caso seja necessário adicionar outro node no futuro, é um novo token deverá ser gerado.

Verificação e teste do cluster

Verifique se os nós do cluster estão ativos e prontos para receber cargas de trabalho. Execute comandos como “kubectl get nodes” para listar os nós e “kubectl get pods –all-namespaces” para verificar se os pods estão em execução corretamente.

Implantação de aplicativos

Agora que o cluster está configurado e funcionando corretamente, você pode implantar seus aplicativos e serviços no cluster Kubernetes.

Adicionando Node no futuro

kubeadm token create

kubeadm token create

Criando linha de junção de nodes Works ao cluster.

kubeadm token create --print-join-command

Criando a linha de junção de node Master.

echo $(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | grep -vw -e certificate -e Namespace)

Outros

O Minikube, o Kind e o Docker Desktop são ferramentas que permitem executar um cluster Kubernetes localmente em um único nó. Eles são projetados para facilitar o desenvolvimento, testes e experimentação de aplicativos que são implantados em um ambiente Kubernetes. No Apêndice A, ao final deste guia, estão os passos para instalar esses ambientes.

Ansible

O Ansible é uma ferramenta de automação de TI que tem como finalidade principal simplificar e automatizar tarefas repetitivas de gerenciamento de infraestrutura, implantação de aplicativos e orquestração de processos.

Seguindo os passos de instalação de instancias ec2 visto no incio deste capitulo, o procedimento de criação do cluster utilizando o Ansible está descrito no Apêndice B, ao final deste guia.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *