DevOps Mind
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).
Tópicos
Instalação
Para configurar o kubeadm em um Ubuntu rodando no WSL 2, você precisará seguir alguns passos específicos, conforme o processo abaixo:
- Atualize o sistema do Ubuntu:
sudo apt-get update && sudo apt-get upgrade -y
- Instale as dependências necessárias:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- 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:
- Atualize novamente e instale o kubeadm, kubelet e kubectl:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
- Desative a swap (o Kubernetes requer que a swap esteja desativada):
sudo swapoff -a
- Configure o Docker (se ainda não estiver instalado):
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
- 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
- Inicie o cluster Kubernetes:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 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
- 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:
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:
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:
- https://blog.devops.dev/build-k8s-cluster-on-wsl2-6ba82235b96a
- https://github.com/robertluwang/hands-on-nativecloud/blob/main/k8s/Build%20k8s%20Cluster%20on%20WSL2.md
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:
Caso queira aprender mais sobre Kubernetes, visite nossa seção de artigos sobre o tema: