Instalando Cluster Kubernetes v1.28 Estimated reading: 8 minutes 99 views Isso é um alertaSe você está enfrentando dificuldades para criar um cluster com Kubeadm e Istio, este tutorial é para você.Recentemente, estava testando o Istio em um cluster Kubernetes com Ubuntu Server 24.4, Kubeadm v1.30 e Istio 1.23.0, mas encontrei diversos problemas. O que funcionou para mim foi utilizar o Ubuntu Server 20.4, Kubeadm v1.28 e Istio 1.23.0. Por isso, decidi compartilhar um passo a passo para que você consiga criar seu cluster com sucesso, usando Kubernetes e Istio de forma eficiente. Ubuntu Server 20.04 Kubeadm v1.28 Istio 1.23.0 Um host Linux compatível. O projeto Kubernetes fornece instruções genéricas para distribuições Linux baseadas em Debian e Red Hat, e aquelas distribuições sem um gerenciador de pacotes. 2 GB ou mais de RAM por máquina (menos que isso deixará pouco espaço para seus aplicativos). 2 CPUs ou mais. Conectividade de rede completa entre todas as máquinas no cluster (rede pública ou privada é suficiente). Nome de host exclusivo, endereço MAC e product_uuid para cada nó. Veja aqui para mais detalhes. Certas portas estão abertas em suas máquinas. Configuração de swap. O comportamento padrão de um kubelet era falhar ao iniciar se a memória swap fosse detectada em um nó. Veja Gerenciamento de memória swap para mais detalhes. Você DEVE desabilitar o swap se o kubelet não estiver configurado corretamente para usar o swap. Por exemplo, sudo swapoff -a desabilitará o swap temporariamente. Para tornar essa alteração persistente em reinicializações, certifique-se de que o swap esteja desabilitado em arquivos de configuração como /etc/fstab, systemd.swap, dependendo de como ele foi configurado no seu sistema. Configurando servidor É uma boa pratica você configurar o servidor certinho para trabalhar com o cluster kubernetes, seja para ambiente de produção ou teste, esta parte que vamos fazer se você não quiser não precisa seguir, mas é muito importante. É uma boa pratica você configurar o servidor certinho para trabalhar com o cluster kubernetes, seja para ambiente de produção ou teste, esta parte que vamos fazer se você não quiser não precisa seguir, mas é muito importante. No meu caso eu estou usando o ubuntu server 20.4, depois de instalado você precisa atualizar e instalar alguns pacotes, pode acontecer de você precisar pular para root porque somente com o comando abaixo não funciona. sudo apt update && apt upgrade -y 2. Deixando os IPs do servidor estático. sudo vim /etc/netplan/00-installer-config.yaml Copie a configuração abaixo para inserir dentro do /etc/netplan/00-installer-config.yaml, lembre-se que você precisa inserir o IP da sua rede! network: ethernets: ens18: addresses: - 192.168.0.10/24 nameservers: addresses: - 1.1.1.1 search: - uday.com.br routes: - to: default via: 192.168.0.1 version: 2 Aplique as configurações de redes sudo netplan apply 3. Se você não estiver um DNS configurado na sua rede, configure o hosts para que possamos configurar nossos hosts com nome. sudo vim /etc/hosts Copie somente a sessao onde esta escrito somente # DNS Cluster Kubernetes, lembre-se de configurar com os IPs da sua rede! 127.0.0.1 localhost 127.0.1.1 server # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters # DNS Cluster Kubernetes 192.168.0.10 k8s-master 192.168.0.11 k8s-node01 192.168.0.12 k8s-node02 Desabilitar o swap é uma boa prática ao configurar um cluster Kubernetes. Se o swap estiver habilitado durante a criação do cluster, você receberá um aviso sobre isso. sudo vim /etc/fstab Eu vou deixa aqui como geralmente vai esta no seu fstab, você precisa deletar somente a linha “/swap.img none swap sw 0 0” lembre que isso precisa ser feito em todos os servidores que vai fazer parte do cluster # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # # / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation /dev/disk/by-id/dm-uuid-LVM-Dl3oUzcbSMbzEg5H1UhrHbpFizTEg8EiOqFzBMeMYtsCkDb0JwjGNOVItPFz0UcJ / ext4 defaults 0 1 # /boot was on /dev/sda2 during curtin installation /dev/disk/by-uuid/2973236c-cfb3-4678-bf4b-1f7de7441eca /boot ext4 defaults 0 1 # Delete esta linha abaixo /swap.img none swap sw 0 0 Agora você precisa desabilitar o swap. swapoff -a Instalando o runtime de contêiner Instalando o Containerd sudo apt install containerd -y Encaminhando IPv4 e permitindo que o iptables veja o tráfego em ponte. cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # sysctl params required by setup, params persist across reboots cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # Apply sysctl params without reboot sudo sysctl --system Configurando o Containerd sudo mkdir -p /etc/containerd/ sudo vim /etc/containerd/config.toml Inserir dentro do arquivo config.toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true Reiniciar o serviço sudo systemctl restart containerd Você instalará estes pacotes em todas as suas máquinas: kubeadm: o comando para inicializar o cluster. kubelet: o componente que é executado em todas as máquinas do seu cluster e faz coisas como iniciar pods e contêineres. kubectl: o utilitário de linha de comando para se comunicar com seu cluster. O kubeadm não instalará ou gerenciará kubeletou kubectlpara você, então você precisará garantir que eles correspondam à versão do plano de controle do Kubernetes que você deseja que o kubeadm instale para você. Se você não fizer isso, há o risco de ocorrer uma distorção de versão que pode levar a um comportamento inesperado e com bugs. No entanto, uma distorção de versão menor entre o kubelet e o plano de controle é suportada, mas a versão do kubelet nunca pode exceder a versão do servidor da API. Por exemplo, o kubelet executando 1.7.0 deve ser totalmente compatível com um servidor da API 1.8.0, mas não vice-versa. Para obter informações sobre a instalação kubectl, consulte Instalar e configurar o kubectl . Estas instruções são para o Kubernetes 1.28. Atualize o índice do pacote apt e instale os pacotes necessários para usar o repositório apt do Kubernetes: sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gpg Baixe a chave de assinatura pública para os repositórios de pacotes Kubernetes. A mesma chave de assinatura é usada para todos os repositórios, portanto você pode desconsiderar a versão na URL: curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg Adicione o repositório apt apropriado do Kubernetes. Observe que este repositório possui pacotes apenas para Kubernetes 1.28; para outras versões secundárias do Kubernetes, você precisa alterar a versão secundária do Kubernetes no URL para corresponder à versão secundária desejada (você também deve verificar se está lendo a documentação da versão do Kubernetes que planeja instalar). sudo mkdir -p /etc/apt/keyrings echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list Atualize o índice do pacote apt, instale kubelet, kubeadm e kubectl e fixe suas versões: sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl Criando um cluster com kubeadm Você precisará executar este comando em um dos nós que foram configurados como master. sudo kubeadm init --apiserver-advertise-address=192.168.0.70 --pod-network-cidr=10.244.0.0/16 Lengenda do comando: –apiserver-advertise-address=192.168.0.70 = IP do seu master –pod-network-cidr=10.244.0.0/16 = CIDR dos Pods Após executar o comando acima, seu cluster será criado e você verá uma mensagem semelhante à seguinte: Pronto, agora você precisar executar os comandos para criar o diretório para acessar o kubernetes, muito parecido com que esta abaixo: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Depois voce precisa executar em todos os nodes o comando aparecido com que esta abaixo gerado na criação do cluster. kubeadm join 192.168.0.70:6443 --token jy52pe.dtalx3vj5ng3ty42 --discovery-token-ca-cert-hash sha256:204ee83468f45e71f26a41083092ed1e603220e1e66e1da4e5abab908e8996bb Networking and Network Policy Agora voce precisa criar a rede do kubernetes: kubectl apply -f https://reweave.azurewebsites.net/k8s/v1.29/net.yaml Verificando status do cluster kubectl get nodes Isso é um alertaNOTATodos os nodes precisam esta com o status Ready para que possamos começar a implmentar nossas aplicações no kubernetes. Pronto pessoa chegamos ao fim. É muito importante você deixa seu feedback para se gostou ou não para que possamos melhorar nossas documentações!