Cluster Kubernetes (K8s)
Instalação de Cluster Kubernetes
- Instalar cluster com 03 nós usando o kubeadm
Atenção:
Este laboratório NÃO precisará ser executado. O objetivo é apenas demonstrar de forma resumida os passos que seriam necessários para se montar um cluster kubernetes pronto para produção.
Topologia do Laboratório:
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:
- Remova as VMs Docker02 e Docker03, caso elas existam.
Você poderá escolher a opção "Apagar todos os arquivos". - 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". - 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
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
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
kubectl get namespaces