Instalando Cluster Kubernetes v1.28
Se 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 <
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á kubelet
ou kubectl
para 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).
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 voce precisar executar os comandos para criar o diretorio 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
NOTA
Todos os nodes precisam esta com o status Ready para que possamos começar a implmentar nossas aplicações no kubernetes.