Este guia demonstra como configurar um cluster Kubernetes distribuído localmente, juntamente com a malha de serviço Istio, utilizando Vagrant e VirtualBox. O processo é automatizado por scripts e visa cenários de Prova de Conceito (PoC) ou demonstração, permitindo que você tenha um ambiente de desenvolvimento e teste pronto em cerca de 30 minutos.
Visão Geral da Arquitetura
Topologia do Cluster
O cluster é composto por três nós:
- node1: Atua como o nó mestre, hospedando o API Server, Controller Manager, Scheduler e o banco de dados distribuído etcd.
- node2: Um nó de trabalho que executa o Kubelet, Docker, o plugin de rede Flannel e o Ingress Controller Traefik.
- node3: Outro nó de trabalho com Kubelet, Docker, Flannel e o resolvedor DNS CoreDNS.
Configuração de Recursos por Nó
| Nome do Nó | Endereço IP | Núcleos de CPU | Memória | Componentes Principais |
|---|---|---|---|---|
| node1 | 172.17.8.101 | 1 | 3072MB | API Server, Controller Manager, Scheduler, etcd |
| node2 | 172.17.8.102 | 1 | 3072MB | Kubelet, Docker, Flannel, Traefik |
| node3 | 172.17.8.103 | 1 | 3072MB | Kubelet, Docker, Flannel, CoreDNS |
Requisitos do Sistema Hospedeiro: Recomenda-se um mínimo de 8GB de RAM (16GB ideal), 4 núcleos de CPU e 50GB de espaço livre em disco. Certifique-se de ter o VirtualBox 6.0+ e o Vagrant 2.2.10+ instalados.
Prreparação do Ambiente
Software Necessário
- VirtualBox 6.0+: Hypervisor de máquinas virtuais.
- Vagrant 2.2.10+: Ferramenta para automação de ambientes.
- Git: Sistema de controle de versão.
- Acesso à Internet: Necessário para download de pacotes e dependências.
Compatibilidade do Sistema Operacional Hospedeiro
| Sistema Operacional Hospedeiro | Status de Suporte | Configurações Especiais |
|---|---|---|
| Windows 10/11 | Suporte Parcial | Requer habilitação do Hyper-V e WSL2. |
| macOS 10.15+ | Suporte Completo | Permitir componentes Oracle nas configurações de segurança. |
| Linux (Ubuntu 20.04+) | Suporte Completo | Instalar o módulo de kernel virtualbox-dkms. |
Otimizações para Ambientes na China
Para melhorar a velocidade de download de imagens Docker em redes na China, o projeto inclui espelhos (mirrors) configurados:
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://reg-mirror.qiniu.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
Implantação Rápida Automatizada
Linha do Tempo da Implantação
O processo de implantação é projetado para ser concluído em aproximadamente 30 minutos.
Comandos Principais de Implantação
-
Clonar o Repositório: ```bash
git clone https://gitcode.com/gh_mirrors/ku/kubernetes-vagrant-centos-cluster.git cd kubernetes-vagrant-centos-cluster
-
Iniciar a Implantação do Cluster: (Na primeira execução, cerca de 600MB de recursos serão baixados) ```bash
vagrant up
-
Verificar o Status do Cluster: (Após a conclusão da implantação) ```bash
vagrant ssh node1 -c "kubectl get nodes"
O script install.sh gerencia a inicialização do sistema, instalação do Docker, configuração do Kubernetes, rede e geração de certificados automaticamente.
Configuração de Acesso Local
-
Instalar o Cliente
kubectl: (Exemplo para macOS) ```bashwget https://storage.googleapis.com/kubernetes-release/release/v1.16.14/kubernetes-client-darwin-amd64.tar.gz tar xvf kubernetes-client-darwin-amd64.tar.gz sudo cp kubernetes/client/bin/kubectl /usr/local/bin/
-
Configurar Credenciais de Acesso ao Cluster: ```bash
mkdir -p ~/.kube cp conf/admin.kubeconfig ~/.kube/config
-
Validar Acesso Local: ```bash
kubectl get pods -n kube-system
Componentes Essenciais
Detalhes da Arquitetura de Rede
A comunicação entre Pods em diferentes nós é gerenciada pelo plugin de rede Flannel no modo host-gw, que otimiza o desempenho ao evitar NAT adicional. A rede de Services utiliza o Calico e suporta balanceamento de carga IPVS.
Comparativo dos Componentes Principais
| Componente | Versão | Função Principal | Consumo de Recursos | Método de Implantação |
|---|---|---|---|---|
| Kubernetes | v1.16.14 | Orquestarção de contêineres | ~500MB (Plano de Controle) | Binários estáticos |
| Etcd | v3.3.12 | Banco de dados distribuído chave-valor | ~200MB | Serviço systemd |
| Flannel | v0.11.0 | Plugin de rede para contêineres | ~30MB | DaemonSet |
| Docker | 1.13.1 | Runtime de contêineres | Variável | Serviço systemd |
| CoreDNS | v1.6.9 | Serviço de descoberta DNS | ~40MB | Deployement |
Implantação da Malha de Serviço Istio
-
Implantar o Plano de Controle Istio: ```bash
kubectl apply -f addon/istio/istio-demo.yaml kubectl apply -f addon/istio/istio-ingress.yaml
-
Habilitar Injeção Automática de Sidecar: ```bash
kubectl label namespace default istio-injection=enabled
-
Implantar a Aplicação de Exemplo Bookinfo: ```bash
kubectl apply -f yaml/istio-bookinfo/bookinfo.yaml kubectl apply -f yaml/istio-bookinfo/bookinfo-gateway.yaml
-
Acessar a Aplicação de Exemplo: ```bash
echo "http://172.17.8.101:31380/productpage"
Destaques do Istio: Gerenciamento de tráfego (testes A/B, lançamento gradual), comunicação segura (mTLS), observabilidade (rastreamento distribuído) e aplicação de políticas (limitação de taxa, controle de acesso).
Plataformas de Visualização e Monitoramento
Comparativo de Ferramentas de Monitoramento
| Ferramenta | Método de Implantação | Função Principal | Acesso |
|---|---|---|---|
| Kubernetes Dashboard | Deployment | Gerenciamento de recursos do cluster | https://172.17.8.101:8443 |
| Grafana | Deployment | Visualização de métricas de desempenho | http://grafana.jimmysong.io |
| Kiali | Deployment | Observabilidade da malha de serviço | http://172.17.8.101:32439 |
| Weave Scope | DaemonSet | Visualização de topologia de contêineres | http://scope.weave.jimmysong.io |
| EFK Stack | StatefulSet | Coleta e análise de logs | Acesso interno ao cluster |
Obter Token de Acesso para o Dashboard
# Executar localmente para obter o token de administrador
hack/get-dashboard-token.sh
# Saída de exemplo:
# Dashboard access token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...
# Access URL: https://172.17.8.101:8443
Implantação de Monitoramento Avançado
-
Implantar o pacote de monitoramento Heapster + Grafana: ```bash
kubectl apply -f addon/heapster/
-
Configurar resolução de nome de domínio local: (Requer privilégios de administrador) ```bash
sudo sh -c 'echo "172.17.8.102 grafana.jimmysong.io" >> /etc/hosts'
-
Acessar Grafana: (Credenciais padrão:
admin/admin) ```bashopen http://grafana.jimmysong.io
Operações de Gerenciamento do Cluster
Comandos Comuns de Gerenciamento
| Objetivo da Operação | Comando | Descrição |
|---|---|---|
| Suspender Cluster | vagrant suspend |
Salva o estado atual e para as VMs, economizando recursos. |
| Retomar Cluster | vagrant resume |
Restaura o estado suspenso, leva cerca de 30 segundos. |
| Reiniciar Cluster | vagrant halt && vagrant up |
Reinicialização completa, leva cerca de 5 minutos. |
| Destruir Cluster | vagrant destroy -f |
Limpa completamente o ambiente e libera espaço em disco. |
| Login em Nó | vagrant ssh node1 |
Acessa o nó especificado como usuário vagrant. |
Backup e Restauração do Cluster
-
Backup dos dados do etcd: (Executar no nó
node1) ```bashsudo ETCDCTL_API=3 etcdctl snapshot save /vagrant/etcd-backup.db
--endpoints=https://127.0.0.1:2379
--cacert=/etc/kubernetes/ssl/ca.pem
--cert=/etc/kubernetes/ssl/kubernetes.pem
--key=/etc/kubernetes/ssl/kubernetes-key.pem -
Restauração dos dados do etcd: (Requer a parada do
kube-apiserver) ```bashsudo systemctl stop kube-apiserver sudo ETCDCTL_API=3 etcdctl snapshot restore /vagrant/etcd-backup.db
--data-dir=/var/lib/etcd-backup
Sugestões de Otimização de Desempenho
-
Ajuste de Recursos: Modifique a alocação de recursos no
Vagrantfileconforme necessário: ```rubyvb.memory = "4096" # Aumenta a memória para 4GB vb.cpus = 2 # Aloca 2 núcleos de CPU
-
Aceleração de Imagens: O projeto já inclui fontes de imagens Docker otimizadas para redes na China.
-
Otimização de Rede: O uso do modo
host-gwdo Flannel em vez devxlanpode melhorar o desempenho da rede em mais de 30%.
Solução de Problemas Comuns
Fluxo de Depuração de Falhas na Implantação
Um fluxo de depuração detalhado é crucial para identificar e resolver problemas durante a implantação.
Resolução de Problemas Típicos
1. Nó Não Inicia no Ambiente Windows
-
Sintoma: Erro
bad interpreterao implantarnode3. -
Solução: ```bash
vagrant ssh node3 sudo -i cd /vagrant/addon/dns yum install -y dos2unix dos2unix dns-deploy.sh ./dns-deploy.sh -r 10.254.0.0/16 -i 10.254.0.2 |kubectl apply -f -
2. Erro de Certificado ao Acessar o Dashboard
-
Sintoma: O navegador exibe
NET::ERR_CERT_INVALID. -
Solução: Gere e substitua os certificados autoassinados. ```bash
vagrant ssh node1 sudo -i cd /vagrant/addon/dashboard mkdir certs openssl req -nodes -newkey rsa:2048 -keyout certs/dashboard.key -out certs/dashboard.csr -subj "/CN=kubernetes-dashboard" openssl x509 -req -sha256 -days 365 -in certs/dashboard.csr -signkey certs/dashboard.key -out certs/dashboard.crt kubectl delete secret kubernetes-dashboard-certs -n kube-system kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-system
3. Nó em Estado NotReady
-
Sintoma: O nó do cluster não está pronto.
-
Verificação: Verifique o status do
kubelet: ```bashsystemctl status kubelet
-
Solução Comum: ```bash
sudo systemctl daemon-reload sudo systemctl restart kubelet sudo journalctl -u kubelet -f # Para visualizar logs detalhados
Conclusão e Próximos Passos
Este guia forneceu um método prático para configurar rapidamente um cluster Kubernetes distribuído com Istio usando Vagrant e VirtualBox. Você aprendeu sobre:
- O processo automatizado de implantação de um cluster K8s de 3 nós.
- Integração e implantação de aplicações na malha de serviço Istio.
- Configuração de plataformas de monitoramento e visualização.
- Gerenciamento diário, otimização de desempenho e solução de problemas comuns.
Este ambiente é ideal para:
- Criação rápida de ambientes de desenvolvimento e teste.
- Aprendizado e experimentação com Kubernetes.
- Validação de funcionalidades da malha de serviço.
- Desenvolvimento de protótipos para arquiteturas de microsserviços.
Sugestões para aprofundamento:
- Experimente a aplicação de exemplo Bookinfo para testar os recursos de gerenciamento de tráfego do Istio.
- Utilize o Helm para implantar outras aplicações (
hack/deploy-helm.sh). - Explore a coleta e análise de logs com a stack EFK.
- Tente escalar o cluster modificando o
Vagrantfilepara adicionar mais nós.
Aproveite seu ambiente completo de Kubernetes e Istio em 30 minutos e acelere seu desenvolvimento nativo da nuvem!