Construção Rápida de Cluster Kubernetes Distribuído em 30 Minutos com Vagrant e VirtualBox

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

  1. Clonar o Repositório: ```bash

    git clone https://gitcode.com/gh_mirrors/ku/kubernetes-vagrant-centos-cluster.git cd kubernetes-vagrant-centos-cluster

  2. Iniciar a Implantação do Cluster: (Na primeira execução, cerca de 600MB de recursos serão baixados) ```bash

    vagrant up

  3. 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

  1. Instalar o Cliente kubectl: (Exemplo para macOS) ```bash

    wget 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/

  2. Configurar Credenciais de Acesso ao Cluster: ```bash

    mkdir -p ~/.kube cp conf/admin.kubeconfig ~/.kube/config

  3. 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

  1. Implantar o Plano de Controle Istio: ```bash

    kubectl apply -f addon/istio/istio-demo.yaml kubectl apply -f addon/istio/istio-ingress.yaml

  2. Habilitar Injeção Automática de Sidecar: ```bash

    kubectl label namespace default istio-injection=enabled

  3. 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

  4. 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

  1. Implantar o pacote de monitoramento Heapster + Grafana: ```bash

    kubectl apply -f addon/heapster/

  2. 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'

  3. Acessar Grafana: (Credenciais padrão: admin/admin) ```bash

    open 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

  1. Backup dos dados do etcd: (Executar no nó node1) ```bash

    sudo 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

  2. Restauração dos dados do etcd: (Requer a parada do kube-apiserver) ```bash

    sudo 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

  1. Ajuste de Recursos: Modifique a alocação de recursos no Vagrantfile conforme necessário: ```ruby

    vb.memory = "4096" # Aumenta a memória para 4GB vb.cpus = 2 # Aloca 2 núcleos de CPU

  2. Aceleração de Imagens: O projeto já inclui fontes de imagens Docker otimizadas para redes na China.

  3. Otimização de Rede: O uso do modo host-gw do Flannel em vez de vxlan pode 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 interpreter ao implantar node3.

  • 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: ```bash

    systemctl 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:

  1. Experimente a aplicação de exemplo Bookinfo para testar os recursos de gerenciamento de tráfego do Istio.
  2. Utilize o Helm para implantar outras aplicações (hack/deploy-helm.sh).
  3. Explore a coleta e análise de logs com a stack EFK.
  4. Tente escalar o cluster modificando o Vagrantfile para adicionar mais nós.

Aproveite seu ambiente completo de Kubernetes e Istio em 30 minutos e acelere seu desenvolvimento nativo da nuvem!

Tags: kubernetes vagrant VirtualBox istio K8s

Publicado em 7-30 03:28