Skip to content

Amazon EKS Upgrades

Última actualización: July 3, 2026

Mantener tu cluster de Amazon EKS actualizado es importante para la seguridad, la estabilidad y para aprovechar nuevas características. Este documento proporciona estrategias, mejores prácticas y guías paso a paso para actualizar clusters de EKS de forma segura.

Table of Contents

  1. EKS Upgrade Overview
  2. Upgrade Planning and Preparation
  3. EKS Control Plane Upgrade
  4. Node Group Upgrade
  5. Add-on Upgrade
  6. Upgrade Validation and Troubleshooting
  7. Upgrade Automation
  8. Upgrade Best Practices

EKS Upgrade Overview

EKS Version Management

Amazon EKS sigue la política de gestión de versiones de Kubernetes:

  • Version Support: EKS admite un mínimo de 4 versiones de Kubernetes simultáneamente.
  • Support Period: Cada versión de Kubernetes recibe soporte durante aproximadamente 14 meses después de su lanzamiento en EKS.
  • Version Deprecation: Se proporciona un aviso con un mínimo de 60 días antes de que una versión quede obsoleta.

Recent EKS Upgrade Announcements (2026)

  • Kubernetes version rollback support (July 1, 2026): Si una actualización causa problemas, ahora puedes hacer rollback del control plane a la versión menor anterior dentro de un plazo de 7 días. EKS ejecuta previamente una comprobación automatizada de Rollback Readiness, que cubre compatibilidad de API, version skew, compatibilidad de add-ons y estado del cluster. Los clusters de EKS Auto Mode hacen rollback automáticamente: los worker nodes revierten por sí solos y el control plane se restaura en secuencia. No hay cargo adicional y está disponible en todas las regiones. Consulta Rollback Procedure más abajo para obtener detalles. (Fuente: Amazon EKS announces Kubernetes version rollback)
  • 99.99% SLA and 8XL control plane tier (March 20, 2026): El SLA para clusters con Provisioned Control Plane aumentó de 99.95% a 99.99%, medido con granularidad de un minuto. Un nuevo tier de escalado 8XL duplica la capacidad de gestión de solicitudes de API del tier 4XL anterior, orientado a clusters muy grandes y cargas de trabajo de AI/ML/HPC. (Fuente: Amazon EKS announces SLA and 8XL scaling tier)

Upgrade Components

Las actualizaciones de clusters de EKS incluyen los siguientes componentes:

  1. EKS Control Plane: Kubernetes API server, etcd, controller manager, etc.
  2. Node Groups: Worker nodes y AMI de nodes
  3. Add-ons: Add-ons administrados por AWS (por ejemplo, CoreDNS, kube-proxy, VPC CNI)
  4. Self-managed Components: Helm charts, recursos personalizados, etc.

Upgrade Path

Los clusters de EKS deben actualizarse una versión menor a la vez:

  • 1.24 → 1.25 → 1.26 → 1.27 (ruta correcta)
  • 1.24 → 1.26 (no compatible)

Upgrade Order

El orden general de actualización es el siguiente:

  1. Planificación y preparación de la actualización
  2. Actualización del control plane de EKS
  3. Actualización de add-ons
  4. Actualización de node groups
  5. Validación de la actualización

Upgrade Planning and Preparation

Upgrade Assessment

Antes de iniciar una actualización, debes evaluar lo siguiente:

Version Compatibility Check

Comprueba la compatibilidad con la versión objetivo de Kubernetes:

  • API Deprecation: Identifica workloads que usan APIs obsoletas
  • Feature Changes: Revisa los cambios de características en la nueva versión
  • Add-on Compatibility: Verifica que los add-ons sean compatibles con la versión objetivo
bash
# Check deprecated API usage
kubectl get -l k8s-app!=kube-dns deployments --all-namespaces -o json | jq '.items[].spec.template.spec.containers[].image' | sort | uniq

# Check deprecated API usage
kubectl get $(kubectl api-resources --verbs=list -o name | paste -sd, -) \
  --all-namespaces -o json | jq '.items[] | select(.apiVersion | contains("beta"))' | jq -r '.kind,.apiVersion,.metadata.name' | sort | uniq

Resource Requirements Assessment

Evalúa los recursos necesarios para la actualización:

  • Cluster Capacity: Capacidad suficiente para alojar nodes adicionales durante la actualización
  • Downtime Tolerance: Si los workloads pueden tolerar downtime
  • Rollback Plan: Plan de rollback en caso de problemas

Upgrade Schedule Planning

Planifica el cronograma de actualización:

  • Maintenance Window: Programa la actualización durante periodos de bajo tráfico
  • Phased Approach: Comienza con entornos no productivos y avanza hacia producción
  • Rollback Window: Planifica el tiempo necesario para rollback en caso de problemas

Pre-upgrade Preparation

Check Cluster State

Comprueba el estado del cluster antes de la actualización:

bash
# Check node status
kubectl get nodes

# Check pod status
kubectl get pods --all-namespaces

# Check component status
kubectl get componentstatuses

# Check events
kubectl get events --all-namespaces

Create Backup

Haz backup de los datos importantes antes de la actualización:

bash
# etcd backup
kubectl -n kube-system exec -it etcd-pod -- etcdctl snapshot save /tmp/etcd-backup.db

# Backup using Velero
velero backup create pre-upgrade-backup --include-namespaces=default,app-namespace

Test Upgrade

Prueba la actualización en un entorno no productivo:

  1. Crea un cluster de prueba similar al entorno de producción
  2. Realiza la actualización en el cluster de prueba
  3. Prueba workloads y características
  4. Identifica y resuelve problemas

Create Upgrade Documentation

Documenta el proceso de actualización:

  • Pasos de actualización
  • Responsables y contactos
  • Procedimientos de rollback
  • Guía de troubleshooting

EKS Control Plane Upgrade

Control Plane Upgrade Preparation

Check Current Version

Comprueba la versión actual del cluster de EKS:

bash
aws eks describe-cluster --name my-cluster --query "cluster.version"

Check Available Versions

Comprueba las versiones disponibles de Kubernetes:

bash
aws eks describe-addon-versions --kubernetes-version 1.27

Create Upgrade Plan

Crea un plan de actualización del control plane:

  • Tiempo de actualización: Selecciona periodos de bajo tráfico
  • Configuración de monitoreo: Monitorea el estado del cluster durante la actualización
  • Plan de rollback: Procedimiento de rollback en caso de problemas

Control Plane Upgrade Execution

Upgrade Using AWS Management Console

  1. Inicia sesión en AWS Management Console
  2. Navega al servicio Amazon EKS
  3. Selecciona el cluster que se va a actualizar en la lista de clusters
  4. Selecciona la pestaña "Cluster configuration"
  5. Haz clic en "Update Kubernetes version"
  6. Selecciona la versión objetivo y haz clic en "Update"

Upgrade Using AWS CLI

bash
aws eks update-cluster-version \
  --name my-cluster \
  --kubernetes-version 1.27

Upgrade Using eksctl

bash
eksctl upgrade cluster \
  --name my-cluster \
  --version 1.27 \
  --approve

Control Plane Upgrade Monitoring

Check Upgrade Status

Comprueba el estado de la actualización:

bash
# Check status using AWS CLI
aws eks describe-update \
  --name my-cluster \
  --update-id <update-id>

# Check status using eksctl
eksctl get clusters
eksctl get nodegroup --cluster my-cluster

Monitor Cluster State

Monitorea el estado del cluster durante la actualización:

bash
# Check node status
kubectl get nodes

# Check pod status
kubectl get pods --all-namespaces

# Check events
kubectl get events --all-namespaces --sort-by='.lastTimestamp'

Monitor CloudWatch Metrics

Monitorea las métricas del cluster en CloudWatch:

  • Latencia del API server
  • Latencia de etcd
  • Latencia del controller manager
  • Latencia del scheduler

