Kubeadm no Ubuntu com WSL2 30 09 2024

Como Instalar o Kubeadm no WSL2 com Ubuntu

Ao trabalhar com orquestração de containers, o Kubernetes se destaca como uma ferramenta poderosa e essencial. Para os usuários do Windows que desejam explorar o Kubernetes sem sacrificar seu ambiente de trabalho rotineiro, a combinação de Kubeadm, Ubuntu e WSL2 oferece uma solução ótima e prática! Neste post vou trazer todo o processo de instalação e configuração do Kubeadm no Ubuntu, rodando dentro do WSL2 (Windows Subsystem for Linux 2).

Instalação

Para configurar o kubeadm em um Ubuntu rodando no WSL 2, você precisará seguir alguns passos específicos, conforme o processo abaixo:

  1. Atualize o sistema do Ubuntu:
sudo apt-get update && sudo apt-get upgrade -y
kubernetes kubeadm
  1. Instale as dependências necessárias:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
kubeadm windows
  1. Adicione a chave GPG do Kubernetes e o repositório:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
   echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Resultado:

kubeadm
  1. Atualize novamente e instale o kubeadm, kubelet e kubectl:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
  1. Desative a swap (o Kubernetes requer que a swap esteja desativada):
sudo swapoff -a
  1. Configure o Docker (se ainda não estiver instalado):
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
  1. Configure o cgroup driver do Docker para systemd:
    Crie ou edite o arquivo /etc/docker/daemon.json:
sudo nano /etc/docker/daemon.json

Adicione o seguinte conteúdo:

{
 "exec-opts": ["native.cgroupdriver=systemd"]
}

Reinicie o Docker:

sudo systemctl restart docker
  1. Inicie o cluster Kubernetes:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  1. Configure o kubectl para o usuário atual:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. Para que os pods possam se comunicar no cluster, você precisará configurar uma rede. Um dos provedores de rede mais utilizados é o Calico, que é bem simples e prático para iniciantes. Execute o comando abaixo para instalar o Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Observações importantes:

  • O WSL 2 não suporta nativamente systemd, usado pelo kubeadm. Você precisa configurar o suporte a SystemD ou então considerar usar uma máquina virtual completa com Linux emulado.
  • Você pode encontrar problemas com a rede devido às limitações do WSL 2. Pode ser necessário configurar encaminhamento de porta ou usar soluções alternativas de rede.
  • Para um ambiente de desenvolvimento, você pode considerar alternativas como Minikube ou Kind, que podem ser mais fáceis de configurar no WSL 2, ao invés do Kubeadm.

Se você encontrar problemas específicos durante a instalação, por favor, me informe para que eu possa ajudar a resolver!

Depois de ter seguido todos os passos acima, é esperada uma tela semelhante a esta ao executar o comando kubectl get pods -A no seu terminal:

kubectl kubeadm
kubeadm no wsl2

A instalação do Kubeadm no Ubuntu usando WSL2 oferece uma maneira poderosa e flexível de trabalhar com Kubernetes no Windows. Este ambiente combina o melhor dos dois mundos: a familiaridade do Windows com a potência do Linux e do Kubernetes.

Dicas e Boas Práticas

  • Certifique-se de que o WSL2 e o Ubuntu estejam atualizados antes de instalar o Kubeadm.
  • Use o comando kubeadm init para configurar o Kubeadm.
  • Use o comando kubectl get nodes para verificar se o cluster está funcionando corretamente.

Erros Comuns

  • Erro ao instalar o WSL2: Verifique se o Windows Subsystem for Linux 2 está habilitado no Gerenciador de Tarefas do Windows.
  • Erro ao instalar o Ubuntu: Verifique se o Ubuntu está instalado corretamente no WSL2.
  • Erro ao configurar o Kubeadm: Verifique se o Kubeadm está instalado corretamente e se o comando kubeadm init está sendo executado corretamente.

Problemas conhecidos

A principal diferença entre WSL1 e WSL2 é a versão do Microsoft Linux baseada em VM hyper-v, parece uma notícia empolgante, pelo menos ele está executando o kernel Linux completo, mas existem alguns problemas se usado para atividades DevOps/SRE.

Aqui estão alguns pontos problemáticos conhecidos:

  • o systemd padrão não está habilitado, o que é necessário para instalar pacotes
  • a rede padrão é NAT, sempre atribui IP dinâmico após a reinicialização, dará problemas para aplicativos como o servidor de API k8s

Além dos pontos trazidos acima, alguns casos podem ocorrer erros relacionados ao repositório onde está disponível o Kubeadm, como neste exemplo da imagem:

minikube kubeadm

Para obter detalhes sobre casos onde o seu laboratório demanda uma configuração de IP Fixo no WSL2 ou você deseja fazer uma instalação de forma mais automatizada, recomendo estes 2 materiais:

Ambos tratam de questões em torno do uso do Kubeadm no WSL2, porém são procedimentos recomendados para usuários mais avançados, visto que podem trazer problemas de difícil reversão ao seu ambiente.

Rede usando Cilium

Além do Calico, outra opção popular para redes de pods é o Cilium.

O Cilium fornece segurança de nível de serviço e observabilidade aprimorada para clusters Kubernetes e é a minha escolha pessoal nos meus laboratórios e ambientes produtivos.

O Cilium fornece recursos avançados, como políticas de segurança baseadas em identidade, monitoramento de tráfego e integração com o Prometheus para métricas de desempenho. 

Para instalar o Cilium, execute os seguintes comandos:

helm install cilium cilium/cilium -f values.yaml --version 1.14.2 \
    --namespace kube-system \
    --set kubeProxyReplacement=strict \
    --set k8sServiceHost=192.168.0.107 \
    --set k8sServicePort=6443

Após a instalação, verifique se o Cilium está em execução com o comando:

kubectl get pods --namespace=kube-system -l k8s-app=cilium

Retorno esperado:

image

Caso queira aprender mais sobre Kubernetes, visite nossa seção de artigos sobre o tema:

Compartilhe / Share
Fernando Müller Junior
Fernando Müller Junior

Eu sou o Fernando Müller, um Tech Lead SRE com 16 anos de experiência em TI, atualmente eu trabalho na Appmax, uma fintech localizada no Brasil. Apaixonado por trabalhar com arquiteturas e aplicações Cloud Native, ferramentas Open Source e tudo que existe no mundo SRE, sempre procurando se desenvolver e aprender constantemente(Lifelong learning), atuando em projetos inovadores!

Artigos: 37

Receba as notícias por email / Receive news by email

Insira seu endereço de e-mail abaixo e assine nossa newsletter / Enter your email address below and subscribe to our newsletter

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *