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:rio
Máquinas Virtuais:
- Sistema Operacional: Red Hat Enterprise Linux release 9.4
- Processador: 4vCPU
- Memória: 4GB
- Armazenamento: 50GB SSD
Configuração e instalação do laboratórioEndereçamento:
Master Node | 10. |
|
Worker01 | 10. |
|
Worker02 | 10. |
PreparaçãoProcedimentos docomuns ambiente(todas VMs)
Antes de iniciarmos o Laboratório, precisamos garantir que as VMs estarão 'zeradas'.
No VirtualBox:
Remova as VMsDocker02eDocker03, caso elas existam.Você poderá escolher a opção "Apagar todos os arquivos".Selecione a VMDocker01e restaure o snapshot para a posição "Original".Desmarque a opção "criar um snapshot do estado atual da máquina".Faça ocloneda VM Docker01 para Docker02 e Docker03.Caso tenha dúvida, o procedimento completo está descrito noLAB 01.3.
EXECUTAR EM TODAS AS VMs
Os procedimentos a seguir deverão ser executados nos três hosts: docker01k8s-infra-01, docker02k8s-infra-02 e docker03k8s-infra-03.
Adicionar as entradas FQDN no arquivo de hosts:
tee /etc/hosts <<EOF
127.0.0.1 localhost
10.0.2.1019.66.141 docker01.k8s-infra-01.lab.local docker01k8s-infra-01
10.0.2.1029.66.142 docker02.k8s-infra-02.lab.local docker02k8s-infra-02
10.0.2.1039.66.143 docker03.k8s-infra-03.lab.local docker03k8s-infra-03
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
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
overlay
br_netfilter
EOF
modprobe overlaybr_netfilter
modprobe br_netfilterip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe overlay
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
Desabilitar o Selinux e Firewall
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
Instalar e iniciar o containerdcontainer.d run time:runtime:
aptdnf installconfig-manager -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
mkdir -p /etc/apt/keyrings
curl -fsSLadd-repo 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/nullcentos/docker-ce.repo
apt update
apt installdnf -y install 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
curlcat -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"<<EOF | sudo tee /etc/apt/sources.list.yum.repos.d/kubernetes.listrepo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
Instalar (kubelet, kubeadm e kubectl):
apt-get update
apt-getdnf install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl--disableexcludes=kubernetes
systemctl enable --now kubelet.service
systemctl enable --now kubelet.service
InicializarNode oMaster cluster Kubernetes(k8s-infra-01)
Docker01
Os procedimentos a seguir deverão ser executados no host: docker01k8s-infra-01 (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.k8s-infra-01.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