Control Plane Upgrade Troubleshooting

Common Issues

Problemas comunes que pueden ocurrir durante la actualización del control plane:

  • Upgrade Failure: El proceso de actualización falla o se interrumpe
  • API Server Availability: Problemas de disponibilidad del API server durante la actualización
  • Compatibility Issues: Problemas de compatibilidad entre workloads y la nueva versión

Troubleshooting Steps

  1. Comprueba el estado de la actualización
  2. Revisa los logs de CloudTrail
  3. Revisa los logs del control plane de EKS
  4. Contacta a AWS Support

Node Group Upgrade

Después de actualizar el control plane, debes actualizar los node groups. Hay varias estrategias para actualizar node groups, cada una con ventajas y desventajas.

Node Group Upgrade Strategies

Managed Node Group Upgrade

Los managed node groups son una característica de administración de node groups proporcionada por AWS que automatiza las actualizaciones de nodes:

  • Rolling Upgrade: Los nodes se reemplazan uno por uno para minimizar la interrupción de workloads
  • Auto Draining: Los nodes se drenan automáticamente para que los pods se muevan a otros nodes
  • Version Tracking: Selecciona automáticamente la AMI de node compatible con la versión del control plane

Self-managed Node Group Upgrade

Para los self-managed node groups, debes actualizar los nodes manualmente:

  • Blue/Green Deployment: Crea un nuevo node group y migra los workloads
  • Rolling Upgrade: Drena y termina nodes uno por uno, y reemplázalos por nodes nuevos
  • In-place Upgrade: Actualiza kubelet y el container runtime en nodes existentes

Fargate Node Upgrade

Los nodes de Fargate son administrados por AWS, por lo que no se necesita una actualización separada:

  • Los pods de Fargate usan automáticamente la versión de plataforma más reciente cuando se programan de nuevo.
  • Los pods de Fargate existentes mantienen la versión de plataforma actual hasta que se reinician.

Managed Node Group Upgrade

Check Managed Node Group Version

Comprueba la versión actual del managed node group:

bash
aws eks describe-nodegroup \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --query "nodegroup.version"

Upgrade Using AWS Management Console

  1. Inicia sesión en AWS Management Console
  2. Navega al servicio Amazon EKS
  3. Selecciona el cluster que se va a actualizar en la lista de clusters
  4. Selecciona la pestaña "Compute"
  5. Selecciona el node group que se va a actualizar
  6. Haz clic en "Update node group"
  7. Selecciona la versión objetivo y haz clic en "Update"

Upgrade Using AWS CLI

bash
aws eks update-nodegroup-version \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --kubernetes-version 1.27

Upgrade Using eksctl

bash
eksctl upgrade nodegroup \
  --cluster my-cluster \
  --name my-nodegroup \
  --kubernetes-version 1.27

Managed Node Group Upgrade Configuration

Puedes configurar el comportamiento de actualización de managed node groups:

  • Max Unavailable: Número máximo de nodes no disponibles durante la actualización
  • Pod Disruption Budget: Mantén la disponibilidad del service respetando los Pod Disruption Budgets (PDB)
bash
aws eks update-nodegroup-config \
  --cluster-name my-cluster \
  --nodegroup-name my-nodegroup \
  --update-config maxUnavailable=1

Self-managed Node Group Upgrade

Blue/Green Deployment

El blue/green deployment crea un nuevo node group y luego migra los workloads:

  1. Crea un nuevo node group:
bash
eksctl create nodegroup \
  --cluster my-cluster \
  --name my-nodegroup-new \
  --node-type m5.large \
  --nodes 3 \
  --nodes-min 3 \
  --nodes-max 6 \
  --node-ami auto
  1. Migra los workloads:
bash
# Apply taint to existing nodes
kubectl taint nodes -l alpha.eksctl.io/nodegroup-name=my-nodegroup-old \
  node-group=old:NoSchedule

