Actualización de una versión de Kubernetes de clúster de Amazon EKS
Cuando hay una nueva versión de Kubernetes disponible en Amazon EKS, puede actualizar el clúster de Amazon EKS a la versión más reciente.
importante
Una vez que actualice un clúster, no podrá cambiarlo a una versión anterior. Recomendamos que antes de actualizar a una nueva versión de Kubernetes revise la información en Versiones de Amazon EKS de Kubernetes y los pasos de actualización de este tema.
Las nuevas versiones de Kubernetes suelen presentar cambios significativos. Por ende, recomendamos que pruebe el comportamiento de las aplicaciones en la nueva versión de Kubernetes antes de realizar la actualización en los clústeres de producción. Para ello, puede crear un flujo de trabajo de integración continua con el fin de probar el comportamiento de la aplicación antes de pasar a una nueva versión de Kubernetes.
El proceso de actualización consiste en que Amazon EKS lance nodos de servidor de API nuevos con la versión actualizada de Kubernetes para sustituir a los existentes. Amazon EKS lleva a cabo una infraestructura estándar y una comprobación de estado de la disponibilidad del tráfico de red en estos nodos nuevos para verificar que funcionan según lo esperado. Sin embargo, una vez que haya iniciado la actualización del clúster, no podrá pausarla ni detenerla. Si cualquiera de estas comprobaciones falla, Amazon EKS revierte la implementación de la infraestructura y su clúster se mantiene en la versión anterior de Kubernetes. Las aplicaciones en ejecución no se ven afectadas y su clúster nunca queda en un estado no determinista o irrecuperable. Si fuese necesario, Amazon EKS realiza copias de seguridad de forma habitual a todos los clústeres administrados y existe un mecanismo de recuperación de clústeres. Evaluamos y mejoramos de forma constante nuestros procesos de administración de la infraestructura de Kubernetes.
Para actualizar el clúster, Amazon EKS requiere hasta cinco direcciones IP disponibles de las subredes que se especificaron cuando creó el clúster. Amazon EKS crea nuevas interfaces de red elástica de clúster (interfaces de red) en cualquiera de las subredes especificadas. Las interfaces de red se pueden crear en subredes diferentes a las que están las interfaces de red existentes, así que asegúrese de que las reglas del grupo de seguridad permitan la comunicación de clúster necesaria para cualquiera de las subredes que especificó al crear su clúster. Si alguna de las subredes especificadas al crear el clúster no existe, no tiene suficientes direcciones IP disponibles o no tiene reglas de grupo de seguridad que permitan la comunicación del clúster necesaria, la actualización puede tener errores.
nota
Para garantizar que el punto de conexión del servidor de API de su clúster esté siempre accesible, Amazon EKS ofrece un plano de control de Kubernetes y realiza actualizaciones sucesivas de las instancias del servidor API durante las operaciones de actualización. Para tener en cuenta los cambios en las direcciones IP de las instancias del servidor de API que admiten su punto de conexión del servidor API de Kubernetes, debe asegurarse de que los clientes de su servidor API gestionen las reconexiones de manera eficaz. Versiones recientes de kubectl
y las bibliotecas
Actualice la versión de Kubernetes de un clúster de Amazon EKS
Para actualizar la versión de Kubernetes del clúster
-
Compare la versión de Kubernetes de su plano de control de clúster con la versión de Kubernetes de sus nodos.
-
Obtenga la versión de Kubernetes del plano de control de clúster.
kubectl version --short
-
Obtenga la versión de Kubernetes de sus nodos. Este comando devuelve todos los nodos autoadministrados y administrados de Amazon EC2 y Fargate. Cada Pod de Fargate aparece como su propio nodo.
kubectl get nodes
Antes de actualizar un plano de control a una nueva versión de Kubernetes, asegúrese de que la versión secundaria de Kubernetes de ambos notos administrados y de Fargate en el clúster debe ser la misma que la de la versión actual del plano de control. Por ejemplo, si el plano de control está ejecutando la versión
1.26
y uno de los nodos está ejecutando la versión1.25
, debe actualizar los nodos a la versión1.26
antes de actualizar el plano de control a 1.27. También recomendamos que actualice los nodos autoadministrados a la misma versión que el plano de control antes de actualizar el plano de control. Para obtener más información, consulte Actualización de un grupo de nodos administrados y Actualizaciones de nodos autoadministrados. Si tiene nodos de Fargate con una versión secundaria inferior a la versión del plano de control, elimine primero el Pod que representa el nodo. Luego, actualice su plano de control. Los Pods restantes se actualizarán a la nueva versión después de volver a implementarlos. -
-
De manera predeterminada, el controlador de admisión de la política de seguridad del Pod se encuentra habilitado en clústeres de Amazon EKS. Antes de actualizar el clúster, asegúrese de que las políticas de seguridad del Pod adecuadas estén implementadas. Esto ocurre para evitar posibles problemas de seguridad. Puede consultar la política predeterminada con el comando
kubectl get psp eks.privileged
.kubectl get psp eks.privileged
Si recibe el siguiente error, consulte Política de seguridad predeterminada del Pod de Amazon EKS antes de continuar.
Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
-
Si la versión de Kubernetes con la que implementó originalmente el clúster era Kubernetes
1.18
o posterior, omita este paso.Es posible que deba eliminar un término interrumpido de su manifiesto CoreDNS.
-
Verifique si su manifiesto CoreDNS cuenta con una línea que solo tiene la palabra
upstream
.kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
Si no se devuelve un resultado, significa que el manifiesto no cuenta con la línea. En tal caso, continúe en el paso siguiente Si se devuelve la palabra
upstream
, elimine la línea. -
Elimine la línea que está cerca de la parte superior del archivo que solo tiene la palabra
upstream
en el archivo de configmap. No cambie nada más en el archivo. Después de eliminar la línea, guarde los cambios.kubectl edit configmap coredns -n kube-system -o yaml
-
-
Actualice el clúster mediante
eksctl
, la AWS Management Console o la AWS CLI.importante
-
Si va a actualizar a la versión
1.23
y usar volúmenes de Amazon EBS en el clúster, debe instalar el controlador CSI de Amazon EBS en el clúster antes de actualizar el clúster a la versión1.23
para evitar interrupciones en la carga de trabajo. Para obtener más información, consulte Kubernetes 1.23 y Controlador de CSI de Amazon EBS. -
Kubernetes
1.24
y versiones posteriores utilizancontainerd
como el tiempo de ejecución predeterminado del contenedor. Si va a cambiar al tiempo de ejecución decontainerd
y ya ha configurado Fluentd para Container Insights, debe migrar Fluentd a Fluent Bit antes de actualizar el clúster. Los analizadores de Fluentd están configurados para analizar únicamente los mensajes de registro en formato JSON. A diferencia dedockerd
, el tiempo de ejecución del contenedorcontainerd
contiene mensajes de registro que no están en formato JSON. Si no migra a Fluent Bit, algunos de los analizadores de Fluentd's configurados generarán una enorme cantidad de errores dentro del contenedor de Fluentd. por el número de versión compatible con Amazon EKS al que desea actualizar su clústerPara enviar registros a CloudWatch Logs, consulte Configurar Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs. -
Puesto que Amazon EKS ejecuta un plano de control de alta disponibilidad, puede actualizar solo una versión secundaria a la vez. Para obtener más información acerca de este requisito, consulte Política de compatibilidad de versiones y diferencia de versiones de Kubernetes
. Supongamos que la versión del clúster actual es la 1.25
y quiere actualizarla a la1.27
. Primero debe actualizar su clúster de versión1.25
a la versión1.26
y, a continuación, actualizar su clúster de versión1.26
a la versión1.27
. -
Asegúrese de que
kubelet
en sus nodos administrados y de Fargate se encuentren en la misma versión de Kubernetes que su plano de control antes de actualizar. Le recomendamos que los nodos autoadministrados sean la misma versión que el plano de control. Solo pueden estar hasta una versión detrás de la versión actual del plano de control. -
Si el clúster está configurado con una versión de Amazon VPC CNI plugin for Kubernetes anterior a
1.8.0
, le recomendamos actualizar el complemento a la versión más reciente antes de actualizar el clúster. Para actualizar el complemento, consulte Trabajar con el complemento Amazon VPC CNI plugin for Kubernetes de Amazon EKS. -
Si está actualizando el clúster a una versión
1.25
o posterior y ha implementado AWS Load Balancer Controller en el clúster, actualice el controlador a la versión2.4.7
o posterior antes de actualizar la versión del clúster a1.25
. Para obtener más información, consulte las notas de la versión Kubernetes 1.25.
-
-
Una vez que se complete la actualización del clúster, actualice los nodos a la misma versión secundaria de Kubernetes de su clúster actualizado. Para obtener más información, consulte Actualizaciones de nodos autoadministrados y Actualización de un grupo de nodos administrados. Los Pods nuevos que se lancen en Fargate tienen una versión de
kubelet
que coinciden con la versión del clúster. Los Pods de Fargate existentes no cambian. -
(Opcional) Si implementó el Cluster Autoscaler de Kubernetes en el clúster antes de actualizar este último, actualice dicho Cluster Autoscaler a la versión más reciente que coincida con la versión principal y secundaria de Kubernetes a las que actualizó.
-
Abra la página de versiones
del escalador automático del clúster en un navegador web y busque la versión más reciente del escalador automático del clúster que coincida con la versión principal y secundaria de Kubernetes de su clúster. Por ejemplo, si la versión de Kubernetes del clúster es 1.27
, busque la última versión del escalador automático del clúster que comience por1.27
. Registre el número de versión semántica (1.27.n
, por ejemplo) de esa versión para usarlo en el siguiente paso. -
Establezca la etiqueta de la imagen del escalador automático del clúster en la versión que ha registrado en el paso anterior con el comando siguiente. Si es necesario, reemplace
por su propio valor.1.27
.n
kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v
1.27
.n
-
-
(Solo para clústeres con nodos de GPU) Si el clúster tiene grupos de nodos compatibles con GPU (por ejemplo,
p3.2xlarge
), debe actualizar el complemento del dispositivo NVIDIA para KubernetesDaemonSet de su clúster. Reemplace
con la versión Plugin de dispositivo NVidia/K8SvX.X.X
deseada antes de ejecutar el siguiente comando. kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/
vX.X.X
/nvidia-device-plugin.yml -
Actualice los complementos Amazon VPC CNI plugin for Kubernetes, CoreDNS y
kube-proxy
. Recomendamos actualizar los complementos a las versiones mínimas que figuran en los tokens de las cuentas de servicio.-
Si está usando complementos de Amazon EKS, seleccione Clusters (Clústeres) en la consola de Amazon EKS y, a continuación, seleccione el nombre del clúster que actualizó en el panel de navegación izquierdo. Las notificaciones aparecen en la consola. Le informan que hay una versión nueva disponible para cada complemento que tenga una actualización disponible. Para actualizar un complemento, seleccione la pestaña Add-ons (Complementos). En uno de los cuadros de un complemento que tenga una actualización disponible, seleccione Update now (Actualizar ahora), seleccione una versión disponible y, a continuación, seleccione Update (Actualizar).
-
Como alternativa, puede utilizar la AWS CLI o
eksctl
para actualizar los complementos. Para obtener más información, consulte Actualización de un complemento.
-
-
De ser necesario, actualice su versión de
kubectl
. Debe utilizar una versión dekubectl
con una diferencia de versión de menos de un número que el plano del control del clúster de Amazon EKS. Por ejemplo, un cliente dekubectl
1.26
trabaja con los clústeres Kubernetes,1.25
,1.26
y1.27
. Puede comprobar su versión instalada actualmente con el siguiente comando.kubectl version --short --client