Saltar al contenido principal

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