# Verify new pods are scheduled on new nodes
kubectl get pods -o wide

# Drain existing nodes
for node in $(kubectl get nodes -l alpha.eksctl.io/nodegroup-name=my-nodegroup-old -o name); do
  kubectl drain --ignore-daemonsets --delete-emptydir-data $node
done
  1. Elimina el node group existente:
bash
eksctl delete nodegroup \
  --cluster my-cluster \
  --name my-nodegroup-old

Rolling Upgrade

Rolling upgrade drena y termina nodes uno por uno, y los reemplaza por nodes nuevos:

bash
# Get node list
NODES=$(kubectl get nodes -l alpha.eksctl.io/nodegroup-name=my-nodegroup -o name)

# Perform draining and termination for each node
for node in $NODES; do
  echo "Draining node $node..."
  kubectl drain --ignore-daemonsets --delete-emptydir-data $node

  # Get node ID
  INSTANCE_ID=$(aws ec2 describe-instances \
    --filters "Name=private-dns-name,Values=$(echo $node | cut -d'/' -f2)" \
    --query "Reservations[0].Instances[0].InstanceId" \
    --output text)

  # Terminate node
  aws ec2 terminate-instances --instance-ids $INSTANCE_ID

  # Wait for new node to be ready
  echo "Waiting for new node to be ready..."
  sleep 60

  # Check node status
  kubectl get nodes
done

In-place Upgrade

In-place upgrade actualiza kubelet y el container runtime en nodes existentes:

bash
# Get node list
NODES=$(kubectl get nodes -l alpha.eksctl.io/nodegroup-name=my-nodegroup -o name)

# Perform in-place upgrade for each node
for node in $NODES; do
  echo "Cordoning node $node..."
  kubectl cordon $node

  echo "Draining node $node..."
  kubectl drain --ignore-daemonsets --delete-emptydir-data $node

  # SSH to node and perform upgrade
  # This part may vary depending on node access method
  INSTANCE_ID=$(aws ec2 describe-instances \
    --filters "Name=private-dns-name,Values=$(echo $node | cut -d'/' -f2)" \
    --query "Reservations[0].Instances[0].InstanceId" \
    --output text)

  # Execute command using SSM
  aws ssm send-command \
    --instance-ids $INSTANCE_ID \
    --document-name "AWS-RunShellScript" \
    --parameters commands=["sudo yum update -y kubelet kubectl"]

  # Uncordon node
  echo "Uncordoning node $node..."
  kubectl uncordon $node
done

Node Upgrade Monitoring and Validation

Check Node Version

Comprueba la versión de Kubernetes de los nodes:

bash
kubectl get nodes -o custom-columns=NAME:.metadata.name,VERSION:.status.nodeInfo.kubeletVersion

Check Node Status

Comprueba el estado de los nodes:

bash
kubectl get nodes
kubectl describe nodes

Check Pod Deployment

Verifica que los pods estén desplegados normalmente:

bash
kubectl get pods --all-namespaces -o wide
kubectl get pods --all-namespaces -o wide | grep -v Running

Add-on Upgrade

Los clusters de EKS incluyen varios add-ons que también deben actualizarse.

AWS Managed Add-ons

Check Managed Add-on List

Comprueba los add-ons administrados instalados en el cluster:

bash
aws eks list-addons --cluster-name my-cluster

Check Managed Add-on Version

Comprueba la versión actual de los add-ons administrados:

bash
aws eks describe-addon \
  --cluster-name my-cluster \
  --addon-name vpc-cni \
  --query "addon.addonVersion"

Check Available Add-on Versions

Comprueba las versiones disponibles de add-ons:

bash
aws eks describe-addon-versions \
  --addon-name vpc-cni \
  --kubernetes-version 1.27

Upgrade Managed Add-ons

Puedes actualizar add-ons administrados usando AWS Management Console, AWS CLI o eksctl:

