Skip to main content

Cluster Kubernetes

Instalação do Cluster Kubernetes
  • Instalação de Cluster K8s em 03 hosts.
  • Instalação de plugin CNI de rede.
  • Instalação do MetalLB (Load Balancer)


Topologia do Laboratório:

image.png

Configuração e instalação do laboratório

docker01.lab.local Master Node 10.0.2.101
docker02.lab.local Worker01 10.0.2.102
docker03.lab.local Worker02 10.0.2.103
Preparação do ambiente 

Antes de iniciarmos o Laboratório, precisamos garantir que as VMs estarão 'zeradas'. 

No VirtualBox:

  1. Remova as VMs Docker02 e Docker03, caso elas existam.
    Você poderá escolher a opção "Apagar todos os arquivos". 

  2. Selecione a VM Docker01 e restaure o snapshot para a posição "Original".
    Desmarque a opção "criar um snapshot do estado atual da máquina". 

  3. Faça o clone da VM Docker01 para Docker02 e Docker03.
    Caso tenha dúvida, o procedimento completo está descrito no LAB 01.3

EXECUTAR EM TODAS AS VMs 

Os procedimentos a seguir deverão ser executados nos três hosts: docker01, docker02 e docker03.

Adicionar as entradas FQDN no arquivo de hosts:

tee /etc/hosts <<EOF
127.0.0.1 localhost
10.0.2.101   docker01.lab.local docker01
10.0.2.102   docker02.lab.local docker02
10.0.2.103   docker03.lab.local docker03
EOF

Desabilitar SWAP:

swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

Carregar os módulos do kernel que serão necessários:

tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

Configurar parâmetros no kernel, necessários para o Kubernetes:

tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512
EOF 
  • Faça o Reload, para carregar as configurações acima:
sysctl --system

Instalar o containerd run time:

apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y containerd.io
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd
systemctl status containerd

Adicionar Repositório do Kubernetes:

  • Adicionar chaves publicas do google cloud
curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
  • Adicionar ao repositório (apt) o kubernetes:
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

Instalar (kubelet, kubeadm e kubectl):

apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
Inicializar o cluster Kubernetes

Docker01

Os procedimentos a seguir deverão ser executados no host: docker01 (Master Node)

Inicializar o cluster Kubernetes usando o comando Kubeadm:

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --control-plane-endpoint=docker01.lab.local

image.png

Se tudo deu certo, você receberá a mensagem acima.
Copie o comando com todos os parâmetros: kubeadm join .... ele será usado para ingressar os demais nodes ao cluster.

  • Como estamos usando o 'root', execute o comando abaixo.
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.zshrc
  • Verificar se os componentes estão 'rodando':

Pode ser necessário aguardar alguns segundos até todos os containers serem inicializados. Tentar algumas vezes os próximos comandos.

kubectl cluster-info
kubectl get nodes
kubectl get pods -A

image.png

Nota: O status do cluster ainda está "NotReady". Precisamos, por fim, instalar o plugin CNI (container network interface) que fara a orquestração de rede no segmento dos Pods. 

Ingressar os demais nós ao cluster

Docker02 e Docker03

Os procedimentos a seguir deverão ser executados apenas nos hosts: docker02 e Docker03

Colar nos hosts workers a linha do join, que foi informada logo após a execução do comando kubeadm init:

Exemplo:

kubeadm join docker01.lab.local:6443 --token t42p9k.zjez6kjg62viul40 \ 

    --discovery-token-ca-cert-hash sha256:189cadfbde7ce79851c3cb3956c8206ce0a1c07a147f2e8700475b68f84e8192

  • Caso o o aluno não tenha anotado a linha do comando join, execute no nó master o seguinte comando:
    kubeadm token create --print-join-command
Instalação do Plug-in de rede.

Nota: Consulte a documentação oficial do kubernetes para obter a lista dos plugins de rede que poderão ser utilizados:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ 

Docker01

  • Os procedimentos a seguir deverá ser executado no host: docker01 (Master Node)

Instalando o plug-in de rede flannel:

Nota: Em nosso laboratório utilizaremos o plugin flannel. Além da documentação oficial do flannel, um material didático resumido pode ser visto no site: https://mvallim.github.io/kubernetes-under-the-hood/documentation/kube-flannel.html 

    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    kubectl get nodes
    kubectl get pods -A

    image.png

    kubectl get namespaces