Pular para o conteúdo principal

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