bash
# Upgrade using AWS CLI
aws eks update-addon \
  --cluster-name my-cluster \
  --addon-name vpc-cni \
  --addon-version v1.12.0-eksbuild.1 \
  --resolve-conflicts PRESERVE

# Upgrade using eksctl
eksctl update addon \
  --cluster my-cluster \
  --name vpc-cni \
  --version v1.12.0-eksbuild.1 \
  --preserve

Self-managed Add-ons

Upgrade Self-managed Add-ons

Actualiza self-managed add-ons usando Helm o kubectl:

bash
# Upgrade using Helm
helm repo update
helm upgrade metrics-server metrics-server/metrics-server \
  --namespace kube-system \
  --version 3.8.2

# Upgrade using kubectl
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/metrics-server/v0.6.1/deploy/kubernetes/metrics-server-deployment.yaml

Key Add-on Upgrade Guides

CoreDNS Upgrade

CoreDNS proporciona service de DNS para el cluster de Kubernetes:

bash
# Check CoreDNS version
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"

# Upgrade CoreDNS
aws eks update-addon \
  --cluster-name my-cluster \
  --addon-name coredns \
  --addon-version v1.9.3-eksbuild.2 \
  --resolve-conflicts PRESERVE

kube-proxy Upgrade

kube-proxy gestiona el networking de service de Kubernetes:

bash
# Check kube-proxy version
kubectl get daemonset kube-proxy -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"

# Upgrade kube-proxy
aws eks update-addon \
  --cluster-name my-cluster \
  --addon-name kube-proxy \
  --addon-version v1.27.1-eksbuild.1 \
  --resolve-conflicts PRESERVE

VPC CNI Upgrade

Amazon VPC CNI gestiona el networking de pod:

bash
# Check VPC CNI version
kubectl describe daemonset aws-node -n kube-system | grep Image

# Upgrade VPC CNI
aws eks update-addon \
  --cluster-name my-cluster \
  --addon-name vpc-cni \
  --addon-version v1.12.0-eksbuild.1 \
  --resolve-conflicts PRESERVE

Add-on Upgrade Troubleshooting

Common Issues

Problemas comunes que pueden ocurrir durante la actualización de add-ons:

  • Configuration Conflicts: Conflictos entre la configuración personalizada y la nueva versión
  • Compatibility Issues: Problemas de compatibilidad entre el add-on y la versión de Kubernetes
  • Resource Constraints: Recursos insuficientes para la actualización

Troubleshooting Steps

  1. Comprueba el estado del add-on:
bash
aws eks describe-addon \
  --cluster-name my-cluster \
  --addon-name vpc-cni
  1. Comprueba los logs del add-on:
bash
kubectl logs -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system -l k8s-app=kube-proxy
kubectl logs -n kube-system -l k8s-app=aws-node
  1. Comprueba los events del add-on:
bash
kubectl get events -n kube-system --sort-by='.lastTimestamp'

Upgrade Validation and Troubleshooting

Después de completar la actualización, debes validar que el cluster esté funcionando normalmente y resolver cualquier problema que pueda ocurrir.

Upgrade Validation

Check Cluster Version

Comprueba las versiones del cluster y de los nodes:

bash
# Check cluster version
kubectl version --short

# Check node version
kubectl get nodes -o custom-columns=NAME:.metadata.name,VERSION:.status.nodeInfo.kubeletVersion

Check Cluster State

Comprueba el estado de los componentes del cluster:

bash
# Check node status
kubectl get nodes

# Check pod status
kubectl get pods --all-namespaces

# Check namespace status
kubectl get namespaces

# Check service status
kubectl get services --all-namespaces

Workload Validation

Verifica que los workloads de aplicación estén funcionando normalmente:

bash
# Check deployment status
kubectl get deployments --all-namespaces

# Check statefulset status
kubectl get statefulsets --all-namespaces

# Check daemonset status
kubectl get daemonsets --all-namespaces

# Check service endpoints
kubectl get endpoints --all-namespaces

Functional Testing

