Introdução ao KubeLab
O KubeLab é uma ferramenta de simulação de falhas em Kubernetes, projetada para entender como o sistema se comporta em diferentes cenários de falha. Com o KubeLab, é possível criar um cluster Kubernetes real e simular falhas como perda de pods, sobrecarga de CPU e memória, e falha de bancos de dados, proporcionando uma compreensão mais profunda dos mecanismos de recuperação e resiliência do Kubernetes, essencial para ambientes de produção críticos.
Configurando o Ambiente
Configurar o ambiente de desenvolvimento para executar as simulações do KubeLab inclui a instalação de ferramentas como Multipass, kubectl e Git, fundamentais para a criação e gerenciamento do cluster Kubernetes. É necessário ter familiaridade básica com Docker e conforto com a linha de comando, embora não seja requerida experiência prévia com Kubernetes. O laboratório pode ser executado em Mac, Linux ou Windows com WSL2, com uma RAM mínima de 8GB, sendo recomendada 16GB.
Instalação de Ferramentas
Para configurar o ambiente, é necessário instalar:
- Multipass, para criar VMs Ubuntu para o cluster;
kubectl, a CLI de Kubernetes para executar as simulações;- Git, para clonar o repositório do KubeLab.
Instalação de Multipass e kubectl
Para instalar o Multipass, execute:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install multipass
Para instalar o kubectl, execute:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Clonar o Repositório do KubeLab
Execute o comando:
git clone https://github.com/Osomondiya/kubelab.git
Simulações do KubeLab
Agora que o ambiente está configurado, você está pronto para executar as simulações do KubeLab. Existem várias simulações que podem ser executadas, incluindo:
A simulação 1 consiste em matar um pod aleatório no cluster. Para isso, use:
kubectl get pods -n kubelab -w
# backend-abc123 1/1 Running 0 4s
kubectl delete pod backend-abc123 -n kubelab
A simulação 2 envolve drenar um nó trabalhador, que envolve cordá-lo primeiro. A simulação 3 trata do estresse de CPU e limitação, que pode ser mitigado configurando limites de CPU para cada container:
apiVersion: v1
kind: Pod
metadata:
name: meu-pod
spec:
containers:
- name: meu-container
image: meu-imagem
resources:
requests:
cpu: 200m
limits:
cpu: 200m
A simulação 4 envolve estresse de memória e OOMKill, que pode ser iniciada com:
kubectl get pods -n kubelab -l app=backend -w
A simulação 5 simula a falha do banco de dados, que pode ser executada escalando o StatefulSet de PostgreSQL para 0 réplicas:
kubectl scale statefulset postgres --replicas=0 -n kubelab
A simulação 6 é a falha de pod em cascata, que é crucial para a disponibilidade de serviços em um cluster Kubernetes. Implemente estratégias de gerenciamento de pods e serviços para garantir a disponibilidade do serviço mesmo em caso de falha. A simulação 7 trata da falha de probe de prontidão, onde um pod de backend falhará sua probe de prontidão por 120 segundos sem ser reiniciado.
Lendo os Sinais em Grafana e no Terminal
O comando kubectl mostra o estado atual, enquanto o Grafana mostra o que aconteceu ao longo do tempo. Existem vários painéis importantes no Grafana para monitorar a saúde do cluster, incluindo:
- Pod Restarts: Uma linha plana é boa.
- CPU Usage: Um pod saudável tem CPU que flutua.
- Memory Usage: Observe uma linha que sobe gradualmente e desaparece.
- HTTP Request Rate: Durante Falha em Cascata, você vê um pico de 5xx por 5-15 segundos.
Use parâmetros como -w, -o wide e --v=5 com o comando kubectl para obter saídas mais detalhadas.