Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Mejores prácticas para las actualizaciones de clústeres
sugerencia
Explore las
Esta guía muestra a los administradores de clústeres cómo planificar y ejecutar su estrategia de actualización de Amazon EKS. También describe cómo actualizar los nodos autogestionados, los grupos de nodos gestionados, los nodos Karpenter y los nodos Fargate. No incluye orientación sobre EKS Anywhere, Kubernetes autogestionado, AWS Outposts ni AWS Local Zones.
Descripción general de
Una versión de Kubernetes abarca tanto el plano de control como el plano de datos. Para garantizar un funcionamiento sin problemas, tanto el plano de control como el plano de datos deben ejecutar la misma versión secundaria de Kubernetes, como la 1.24.
-
Plano de control: la versión del plano de control la determina el servidor de API de Kubernetes. En los clústeres de Amazon EKS, AWS se encarga de administrar este componente. Las actualizaciones del plano de control se pueden iniciar mediante la API de AWS.
-
Plano de datos: la versión del plano de datos está asociada a las versiones de Kubelet que se ejecutan en sus nodos individuales. Es posible tener nodos en el mismo clúster que ejecuten diferentes versiones. Puede comprobar las versiones de todos los nodos ejecutando
kubectl get nodes.
Antes de actualizar
Si tiene pensado actualizar su versión de Kubernetes en Amazon EKS, hay algunas políticas, herramientas y procedimientos importantes que debe implementar antes de iniciar la actualización.
-
Comprenda las políticas de obsolescencia: obtenga un conocimiento profundo de cómo funciona la política de obsolescencia de Kubernetes.
Esté al tanto de cualquier cambio futuro que pueda afectar a sus aplicaciones actuales. Las versiones más recientes de Kubernetes suelen eliminar gradualmente ciertas API y funciones, lo que puede provocar problemas en la ejecución de las aplicaciones. -
Revise el registro de cambios de Kubernetes: revise minuciosamente el registro de cambios de Kubernetes
junto con las versiones de Amazon EKS Kubernetes para comprender cualquier posible impacto en su clúster, como los cambios importantes que puedan afectar a sus cargas de trabajo. -
Evalúe la Add-Ons compatibilidad del clúster: Amazon EKS no actualiza automáticamente un complemento cuando se publican nuevas versiones o después de actualizar el clúster a una nueva versión secundaria de Kubernetes. Consulte Cómo actualizar un complemento para comprender la compatibilidad de cualquier complemento de clúster existente con la versión de clúster a la que desea actualizarse.
-
Habilite el registro del plano de control: habilite el registro del plano de control para capturar los registros, los errores o los problemas que puedan surgir durante el proceso de actualización. Considere revisar estos registros para detectar cualquier anomalía. Pruebe las actualizaciones de los clústeres en un entorno que no sea de producción o integre pruebas automatizadas en su flujo de trabajo de integración continua para evaluar la compatibilidad de las versiones con sus aplicaciones, controladores e integraciones personalizadas.
-
Explore eksctl para la administración de clústeres: considere usar eksctl
para administrar su clúster de EKS. Le brinda la posibilidad de actualizar el plano de control, administrar los complementos y gestionar las actualizaciones de los nodos de trabajo listas para usar. -
Opte por los grupos de nodos gestionados o en modo automático: agilice y automatice las actualizaciones de los nodos de trabajo mediante el uso de grupos de nodos gestionados por EKS o en modo automático. Estas opciones simplifican el proceso y reducen la intervención manual.
-
Utilice el complemento de conversión de kubectl: aproveche el complemento de conversión de kubectl
para facilitar la conversión de los archivos de manifiesto de Kubernetes entre diferentes versiones de la API. Esto puede ayudar a garantizar que tus configuraciones sigan siendo compatibles con la nueva versión de Kubernetes.
Mantén tu clúster actualizado
Mantenerse al día con las actualizaciones de Kubernetes es fundamental para un entorno EKS seguro y eficiente, que refleje el modelo de responsabilidad compartida de Amazon EKS. Al integrar estas estrategias en su flujo de trabajo operativo, se posiciona para mantener clústeres seguros y actualizados que aprovechen al máximo las funciones y mejoras más recientes. Tácticas:
-
Política de versiones compatibles: de acuerdo con la comunidad de Kubernetes, Amazon EKS suele ofrecer tres versiones activas de Kubernetes. Una versión secundaria de Kubernetes cuenta con el soporte estándar de Amazon EKS durante los primeros 14 meses después de su lanzamiento. Cuando una versión supera la fecha de finalización del soporte estándar, pasa al periodo de soporte extendido durante los 12 meses siguientes. Los avisos de obsolescencia se emiten al menos 60 días antes de que una versión alcance la fecha de finalización del soporte estándar. Para obtener más información, consulte los documentos sobre el ciclo de vida de las versiones de EKS.
-
Auto-Upgrade Política: te recomendamos encarecidamente que te mantengas sincronizado con las actualizaciones de Kubernetes en tu clúster de EKS. Los clústeres que se ejecuten en una versión de Kubernetes que haya completado su ciclo de vida de 26 meses (14 meses de soporte estándar más 12 meses de soporte extendido) se actualizarán automáticamente a la siguiente versión. Ten en cuenta que puedes deshabilitar el soporte extendido. Si no se actualiza de forma proactiva antes del final de la vida útil de una versión, se desencadena una actualización automática, lo que podría interrumpir las cargas de trabajo y los sistemas. Para obtener información adicional, consulte las preguntas frecuentes sobre la versión de EKS.
-
Cree guías de actualización: establezca un proceso bien documentado para administrar las actualizaciones. Como parte de su enfoque proactivo, desarrolle runbooks y herramientas especializadas que se adapten a su proceso de actualización. Esto no solo mejora su preparación, sino que también simplifica las transiciones complejas. Establezca como práctica estándar actualizar sus clústeres al menos una vez al año. Esta práctica lo alinea con los avances tecnológicos continuos y, por lo tanto, aumenta la eficiencia y la seguridad de su entorno.
Consulte el calendario de lanzamientos de EKS
Consulta el calendario de lanzamientos de EKS Kubernetes para saber cuándo llegarán nuevas versiones y cuándo finalizará el soporte para versiones específicas. Por lo general, EKS publica tres versiones secundarias de Kubernetes al año, y cada versión secundaria tiene soporte durante unos 14 meses.
Además, consulta la información sobre las versiones iniciales de Kubernetes.
Comprenda cómo se aplica el modelo de responsabilidad compartida a las actualizaciones de los clústeres
Usted es responsable de iniciar la actualización tanto para el plano de control del clúster como para el plano de datos. Obtenga información sobre cómo iniciar una actualización. Al iniciar una actualización de un clúster, AWS gestiona la actualización del plano de control del clúster. Usted es responsable de actualizar el plano de datos, incluidos los módulos y complementos de Fargate. Debes validar y planificar las actualizaciones de las cargas de trabajo que se ejecutan en tu clúster para garantizar que su disponibilidad y sus operaciones no se vean afectadas tras la actualización del clúster
Actualice los clústeres in situ
EKS admite una estrategia de actualización de clústeres in situ. Esto mantiene los recursos del clúster y mantiene la coherencia de la configuración del clúster (por ejemplo, el punto final de la API, el OIDC, los ENis y los balanceadores de carga). Esto es menos molesto para los usuarios del clúster y utilizará las cargas de trabajo y los recursos existentes en el clúster sin que sea necesario volver a implementar las cargas de trabajo ni migrar los recursos externos (por ejemplo, el DNS o el almacenamiento).
Al realizar una actualización local del clúster, es importante tener en cuenta que solo se puede ejecutar una actualización de versión secundaria a la vez (por ejemplo, de la 1.24 a la 1.25).
Esto significa que si necesitas actualizar varias versiones, necesitarás una serie de actualizaciones secuenciales. Planificar las actualizaciones secuenciales es más complicado y conlleva un mayor riesgo de tiempo de inactividad. En esta situación, consulteEvalúe Blue/Green los clústeres como una alternativa a las actualizaciones de clústeres locales.
Actualice el plano de control y el plano de datos en secuencia
Para actualizar un clúster, tendrá que realizar las siguientes acciones:
-
Identifique y corrija el uso obsoleto o eliminado de las API en sus cargas de trabajo.
-
Asegúrese de que los grupos de nodos administrados, si se utilizan, estén en la misma versión de Kubernetes que el plano de control. Los grupos de nodos gestionados por EKS y los nodos creados por EKS Fargate Profiles admiten dos sesgos de versión menores entre el plano de control y el plano de datos para la versión 1.27 de Kubernetes y versiones anteriores. A partir de la versión 1.28 y versiones posteriores, los grupos de nodos gestionados por EKS y los nodos creados por EKS Fargate Profiles admiten un sesgo de 3 versiones menores entre el plano de control y el plano de datos. Por ejemplo, si la versión de tu plano de control de EKS es la 1.28, puedes usar de forma segura versiones de kubelet tan antiguas como la 1.25. Si la versión de EKS es la 1.27, la versión de kubelet más antigua que puede usar es la 1.25.
-
Actualice el plano de control del clúster mediante la consola o la CLI de AWS.
-
Revisa la compatibilidad de los complementos. Actualiza tus complementos y controladores personalizados de Kubernetes, según sea necesario.
-
Actualice el plano de datos del clúster. Actualiza tus nodos a la misma versión secundaria de Kubernetes que tu clúster actualizado.
sugerencia
Si el clúster se creó con el modo automático de EKS, no es necesario actualizar el plano de datos del clúster. Tras actualizar su plano de control, EKS Auto Mode comenzará a actualizar de forma gradual los nodos gestionados, respetando todos los presupuestos de interrupción de módulos. Asegúrese de supervisar estas actualizaciones para verificar el cumplimiento de sus requisitos operativos.
Utilice la documentación de EKS para crear una lista de verificación de actualización
La documentación de la versión de EKS Kubernetes incluye una lista detallada de los cambios para cada versión. Cree una lista de verificación para cada actualización.
Para obtener una guía específica sobre la actualización de la versión de EKS, consulte la documentación para ver los cambios y consideraciones importantes para cada versión.
Actualiza los complementos y componentes con la API de Kubernetes
Antes de actualizar un clúster, debes saber qué versiones de los componentes de Kubernetes estás usando. Haz un inventario de los componentes del clúster e identifica los componentes que utilizan directamente la API de Kubernetes. Esto incluye los componentes críticos del clúster, como los agentes de supervisión y registro, los escaladores automáticos del clúster, los controladores de almacenamiento en contenedores (por ejemplo, EBS CSI o EFS CSI), los controladores de entrada y cualquier otra carga de trabajo o complemento que dependa directamente de la API de Kubernetes.
sugerencia
Los componentes críticos del clúster suelen instalarse en un espacio de nombres *-system
kubectl get ns | grep '-system'
Una vez que hayas identificado los componentes que dependen de la API de Kubernetes, consulta su documentación para conocer los requisitos de actualización y compatibilidad de versiones. Por ejemplo, consulte la documentación de
Los clústeres suelen contener muchas cargas de trabajo que utilizan la API de Kubernetes y son necesarias para la funcionalidad de las cargas de trabajo, como los controladores de entrada, los sistemas de entrega continua y las herramientas de supervisión. Cuando actualizas un clúster de EKS, también debes actualizar los complementos y las herramientas de terceros para asegurarte de que son compatibles.
Consulte los siguientes ejemplos de complementos comunes y su documentación de actualización correspondiente:
-
CNI de Amazon VPC: Para ver la versión recomendada del complemento CNI de Amazon VPC para cada versión de clúster, consulte Actualización del complemento CNI de Amazon VPC para el complemento autogestionado de Kubernetes. Cuando se instala como Amazon EKS, solo se puede actualizar una versión secundaria a la Add-on vez.
-
kube-proxy: consulte Actualización del complemento autogestionado kube-proxy de Kubernetes.
-
CoreDNS: consulta Cómo actualizar el complemento autogestionado de CoreDNS.
-
Controlador de equilibrio de carga de AWS: el controlador de equilibrio de carga de AWS debe ser compatible con la versión de EKS que haya implementado. Consulte la guía de instalación para obtener más información.
-
Controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic Block Store (Amazon EBS): para obtener información sobre la instalación y la actualización, consulte Administrar el controlador CSI de Amazon EBS como complemento de Amazon EKS.
-
Controlador de la interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic File System (Amazon EFS): para obtener información sobre la instalación y la actualización, consulte el controlador CSI de Amazon EFS. https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html
-
Kubernetes Metrics Server: para obtener más información, consulte metrics-server en. https://kubernetes-sigs.github.io/metrics-server/
GitHub -
Kubernetes Cluster Autoscaler: Para actualizar la versión del Kubernetes Cluster Autoscaler, cambia la versión de la imagen en la implementación. El escalador automático de clústeres está estrechamente relacionado con el programador de Kubernetes. Siempre tendrás que actualizarlo cuando actualices el clúster. Revisa las GitHub versiones
para encontrar la dirección de la última versión correspondiente a tu versión secundaria de Kubernetes. -
Karpenter: Para obtener información sobre la instalación y la actualización, consulte la documentación de Karpenter. https://karpenter.sh/docs/upgrading/
sugerencia
No tiene que actualizar manualmente ninguna de las funciones del modo automático de Amazon EKS, incluidas las funciones de escalado automático de la computación, almacenamiento en bloques y equilibrio de carga.
Verifique los requisitos básicos de EKS antes de realizar la actualización
AWS requiere ciertos recursos de su cuenta para completar el proceso de actualización. Si estos recursos no están presentes, el clúster no se puede actualizar. La actualización del plano de control requiere los siguientes recursos:
-
Direcciones IP disponibles: Amazon EKS requiere hasta cinco direcciones IP disponibles de las subredes que especificó al crear el clúster para poder actualizarlo. De lo contrario, actualice la configuración del clúster para incluir nuevas subredes del clúster antes de realizar la actualización de la versión.
-
Función de IAM de EKS: la función de IAM del plano de control sigue presente en la cuenta con los permisos necesarios.
-
Si su clúster tiene habilitado el cifrado secreto, asegúrese de que el rol de IAM del clúster tenga permiso para usar la clave de AWS Key Management Service (AWS KMS).
Verifique las direcciones IP disponibles
Para actualizar el clúster, Amazon EKS requiere hasta cinco direcciones IP disponibles de las subredes que se especificaron cuando creó el clúster.
Para comprobar que las subredes tienen suficientes direcciones IP para actualizar el clúster, puede ejecutar el siguiente comando:
CLUSTER=<cluster name> aws ec2 describe-subnets --subnet-ids \ $(aws eks describe-cluster --name ${CLUSTER} \ --query 'cluster.resourcesVpcConfig.subnetIds' \ --output text) \ --query 'Subnets[*].[SubnetId,AvailabilityZone,AvailableIpAddressCount]' \ --output table ---------------------------------------------------- | DescribeSubnets | +---------------------------+--------------+-------+ | subnet-067fa8ee8476abbd6 | us-east-1a | 8184 | | subnet-0056f7403b17d2b43 | us-east-1b | 8153 | | subnet-09586f8fb3addbc8c | us-east-1a | 8120 | | subnet-047f3d276a22c6bce | us-east-1b | 8184 | +---------------------------+--------------+-------+
El asistente de métricas CNI de la VPC se
-
pertenecen al mismo conjunto de AZ que se seleccionan durante la creación del clúster.
-
pertenecen a la misma VPC proporcionada durante la creación del clúster
Considera la posibilidad de asociar bloques de CIDR adicionales si se agotan las direcciones IP del bloque de CIDR de la VPC existente. AWS permite la asociación de bloques de CIDR adicionales con su VPC de clúster existente, lo que amplía de manera efectiva su conjunto de direcciones IP. Esta expansión se puede lograr mediante la introducción de rangos de IP privadas adicionales (RFC 1918) o, si es necesario, rangos de IP públicas (que no sean RFC 1918). Debe agregar nuevos bloques de CIDR de la VPC y permitir que finalice la actualización de la VPC antes de que Amazon EKS pueda usar el nuevo CIDR. Después, puede actualizar las subredes a la VPC en función de los bloques de CIDR recién configurados.
Verifique el rol de IAM de EKS
Para comprobar que el rol de IAM está disponible y tiene la política de asunción de roles correcta en su cuenta, puede ejecutar los siguientes comandos:
CLUSTER=<cluster name> ROLE_ARN=$(aws eks describe-cluster --name ${CLUSTER} \ --query 'cluster.roleArn' --output text) aws iam get-role --role-name ${ROLE_ARN##*/} \ --query 'Role.AssumeRolePolicyDocument' { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Migre a EKS Add-ons
Amazon EKS instala automáticamente complementos como el complemento CNI de Amazon VPC para Kubernetes y CoreDNS para cada clústerkube-proxy. Add-ons puede autogestionarse o instalarse como Amazon EKS. Add-ons Amazon EKS Add-ons es una forma alternativa de administrar los complementos mediante la API de EKS.
Puede usar Amazon EKS Add-ons para actualizar versiones con un solo comando. Por ejemplo:
aws eks update-addon —cluster-name my-cluster —addon-name vpc-cni —addon-version version-number \ --service-account-role-arn arn:aws:iam::111122223333:role/role-name —configuration-values '{}' —resolve-conflicts PRESERVE
Compruebe si tiene algún EKS Add-ons con:
aws eks list-addons --cluster-name <cluster name>
aviso
Add-ons Los EKS no se actualizan automáticamente durante una actualización del plano de control. Debe iniciar las actualizaciones complementarias del EKS y seleccionar la versión deseada.
-
Usted es responsable de seleccionar una versión compatible de entre todas las versiones disponibles. Consulta la guía sobre la compatibilidad de las versiones complementarias.
-
Amazon EKS solo se Add-ons puede actualizar una versión secundaria a la vez.
Obtenga más información sobre los componentes que están disponibles como EKS Add-ons y cómo empezar.
Aprenda a proporcionar una configuración personalizada a un EKS Add-on.
Identifique y corrija el uso de API eliminado antes de actualizar el plano de control
Debe identificar el uso de las API eliminadas antes de actualizar su plano de control de EKS. Para ello, te recomendamos usar herramientas que puedan comprobar un clúster en ejecución o archivos de manifiesto de Kubernetes renderizados y estáticos.
Por lo general, la comprobación con los archivos de manifiesto estáticos es más precisa. Si se ejecutan en clústeres activos, estas herramientas pueden arrojar falsos positivos.
Una API de Kubernetes obsoleta no significa que la API se haya eliminado. Deberías consultar la política de obsolescencia de Kubernetes para saber cómo afecta la eliminación de la API
Cluster Insights
Cluster Insights es una función que proporciona información sobre problemas que pueden afectar a la capacidad de actualizar un clúster de EKS a versiones más recientes de Kubernetes. Amazon EKS selecciona y administra estos hallazgos y ofrece recomendaciones sobre cómo solucionarlos. Al aprovechar Cluster Insights, puede minimizar el esfuerzo dedicado a actualizar a las versiones más recientes de Kubernetes.
Para ver la información de un clúster de EKS, puedes ejecutar el comando:
aws eks list-insights --region <region-code> --cluster-name <my-cluster> { "insights": [ { "category": "UPGRADE_READINESS", "name": "Deprecated APIs removed in Kubernetes v1.29", "insightStatus": { "status": "PASSING", "reason": "No deprecated API usage detected within the last 30 days." }, "kubernetesVersion": "1.29", "lastTransitionTime": 1698774710.0, "lastRefreshTime": 1700157422.0, "id": "123e4567-e89b-42d3-a456-579642341238", "description": "Checks for usage of deprecated APIs that are scheduled for removal in Kubernetes v1.29. Upgrading your cluster before migrating to the updated APIs supported by v1.29 could cause application impact." } ] }
Para obtener un resultado más descriptivo sobre la información recibida, puede ejecutar el comando:
aws eks describe-insight --region <region-code> --id <insight-id> --cluster-name <my-cluster>
También tiene la opción de ver la información en la consola de Amazon EKSUpgrade Insights pestaña.
Si encuentra un clúster con Insight"status": ERROR, debe solucionar el problema antes de realizar la actualización del clúster. Ejecute el aws eks describe-insight comando que compartirá los siguientes consejos de corrección:
Recursos afectados:
"resources": [ { "insightStatus": { "status": "ERROR" }, "kubernetesResourceUri": "/apis/policy/v1beta1/podsecuritypolicies/null" } ]
API en desuso:
"deprecationDetails": [ { "usage": "/apis/flowcontrol.apiserver.k8s.io/v1beta2/flowschemas", "replacedWith": "/apis/flowcontrol.apiserver.k8s.io/v1beta3/flowschemas", "stopServingVersion": "1.29", "clientStats": [], "startServingReplacementVersion": "1.26" } ]
Acción recomendada a tomar:
"recommendation": "Update manifests and API clients to use newer Kubernetes APIs if applicable before upgrading to Kubernetes v1.26."
Utilizar la información del clúster a través de la consola o la CLI de EKS ayuda a acelerar el proceso de actualización satisfactoria de las versiones del clúster de EKS. Obtenga más información en los siguientes recursos: * Documentos oficiales de EKS * Blog de lanzamiento de Cluster Insights
Kube-no-trouble
Kube-no-troublekubent. Si la ejecutas kubent sin ningún argumento, usará tu KubeConfig contexto actual, escaneará el clúster e imprimirá un informe con las API que quedarán obsoletas y eliminadas.
kubent 4:17PM INF >>> Kube No Trouble `kubent` <<< 4:17PM INF version 0.7.0 (git sha d1bb4e5fd6550b533b2013671aa8419d923ee042) 4:17PM INF Initializing collectors and retrieving data 4:17PM INF Target K8s version is 1.24.8-eks-ffeb93d 4:l INF Retrieved 93 resources from collector name=Cluster 4:17PM INF Retrieved 16 resources from collector name="Helm v3" 4:17PM INF Loaded ruleset name=custom.rego.tmpl 4:17PM INF Loaded ruleset name=deprecated-1-16.rego 4:17PM INF Loaded ruleset name=deprecated-1-22.rego 4:17PM INF Loaded ruleset name=deprecated-1-25.rego 4:17PM INF Loaded ruleset name=deprecated-1-26.rego 4:17PM INF Loaded ruleset name=deprecated-future.rego __________________________________________________________________________________________ >>> Deprecated APIs removed in 1.25 <<< ------------------------------------------------------------------------------------------ KIND NAMESPACE NAME API_VERSION REPLACE_WITH (SINCE) PodSecurityPolicy <undefined> eks.privileged policy/v1beta1 <removed> (1.21.0)
También se puede usar para escanear archivos de manifiesto estáticos y paquetes Helm. Se recomienda ejecutarlo kubent como parte de un proceso de integración continua (CI) para identificar los problemas antes de que se desplieguen los manifiestos. El escaneo de los manifiestos también es más preciso que el escaneo de clústeres activos.
Kube-no-trouble proporciona un ejemplo de cuenta y rol de servicio
Plutón
Otra opción es Plutónkubent porque permite escanear un clúster activo, archivos de manifiesto, gráficos de control y tiene una GitHub acción que puedes incluir en tu proceso de CI.
pluto detect-all-in-cluster NAME KIND VERSION REPLACEMENT REMOVED DEPRECATED REPL AVAIL eks.privileged PodSecurityPolicy policy/v1beta1 false true true
Recursos
Para comprobar que tu clúster no utilice las API obsoletas antes de la actualización, debes supervisar:
-
métrica
apiserver_requested_deprecated_apisdesde la versión 1.19 de Kubernetes:
kubectl get --raw /metrics | grep apiserver_requested_deprecated_apis apiserver_requested_deprecated_apis{group="policy",removed_release="1.25",resource="podsecuritypolicies",subresource="",version="v1beta1"} 1
-
los eventos en los registros de auditoría están configurados en:
k8s.io/deprecatedtrue
CLUSTER="<cluster_name>" QUERY_ID=$(aws logs start-query \ --log-group-name /aws/eks/${CLUSTER}/cluster \ --start-time $(date -u --date="-30 minutes" "+%s") # or date -v-30M "+%s" on MacOS \ --end-time $(date "+%s") \ --query-string 'fields @message | filter `annotations.k8s.io/deprecated`="true"' \ --query queryId --output text) echo "Query started (query id: $QUERY_ID), please hold ..." && sleep 5 # give it some time to query aws logs get-query-results --query-id $QUERY_ID
Lo que generará líneas si se utilizan las API obsoletas:
{ "results": [ [ { "field": "@message", "value": "{\"kind\":\"Event\",\"apiVersion\":\"audit.k8s.io/v1\",\"level\":\"Request\",\"auditID\":\"8f7883c6-b3d5-42d7-967a-1121c6f22f01\",\"stage\":\"ResponseComplete\",\"requestURI\":\"/apis/policy/v1beta1/podsecuritypolicies?allowWatchBookmarks=true\\u0026resourceVersion=4131\\u0026timeout=9m19s\\u0026timeoutSeconds=559\\u0026watch=true\",\"verb\":\"watch\",\"user\":{\"username\":\"system:apiserver\",\"uid\":\"8aabfade-da52-47da-83b4-46b16cab30fa\",\"groups\":[\"system:masters\"]},\"sourceIPs\":[\"::1\"],\"userAgent\":\"kube-apiserver/v1.24.16 (linux/amd64) kubernetes/af930c1\",\"objectRef\":{\"resource\":\"podsecuritypolicies\",\"apiGroup\":\"policy\",\"apiVersion\":\"v1beta1\"},\"responseStatus\":{\"metadata\":{},\"code\":200},\"requestReceivedTimestamp\":\"2023-10-04T12:36:11.849075Z\",\"stageTimestamp\":\"2023-10-04T12:45:30.850483Z\",\"annotations\":{\"authorization.k8s.io/decision\":\"allow\",\"authorization.k8s.io/reason\":\"\",\"k8s.io/deprecated\":\"true\",\"k8s.io/removed-release\":\"1.25\"}}" }, [...]
Actualiza las cargas de trabajo de Kubernetes. Usa kubectl-convert para actualizar los manifiestos
Una vez que hayas identificado qué cargas de trabajo y manifiestos deben actualizarse, es posible que tengas que cambiar el tipo de recurso en tus archivos de manifiesto (por ejemplo, a). PodSecurityPolicies PodSecurityStandards Para ello, será necesario actualizar la especificación del recurso e investigar más en función del recurso que se vaya a reemplazar.
Si el tipo de recurso sigue siendo el mismo pero es necesario actualizar la versión de la API, puedes usar el kubectl-convert comando para convertir automáticamente tus archivos de manifiesto. Por ejemplo, para convertir una implementación anterior enapps/v1. Para obtener más información, consulta Cómo instalar el complemento de conversión de kubectl
kubectl-convert -f <file> --output-version <group>/<version>
Configure PodDisruptionBudgets la topología SpreadConstraints para garantizar la disponibilidad de sus cargas de trabajo mientras se actualiza el plano de datos
Asegúrese de que sus cargas de trabajo tengan la topología adecuada PodDisruptionBudgets
Asegúrese de que las cargas de trabajo estén distribuidas en varias zonas de disponibilidad y en varios hosts con distribuciones de topología para tener un mayor nivel de confianza en que las cargas de trabajo migrarán al nuevo plano de datos automáticamente y sin incidentes.
Este es un ejemplo de carga de trabajo que siempre tendrá el 80% de las réplicas disponibles y distribuirá las réplicas entre zonas y hosts
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: myapp spec: minAvailable: "80%" selector: matchLabels: app: myapp --- apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 10 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2 name: myapp resources: requests: cpu: "1" memory: 256M topologySpreadConstraints: - labelSelector: matchLabels: app: host-zone-spread maxSkew: 2 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule - labelSelector: matchLabels: app: host-zone-spread maxSkew: 2 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule
AWS Resilience Hub
Utilice Managed Node Groups o Karpenter para simplificar las actualizaciones del plano de datos
Tanto Managed Node Groups como Karpenter simplifican las actualizaciones de nodos, pero adoptan enfoques diferentes.
Los grupos de nodos administrados automatizan el aprovisionamiento y la administración del ciclo de vida de los nodos. Esto significa que puedes crear, actualizar automáticamente o terminar nodos con una sola operación.
En la configuración predeterminada, Karpenter crea automáticamente nuevos nodos utilizando la última AMI optimizada de EKS compatible. A medida que EKS publique las AMI optimizadas para EKS actualizadas o se actualice el clúster, Karpenter comenzará a usar estas imágenes automáticamente. Karpenter también implementa Node Expiry para actualizar los nodos.
Karpenter se puede configurar para usar AMI personalizadas.
Confirme la compatibilidad de la versión con los nodos existentes y el plano de control
Antes de continuar con la actualización de Kubernetes en Amazon EKS, es fundamental garantizar la compatibilidad entre los grupos de nodos gestionados, los nodos autogestionados y el plano de control. La compatibilidad viene determinada por la versión de Kubernetes que utilice y varía en función de los distintos escenarios. Tácticas:
-
Kubernetes v1.28+ — * * A partir de la versión 1.28 de Kubernetes en adelante, existe una política de versiones más indulgente para los componentes principales. En concreto, el sesgo admitido entre el servidor de API de Kubernetes y el kubelet se ha ampliado con una versión secundaria, pasando de n-2 a n-3. Por ejemplo, si la versión de tu plano de control de EKS es la 1.28, puedes usar de forma segura versiones de kubelet tan antiguas como la 1.25. Este sesgo de versión se admite en AWS Fargate, en los grupos de nodos gestionados y en los nodos autogestionados. https://docs.aws.amazon.com/eks/latest/userguide/worker.html Le recomendamos encarecidamente que mantenga actualizadas las versiones de Amazon Machine Image (AMI) por motivos de seguridad. Las versiones anteriores de kubelet pueden plantear riesgos de seguridad debido a las posibles vulnerabilidades y exposiciones comunes (CVE), que podrían superar las ventajas de usar versiones anteriores de kubelet.
-
Kubernetes < v1.28: si utilizas una versión anterior a la v1.28, el sesgo admitido entre el servidor de API y el kubelet es n-2. Por ejemplo, si tu versión de EKS es la 1.27, la versión de kubelet más antigua que puedes usar es la 1.25. Este sesgo de versión se aplica a AWS Fargate, a los grupos de nodos administrados y a los nodos autogestionados. https://docs.aws.amazon.com/eks/latest/userguide/worker.html
Habilite la caducidad de los nodos para los nodos gestionados por Karpenter
Una forma en que Karpenter implementa las actualizaciones de nodos es mediante el concepto de caducidad de los nodos. Esto reduce la planificación necesaria para las actualizaciones de los nodos. Cuando estableces un valor para ttl SecondsUntilExpired en tu aprovisionador, se activa la caducidad del nodo. Cuando los nodos alcanzan la antigüedad definida en segundos, se vacían y eliminan de forma segura. Esto es así incluso si están en uso, lo que te permite reemplazar los nodos por instancias actualizadas recién aprovisionadas. Cuando se reemplaza un nodo, Karpenter usa las AMI más recientes. EKS-optimized Para obtener más información, consulte Disruption
Karpenter no añade automáticamente fluctuación a este valor. Para evitar una interrupción excesiva de la carga de trabajo, defina un presupuesto para interrumpir los módulos, tal y como se muestra en la
Si configuras ttl SecondsUntilExpired en un aprovisionador, esto se aplica a los nodos existentes asociados al aprovisionador.
Utilice la función Drift para los nodos administrados por Karpenter
La función Drift de Karpenter
Una vez completada la actualización de un clúster de EKS, la función Drift de Karpenter detectará que los Karpenter-provisioned nodos utilizan las EKS-Optimized AMI de la versión anterior del clúster y acordonará, agotará y reemplazará automáticamente esos nodos. Para permitir que los pods se trasladen a nuevos nodos, siga las prácticas recomendadas de Kubernetes y establezca las cuotas de
Utilice eksctl para automatizar las actualizaciones de los grupos de nodos autogestionados
Los grupos de nodos autogestionados son instancias de EC2 que se implementaron en su cuenta y se adjuntaron al clúster fuera del servicio EKS. Por lo general, se implementan y administran mediante algún tipo de herramienta de automatización. Para actualizar los grupos de nodos autogestionados, debe consultar la documentación de las herramientas.
Por ejemplo, eksctl admite la eliminación y el drenaje de nodos autogestionados.
Algunas herramientas comunes incluyen:
Haga una copia de seguridad del clúster antes de actualizarlo
Las nuevas versiones de Kubernetes introducen cambios importantes en su clúster de Amazon EKS. Puede deshacer una actualización en un plazo de 7 días, pero le recomendamos que haga una copia de seguridad del clúster antes de la actualización.
Puede hacer una copia de seguridad de su clúster con AWS Backup, un servicio totalmente gestionado. También puede usar Velero
Tenga en cuenta que solo puede crear clústeres nuevos para las versiones de Kubernetes que EKS admite actualmente. Si la versión que ejecuta actualmente su clúster sigue siendo compatible y se produce un error en la actualización, puede crear un nuevo clúster con la versión original y restaurar el plano de datos. Tenga en cuenta que los recursos de AWS, incluida la IAM, no se incluyen en la copia de seguridad. Debe volver a crear estos recursos.
Reinicie las implementaciones de Fargate después de actualizar el plano de control
Para actualizar los nodos del plano de datos de Fargate, debe volver a implementar las cargas de trabajo. Puede identificar qué cargas de trabajo se están ejecutando en los nodos de Fargate enumerando todos los pods con la opción. -o wide Cualquier nombre de nodo que comience por fargate- tendrá que volver a implementarse en el clúster.
Evalúe Blue/Green los clústeres como una alternativa a las actualizaciones de clústeres locales
Algunos clientes prefieren adoptar una estrategia de blue/green actualización. Esto puede tener beneficios, pero también incluye desventajas que deben tenerse en cuenta.
Los beneficios incluyen:
-
Es posible cambiar varias versiones de EKS a la vez (por ejemplo, de la 1.23 a la 1.25)
-
Es capaz de volver al clúster anterior
-
Crea un nuevo clúster que puede administrarse con sistemas más nuevos (por ejemplo, terraform)
-
Las cargas de trabajo se pueden migrar de forma individual
Algunas desventajas incluyen:
-
El punto final de la API y el OIDC cambian, lo que requiere actualizar a los consumidores (por ejemplo, kubectl y) CI/CD
-
Requiere que se ejecuten 2 clústeres en paralelo durante la migración, lo que puede resultar caro y limitar la capacidad de la región
-
Se necesita una mayor coordinación si las cargas de trabajo dependen unas de otras para poder migrar juntas
-
Los balanceadores de carga y el DNS externo no pueden abarcar fácilmente varios clústeres
Si bien esta estrategia es posible, es más cara que una actualización local y requiere más tiempo para la coordinación y las migraciones de la carga de trabajo. Puede ser necesaria en algunas situaciones y debe planificarse con cuidado.
Con altos grados de automatización y sistemas declarativos como este GitOps, esto puede ser más fácil de hacer. Tendrá que tomar precauciones adicionales para evitar que las cargas de trabajo estén en buen estado, de modo que se hagan copias de seguridad de los datos y se migren a nuevos clústeres.
Consulte estas publicaciones de blog para obtener más información:
Haga un seguimiento de los principales cambios planificados en el proyecto Kubernetes: piense en el futuro
No te fijes solo en la próxima versión. Revisa las nuevas versiones de Kubernetes a medida que se publiquen e identifica los cambios principales. Por ejemplo, algunas aplicaciones utilizaban directamente la API de Docker y en Kubernetes se eliminó la compatibilidad con la interfaz de ejecución de contenedores (CRI) para Docker (también conocida como Dockershim). 1.24 Este tipo de cambio requiere más tiempo para prepararse.
Revisa todos los cambios documentados de la versión a la que estás actualizando y anota los pasos de actualización necesarios. Además, anote los requisitos o procedimientos específicos de los clústeres gestionados por Amazon EKS.
Guía específica sobre la eliminación de funciones
Eliminación de Dockershim en la versión 1.25: utilice el detector para Docker Socket (DDS)
La AMI optimizada de EKS para la versión 1.25 ya no incluye soporte para Dockershim. Si tienes una dependencia de Dockershim, por ejemplo, si estás montando el socket Docker, tendrás que eliminar esas dependencias antes de actualizar tus nodos de trabajo a la versión 1.25.
Busca instancias en las que dependas del socket Docker antes de actualizar a la versión 1.25. Recomendamos usar Detector for Docker Socket (DDS), un complemento de kubectl.
Eliminación de la versión PodSecurityPolicy 1.25: migración a los estándares de seguridad de Pod o a una solución de política como código
PodSecurityPolicydejó de estar disponible en Kubernetes 1.21 y se ha eliminado en Kubernetes 1.25
AWS publicó una sección detallada de preguntas frecuentes en la documentación de EKS. https://docs.aws.amazon.com/eks/latest/userguide/pod-security-policy-removal-faq.html
Revisa las mejores prácticas de los estándares de seguridad para
Consulta la entrada del blog sobre PodSecurityPolicy obsolescencia
El controlador de In-Tree almacenamiento en la versión 1.23 dejó de estar disponible: migre a los controladores de la interfaz de almacenamiento en contenedores (CSI)
La interfaz de almacenamiento en contenedores (CSI) se diseñó para ayudar a Kubernetes a reemplazar sus actuales mecanismos de controladores de almacenamiento integrados en el árbol. La característica de migración de la interfaz de almacenamiento de contenedores (CSI) de Amazon EBS está habilitada de forma predeterminada en Amazon EKS 1.23 y los clústeres posteriores. Si tiene pods ejecutándose en una versión 1.22 o un clúster anterior, debe instalar el controlador CSI de Amazon EBS antes de actualizar el clúster a la versión para evitar la interrupción del servicio. 1.23
Consulta las preguntas frecuentes sobre la migración del CSI a Amazon EBS.
Recursos adicionales
ClowdHaus Guía de actualización de EKS
ClowdHaus
GoNoGo
GoNoGo