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
- EKS Upgrade Overview
- Upgrade Planning and Preparation
- EKS Control Plane Upgrade
- Node Group Upgrade
- Add-on Upgrade
- Upgrade Validation and Troubleshooting
- Upgrade Automation
- 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:
- EKS Control Plane: Kubernetes API server, etcd, controller manager, etc.
- Node Groups: Worker nodes y AMI de nodes
- Add-ons: Add-ons administrados por AWS (por ejemplo, CoreDNS, kube-proxy, VPC CNI)
- 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:
- Planificación y preparación de la actualización
- Actualización del control plane de EKS
- Actualización de add-ons
- Actualización de node groups
- 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
# 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 | uniqResource 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:
# 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-namespacesCreate Backup
Haz backup de los datos importantes antes de la actualización:
# 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-namespaceTest Upgrade
Prueba la actualización en un entorno no productivo:
- Crea un cluster de prueba similar al entorno de producción
- Realiza la actualización en el cluster de prueba
- Prueba workloads y características
- 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:
aws eks describe-cluster --name my-cluster --query "cluster.version"Check Available Versions
Comprueba las versiones disponibles de Kubernetes:
aws eks describe-addon-versions --kubernetes-version 1.27Create 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
- Inicia sesión en AWS Management Console
- Navega al servicio Amazon EKS
- Selecciona el cluster que se va a actualizar en la lista de clusters
- Selecciona la pestaña "Cluster configuration"
- Haz clic en "Update Kubernetes version"
- Selecciona la versión objetivo y haz clic en "Update"
Upgrade Using AWS CLI
aws eks update-cluster-version \
--name my-cluster \
--kubernetes-version 1.27Upgrade Using eksctl
eksctl upgrade cluster \
--name my-cluster \
--version 1.27 \
--approveControl Plane Upgrade Monitoring
Check Upgrade Status
Comprueba el estado de la actualización:
# 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-clusterMonitor Cluster State
Monitorea el estado del cluster durante la actualización:
# 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
- Comprueba el estado de la actualización
- Revisa los logs de CloudTrail
- Revisa los logs del control plane de EKS
- 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:
aws eks describe-nodegroup \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--query "nodegroup.version"Upgrade Using AWS Management Console
- Inicia sesión en AWS Management Console
- Navega al servicio Amazon EKS
- Selecciona el cluster que se va a actualizar en la lista de clusters
- Selecciona la pestaña "Compute"
- Selecciona el node group que se va a actualizar
- Haz clic en "Update node group"
- Selecciona la versión objetivo y haz clic en "Update"
Upgrade Using AWS CLI
aws eks update-nodegroup-version \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--kubernetes-version 1.27Upgrade Using eksctl
eksctl upgrade nodegroup \
--cluster my-cluster \
--name my-nodegroup \
--kubernetes-version 1.27Managed 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)
aws eks update-nodegroup-config \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--update-config maxUnavailable=1Self-managed Node Group Upgrade
Blue/Green Deployment
El blue/green deployment crea un nuevo node group y luego migra los workloads:
- Crea un nuevo node group:
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- Migra los workloads:
# 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- Elimina el node group existente:
eksctl delete nodegroup \
--cluster my-cluster \
--name my-nodegroup-oldRolling Upgrade
Rolling upgrade drena y termina nodes uno por uno, y los reemplaza por nodes nuevos:
# 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
doneIn-place Upgrade
In-place upgrade actualiza kubelet y el container runtime en nodes existentes:
# 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
doneNode Upgrade Monitoring and Validation
Check Node Version
Comprueba la versión de Kubernetes de los nodes:
kubectl get nodes -o custom-columns=NAME:.metadata.name,VERSION:.status.nodeInfo.kubeletVersionCheck Node Status
Comprueba el estado de los nodes:
kubectl get nodes
kubectl describe nodesCheck Pod Deployment
Verifica que los pods estén desplegados normalmente:
kubectl get pods --all-namespaces -o wide
kubectl get pods --all-namespaces -o wide | grep -v RunningAdd-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:
aws eks list-addons --cluster-name my-clusterCheck Managed Add-on Version
Comprueba la versión actual de los add-ons administrados:
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:
aws eks describe-addon-versions \
--addon-name vpc-cni \
--kubernetes-version 1.27Upgrade Managed Add-ons
Puedes actualizar add-ons administrados usando AWS Management Console, AWS CLI o eksctl:
# 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 \
--preserveSelf-managed Add-ons
Upgrade Self-managed Add-ons
Actualiza self-managed add-ons usando Helm o kubectl:
# 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.yamlKey Add-on Upgrade Guides
CoreDNS Upgrade
CoreDNS proporciona service de DNS para el cluster de Kubernetes:
# 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 PRESERVEkube-proxy Upgrade
kube-proxy gestiona el networking de service de Kubernetes:
# 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 PRESERVEVPC CNI Upgrade
Amazon VPC CNI gestiona el networking de pod:
# 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 PRESERVEAdd-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
- Comprueba el estado del add-on:
aws eks describe-addon \
--cluster-name my-cluster \
--addon-name vpc-cni- Comprueba los logs del add-on:
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- Comprueba los events del add-on:
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:
# Check cluster version
kubectl version --short
# Check node version
kubectl get nodes -o custom-columns=NAME:.metadata.name,VERSION:.status.nodeInfo.kubeletVersionCheck Cluster State
Comprueba el estado de los componentes del cluster:
# 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-namespacesWorkload Validation
Verifica que los workloads de aplicación estén funcionando normalmente:
# 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-namespacesFunctional Testing
Prueba que las características clave estén funcionando normalmente:
- Pod Creation Test:
kubectl run nginx --image=nginx
kubectl get pod nginx
kubectl delete pod nginx- Service Creation Test:
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- Scaling Test:
kubectl create deployment nginx --image=nginx
kubectl scale deployment nginx --replicas=3
kubectl get deployment nginx
kubectl delete deployment nginxUpgrade Troubleshooting
Common Upgrade Issues
Problemas comunes que pueden ocurrir durante la actualización:
Control Plane Upgrade Failure:
- Problemas de disponibilidad del API server
- Problemas de la base de datos etcd
- Problemas de permisos de IAM
Node Upgrade Issues:
- Falla al drenar nodes
- Falla al iniciar nuevos nodes
- Incompatibilidad de versión de kubelet
Add-on Upgrade Issues:
- Conflictos de configuración
- Problemas de compatibilidad
- Restricciones de recursos
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
- Check Logs:
# 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- Check Events:
kubectl get events --all-namespaces --sort-by='.lastTimestamp'- Check Resource Status:
kubectl describe nodes
kubectl describe pods --all-namespaces | grep -A 10 "Events:"- Check API Version:
kubectl api-versionsRollback Procedure
Si los problemas de actualización no pueden resolverse, considera rollback:
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.
Node Group Rollback:
- Rollback al node group de la versión anterior:
# 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- Add-on Rollback:
- Rollback a la versión anterior del add-on:
aws eks update-addon \
--cluster-name my-cluster \
--addon-name vpc-cni \
--addon-version <previous-version> \
--resolve-conflicts PRESERVEUpgrade 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:
# 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.27Automation Using AWS CLI and Scripts
Puedes automatizar el proceso de actualización usando AWS CLI y shell scripts:
#!/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):
- Store Cluster Configuration in Git Repository:
# 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- Configure CI/CD Pipeline:
# .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.yamlAutomation Best Practices
Mejores prácticas para automatizar actualizaciones de EKS:
- Gradual Approach: Comienza con entornos no productivos y avanza hacia producción
- Rollback Plan: Implementa un mecanismo automatizado de rollback
- Validation Steps: Incluye pasos de validación automatizados después de la actualización
- Notifications: Configura notificaciones para éxito o falla de la actualización
- 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
- Version Selection: Selecciona una versión estable y revisa las notas de la versión
- Upgrade Schedule: Programa la actualización durante periodos de bajo tráfico
- Phased Approach: Comienza con entornos no productivos y avanza hacia producción
- Rollback Planning: Crea un plan de rollback en caso de problemas
Upgrade Preparation
- Backup: Haz backup de los datos importantes
- Resource Allocation: Asegura recursos suficientes para la actualización
- Compatibility Check: Verifica la compatibilidad de workloads y add-ons
- Deprecated API Identification: Identifica y actualiza workloads que usan APIs obsoletas
Upgrade Execution
- Control Plane First: Actualiza primero el control plane
- Add-ons Next: Actualiza los add-ons después de la actualización del control plane
- Nodes Last: Actualiza los nodes después de la actualización del control plane y de los add-ons
- Gradual Node Upgrade: Actualiza los nodes gradualmente para minimizar la interrupción de workloads
Post-upgrade
- Validation: Valida el estado del cluster y de los workloads
- Monitoring: Monitorea el cluster después de la actualización
- Documentation: Documenta el proceso y los resultados de la actualización
- 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:
- Canary Deployment: Comienza con algunos nodes o workloads y expande gradualmente
- Automation: Automatiza el proceso de actualización
- Enhanced Monitoring: Monitorea continuamente el estado del cluster durante la actualización
- Communication Plan: Comunica regularmente el estado de la actualización a las partes interesadas
- 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:
- Regulatory Compliance: Asegura que la actualización cumpla los requisitos regulatorios
- Risk Assessment: Realiza una evaluación de riesgos antes de la actualización
- Change Management: Sigue procesos estrictos de change management
- Enhanced Testing: Realiza pruebas exhaustivas antes de la actualización
- 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:
- EKS Upgrade Overview: Gestión de versiones de EKS, componentes y ruta de actualización
- Upgrade Planning and Preparation: Evaluación, preparación y pruebas de actualización
- EKS Control Plane Upgrade: Métodos de actualización del control plane y monitoreo
- Node Group Upgrade: Estrategias de actualización de managed y self-managed node groups
- Add-on Upgrade: Actualizaciones de add-ons administrados por AWS y self-managed add-ons
- Upgrade Validation and Troubleshooting: Validación de actualización y resolución de problemas comunes
- Upgrade Automation: Automatización de actualizaciones usando eksctl, AWS CLI y GitOps
- 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
- Amazon EKS Upgrade Documentation
- Kubernetes Versions and Version Skew
- EKS Managed Node Group Upgrade
- EKS Add-on Upgrade
- eksctl Documentation
- Kubernetes Upgrade Best Practices
Quiz
Para poner a prueba lo que aprendiste en este capítulo, intenta el cuestionario del tema.