Prueba que las características clave estén funcionando normalmente:

  1. Pod Creation Test:
bash
kubectl run nginx --image=nginx
kubectl get pod nginx
kubectl delete pod nginx
  1. Service Creation Test:
bash
kubectl create deployment nginx --image=nginx --replicas=2
kubectl expose deployment nginx --port=80 --type=ClusterIP
kubectl get service nginx
kubectl delete service nginx
kubectl delete deployment nginx
  1. Scaling Test:
bash
kubectl create deployment nginx --image=nginx
kubectl scale deployment nginx --replicas=3
kubectl get deployment nginx
kubectl delete deployment nginx

Upgrade Troubleshooting

Common Upgrade Issues

Problemas comunes que pueden ocurrir durante la actualización:

  1. Control Plane Upgrade Failure:

    • Problemas de disponibilidad del API server
    • Problemas de la base de datos etcd
    • Problemas de permisos de IAM
  2. Node Upgrade Issues:

    • Falla al drenar nodes
    • Falla al iniciar nuevos nodes
    • Incompatibilidad de versión de kubelet
  3. Add-on Upgrade Issues:

    • Conflictos de configuración
    • Problemas de compatibilidad
    • Restricciones de recursos
  4. Workload Issues:

    • Falla de workloads debido a obsolescencia de API
    • Falla en la programación de pods debido a restricciones de recursos
    • Problemas de networking

Troubleshooting Steps

  1. Check Logs:
bash
# Check control plane logs
aws eks update-cluster-config \
  --region us-west-2 \
  --name my-cluster \
  --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

# Check node logs
kubectl logs -n kube-system -l component=kube-proxy
kubectl logs -n kube-system -l k8s-app=aws-node
  1. Check Events:
bash
kubectl get events --all-namespaces --sort-by='.lastTimestamp'
  1. Check Resource Status:
bash
kubectl describe nodes
kubectl describe pods --all-namespaces | grep -A 10 "Events:"
  1. Check API Version:
bash
kubectl api-versions

Rollback Procedure

Si los problemas de actualización no pueden resolverse, considera rollback:

  1. Control Plane Rollback:

    • A partir de julio de 2026, Amazon EKS admite hacer rollback del control plane a la versión menor anterior dentro de los 7 días posteriores a una actualización. Una comprobación automatizada de Rollback Readiness se ejecuta previamente, cubriendo compatibilidad de API, version skew, compatibilidad de add-ons y estado del cluster. Los clusters de EKS Auto Mode hacen rollback automáticamente: los worker nodes revierten por sí solos y el control plane se restaura en secuencia. No hay cargo adicional y está disponible en todas las regiones. (Fuente: Amazon EKS announces Kubernetes version rollback)
    • Si han pasado más de 7 días o esta característica no está disponible, y el problema es grave, debes crear un nuevo cluster y migrar workloads.
  2. Node Group Rollback:

    • Rollback al node group de la versión anterior:
bash
# Create new node group with previous version
eksctl create nodegroup \
  --cluster my-cluster \
  --name my-nodegroup-old-version \
  --node-type m5.large \
  --nodes 3 \
  --nodes-min 3 \
  --nodes-max 6 \
  --node-ami-family AmazonLinux2 \
  --node-ami auto \
  --kubernetes-version 1.26

# Delete previous node group once new node group is ready
eksctl delete nodegroup \
  --cluster my-cluster \
  --name my-nodegroup-new-version
  1. Add-on Rollback:
    • Rollback a la versión anterior del add-on:
bash
aws eks update-addon \
  --cluster-name my-cluster \
  --addon-name vpc-cni \
  --addon-version <previous-version> \
  --resolve-conflicts PRESERVE

Upgrade Automation

En entornos a gran escala, automatizar el proceso de actualización es importante. Puedes automatizar actualizaciones de EKS usando las siguientes herramientas y métodos.

Automation Using eksctl

eksctl es una herramienta de línea de comandos para la administración de clusters de EKS que puede usarse para automatizar actualizaciones:

