Capítulo 12.2 - CI/CD com Kubernetes
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender os pipelines CI/CD para Kubernetes
- Configurar GitHub Actions para Kubernetes
- Implementar GitLab CI/CD
- Utilizar GitOps com ArgoCD
- Automatizar os deploys
- Implementar estratégias de deploy
Introdução
Os pipelines CI/CD automatizam o build, teste e deploy de aplicações no Kubernetes.
GitHub Actions
Pipeline Básico
name: Deploy to Kubernetes
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: |
docker build -t my-app:${{ github.sha }} .
docker tag my-app:${{ github.sha }} my-registry/my-app:${{ github.sha }}
- name: Push to registry
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push my-registry/my-app:${{ github.sha }}
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v4
with:
manifests: |
k8s/deployment.yaml
k8s/service.yaml
images: |
my-registry/my-app:${{ github.sha }}
kubectl-version: 'latest'
GitLab CI/CD
.gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
test:
stage: test
script:
- docker run $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA npm test
deploy:
stage: deploy
script:
- kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
only:
- main
GitOps com ArgoCD
Instalação
# Instalar ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Aplicação ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/user/my-app
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Estratégias de Deploy
Rolling Update
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue/Green
Deploy de uma nova versão em paralelo, depois redirecionar o tráfego.
Canary
Deploy progressivo para um percentual de usuários.
Boas Práticas
1. Testes Automatizados
Executar os testes antes de cada deploy.
2. Ambientes
Separar dev, staging, produção.
3. Aprovações
Exigir aprovações para produção.
4. Rollback
Ter um plano de rollback rápido.
5. Monitoramento
Monitorar os deploys em tempo real.
Resumo
Neste capítulo, você aprendeu:
CI/CD: Automação de build, teste e deploy
GitHub Actions: Pipelines CI/CD integrados
GitLab CI: Pipelines com .gitlab-ci.yml
GitOps: ArgoCD para deploys declarativos
Estratégias: Rolling, Blue/Green, Canary
Boas práticas: Testes, ambientes, aprovações, rollback
Próximos Passos
Capítulo 12.3: Ambientes
Lab 12.2: Autoscaling Horizontal e Vertical
Lab 12.3: GitOps com ArgoCD
Capítulo criado em: Dezembro 2024