Este repositório contém um ambiente Kubernetes completo utilizando Minikube, MetalLB, Istio, Argo CD e Argo Rollouts para gerenciamento e implantação progressiva de aplicações.
Para configurar todo o ambiente automaticamente, execute:
chmod +x setup.sh
./setup.sh
O script setup.sh irá configurar todo o cluster Kubernetes, incluindo MetalLB, Istio, Argo CD e Argo Rollouts.
- Minikube - Cria e gerencia um cluster Kubernetes local.
- MetalLB - Load Balancer para Kubernetes local.
- Istio - Service Mesh para controle de tráfego e segurança.
- Argo CD - Gerenciamento de implantação GitOps.
- Argo Rollouts - Estratégias avançadas de rollout para Kubernetes.
O cluster Kubernetes é iniciado com 2 nós, 4 CPUs, 10GB de Memória e 10GB de disco:
minikube start --nodes=2 --cpus=4 --memory=10000 --disk-size=10G --driver=docker --kubernetes-version=v1.28.3
MetalLB é ativado para fornecer suporte a LoadBalancer:
minikube addons enable metallb
O intervalo de IPs é configurado dinamicamente com base no IP do Minikube.
Baixa e instala o Istio no cluster:
curl -L https://istio.io/downloadIstio | sh -
export PATH=$PWD/istio-1.24.2/bin:$PATH
istioctl install --set profile=demo -y
O Istio Gateway é configurado para rotear tráfego:
kubectl apply -f k8s/config/istio/gateway.yml
Instalação do Argo CD para gerenciamento de implantações:
kubectl create namespace argocd
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd argo/argo-cd --namespace argocd
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
A senha padrão do ArgoCD pode ser obtida com:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode
Adiciona suporte a implantações canary e blue-green:
kubectl create namespace argo-rollouts
helm install argo-rollouts argo/argo-rollouts --namespace argo-rollouts
kubectl apply -f k8s/argo-rollouts/service.yml
kubectl apply -f k8s/argo-rollouts/vs.yml
Configuração do health check do Argo CD para Rollouts:
kubectl patch configmap argocd-cm -n argocd --type merge -p '{"data": {"resource.customizations.health.argoproj.io_Rollout": "# Health check for Argo Rollouts\nhs = {} hs.status = \"Healthy\" if obj.status and obj.status.readyReplicas == obj.status.replicas else \"Progressing\"\nhs"}}'
Reinicie o servidor do Argo CD para aplicar as configurações:
kubectl rollout restart deployment argocd-server -n argocd
As aplicações backend, banco de dados e frontend são implantadas automaticamente via Argo CD:
kubectl apply -f apps/backend/parking/app.yml
kubectl apply -f apps/data/db/app.yml
kubectl apply -f apps/data/messaging/app.yml
kubectl apply -f apps/frontend/nginx/app.yml
Obtenha o IP Externo do Argo CD:
kubectl get svc argocd-server -n argocd -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Depois, acesse no navegador:
http://<EXTERNAL_IP>
Usuário: admin
Senha: Obtida pelo comando:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode
Obtenha o EXTERNAL-IP do Istio:
kubectl get svc -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Acesse no navegador:
http://<EXTERNAL_IP>/frontend/nginx
Acesse o painel do Argo Rollouts com:
kubectl argo rollouts dashboard -n argo-rollouts
Valide o estado do Rollout:
kubectl argo rollouts get rollout nginx -n frontend
Atualize a imagem do Nginx para uma nova versão:
kubectl argo rollouts set image nginx nginx=nginx:1.21 -n frontend
Isso iniciará um rollout gradual com pesos configurados (20% → 50% → 100%).
Acompanhe a progressão do rollout:
kubectl argo rollouts get rollout nginx -n frontend --watch
Se precisar reverter para a versão estável anterior:
kubectl argo rollouts abort nginx -n frontend
Agora você tem um ambiente Kubernetes completo, incluindo:
✅ Gerenciamento GitOps com Argo CD
✅ Implantação progressiva com Argo Rollouts
✅ Balanceamento de carga com MetalLB
✅ Controle de tráfego e Service Mesh com Istio