bash
# Cluster upgrade
eksctl upgrade cluster \
  --name my-cluster \
  --version 1.27 \
  --approve

# Node group upgrade
eksctl upgrade nodegroup \
  --cluster my-cluster \
  --name my-nodegroup \
  --kubernetes-version 1.27

Automation Using AWS CLI and Scripts

Puedes automatizar el proceso de actualización usando AWS CLI y shell scripts:

bash
#!/bin/bash

# Variable setup
CLUSTER_NAME="my-cluster"
TARGET_VERSION="1.27"
REGION="us-west-2"

# Cluster upgrade
echo "Upgrading cluster $CLUSTER_NAME to version $TARGET_VERSION..."
UPDATE_ID=$(aws eks update-cluster-version \
  --region $REGION \
  --name $CLUSTER_NAME \
  --kubernetes-version $TARGET_VERSION \
  --query "update.id" \
  --output text)

# Wait for upgrade completion
echo "Waiting for cluster upgrade to complete..."
aws eks wait update-successful \
  --region $REGION \
  --name $CLUSTER_NAME \
  --update-id $UPDATE_ID

# Add-on upgrade
echo "Upgrading addons..."
for ADDON in vpc-cni coredns kube-proxy; do
  LATEST_VERSION=$(aws eks describe-addon-versions \
    --region $REGION \
    --addon-name $ADDON \
    --kubernetes-version $TARGET_VERSION \
    --query "addons[0].addonVersions[0].addonVersion" \
    --output text)

  echo "Upgrading $ADDON to version $LATEST_VERSION..."
  aws eks update-addon \
    --region $REGION \
    --cluster-name $CLUSTER_NAME \
    --addon-name $ADDON \
    --addon-version $LATEST_VERSION \
    --resolve-conflicts PRESERVE
done

# Managed node group upgrade
echo "Upgrading managed nodegroups..."
NODEGROUPS=$(aws eks list-nodegroups \
  --region $REGION \
  --cluster-name $CLUSTER_NAME \
  --query "nodegroups[]" \
  --output text)

for NG in $NODEGROUPS; do
  echo "Upgrading nodegroup $NG..."
  aws eks update-nodegroup-version \
    --region $REGION \
    --cluster-name $CLUSTER_NAME \
    --nodegroup-name $NG

  # Wait for node group upgrade completion
  echo "Waiting for nodegroup $NG upgrade to complete..."
  aws eks wait nodegroup-active \
    --region $REGION \
    --cluster-name $CLUSTER_NAME \
    --nodegroup-name $NG
done

echo "Upgrade process completed successfully!"

Automation Using GitOps

Puedes automatizar actualizaciones de clusters de EKS usando herramientas GitOps (por ejemplo, Flux, ArgoCD):

  1. Store Cluster Configuration in Git Repository:
yaml
# cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: my-cluster
  region: us-west-2
  version: "1.27"
managedNodeGroups:
  - name: my-nodegroup
    instanceType: m5.large
    desiredCapacity: 3
    minSize: 3
    maxSize: 6
  1. Configure CI/CD Pipeline:
yaml
# .github/workflows/upgrade-eks.yml
name: Upgrade EKS Cluster

on:
  push:
    branches: [ main ]
    paths:
      - 'cluster.yaml'

jobs:
  upgrade:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-west-2

      - name: Install eksctl
        run: |
          curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
          sudo mv /tmp/eksctl /usr/local/bin

      - name: Upgrade EKS cluster
        run: |
          eksctl upgrade cluster -f cluster.yaml

Automation Best Practices

Mejores prácticas para automatizar actualizaciones de EKS:

  1. Gradual Approach: Comienza con entornos no productivos y avanza hacia producción
  2. Rollback Plan: Implementa un mecanismo automatizado de rollback
  3. Validation Steps: Incluye pasos de validación automatizados después de la actualización
  4. Notifications: Configura notificaciones para éxito o falla de la actualización
  5. Documentation: Documenta el proceso y los pasos de automatización

