Capítulo 12.2 - CI/CD con Kubernetes
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Comprender los pipelines CI/CD para Kubernetes
- Configurar GitHub Actions para Kubernetes
- Implementar GitLab CI/CD
- Utilizar GitOps con ArgoCD
- Automatizar los despliegues
- Implementar estrategias de despliegue
Introducción
Los pipelines CI/CD automatizan el build, test y despliegue de aplicaciones en 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 con ArgoCD
Instalación
# Instalar ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Aplicación 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
Estrategias de Despliegue
Rolling Update
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue/Green
Desplegar una nueva versión en paralelo, luego cambiar el tráfico.
Canary
Desplegar progresivamente a un porcentaje de usuarios.
Buenas Prácticas
1. Tests Automáticos
Ejecutar los tests antes de cada despliegue.
2. Entornos
Separar dev, staging, producción.
3. Aprobaciones
Exigir aprobaciones para producción.
4. Rollback
Tener un plan de rollback rápido.
5. Monitoring
Monitorear los despliegues en tiempo real.
Resumen
En este capítulo, usted ha aprendido:
CI/CD: Automatización del build, test y despliegue
GitHub Actions: Pipelines CI/CD integrados
GitLab CI: Pipelines con .gitlab-ci.yml
GitOps: ArgoCD para despliegues declarativos
Estrategias: Rolling, Blue/Green, Canary
Buenas prácticas: Tests, entornos, aprobaciones, rollback
Próximos Pasos
Capítulo 12.3: Entornos
Lab 12.2: Autoscaling Horizontal y Vertical
Lab 12.3: GitOps con ArgoCD
Capítulo creado el: Diciembre 2024