Upgrade Best Practices

Veamos las mejores prácticas para actualizaciones de clusters de EKS.

General Best Practices

Upgrade Planning

  1. Version Selection: Selecciona una versión estable y revisa las notas de la versión
  2. Upgrade Schedule: Programa la actualización durante periodos de bajo tráfico
  3. Phased Approach: Comienza con entornos no productivos y avanza hacia producción
  4. Rollback Planning: Crea un plan de rollback en caso de problemas

Upgrade Preparation

  1. Backup: Haz backup de los datos importantes
  2. Resource Allocation: Asegura recursos suficientes para la actualización
  3. Compatibility Check: Verifica la compatibilidad de workloads y add-ons
  4. Deprecated API Identification: Identifica y actualiza workloads que usan APIs obsoletas

Upgrade Execution

  1. Control Plane First: Actualiza primero el control plane
  2. Add-ons Next: Actualiza los add-ons después de la actualización del control plane
  3. Nodes Last: Actualiza los nodes después de la actualización del control plane y de los add-ons
  4. Gradual Node Upgrade: Actualiza los nodes gradualmente para minimizar la interrupción de workloads

Post-upgrade

  1. Validation: Valida el estado del cluster y de los workloads
  2. Monitoring: Monitorea el cluster después de la actualización
  3. Documentation: Documenta el proceso y los resultados de la actualización
  4. Learning: Aprende de los problemas encontrados durante la actualización y de sus soluciones

Best Practices for Large Clusters

Mejores prácticas adicionales para actualizaciones de clusters grandes de EKS:

  1. Canary Deployment: Comienza con algunos nodes o workloads y expande gradualmente
  2. Automation: Automatiza el proceso de actualización
  3. Enhanced Monitoring: Monitorea continuamente el estado del cluster durante la actualización
  4. Communication Plan: Comunica regularmente el estado de la actualización a las partes interesadas
  5. Automated Rollback: Implementa un mecanismo automatizado de rollback en caso de problemas

Best Practices for Financial Services

Mejores prácticas adicionales para actualizaciones de clusters de EKS en la industria de servicios financieros:

  1. Regulatory Compliance: Asegura que la actualización cumpla los requisitos regulatorios
  2. Risk Assessment: Realiza una evaluación de riesgos antes de la actualización
  3. Change Management: Sigue procesos estrictos de change management
  4. Enhanced Testing: Realiza pruebas exhaustivas antes de la actualización
  5. Enhanced Documentation: Documentación detallada del proceso y los resultados de la actualización

Conclusion

Actualizar correctamente un cluster de Amazon EKS requiere planificación, preparación y validación exhaustivas. Este documento cubrió estrategias, pasos y mejores prácticas para actualizar de forma segura los control planes, node groups y add-ons de clusters de EKS.

Puntos clave:

  1. EKS Upgrade Overview: Gestión de versiones de EKS, componentes y ruta de actualización
  2. Upgrade Planning and Preparation: Evaluación, preparación y pruebas de actualización
  3. EKS Control Plane Upgrade: Métodos de actualización del control plane y monitoreo
  4. Node Group Upgrade: Estrategias de actualización de managed y self-managed node groups
  5. Add-on Upgrade: Actualizaciones de add-ons administrados por AWS y self-managed add-ons
  6. Upgrade Validation and Troubleshooting: Validación de actualización y resolución de problemas comunes
  7. Upgrade Automation: Automatización de actualizaciones usando eksctl, AWS CLI y GitOps
  8. Upgrade Best Practices: Mejores prácticas generales y mejores prácticas específicas por industria

Mantener tu cluster de EKS actualizado te permite aprovechar parches de seguridad, correcciones de bugs y nuevas características, lo que mejora la seguridad, estabilidad y rendimiento generales de tu cluster.

References

Quiz

Para poner a prueba lo que aprendiste en este capítulo, intenta el cuestionario del tema.