Ayude a mejorar esta página
¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.
Actualización del clúster existente a la nueva versión de Kubernetes
Cuando haya 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 Descripción del ciclo de vida de las versiones de Kubernetes en EKS 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 de 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 de API de Kubernetes, debe asegurarse de que los clientes de su servidor de 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
-
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 nodos 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 se ejecuta con la versión
1.30
y uno de los nodos con la versión1.29
, debe actualizar los nodos a la versión1.30
antes de actualizar el plano de control a la 1.31. 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 para un clúster y Actualización de los nodos autoadministrados para un clúster. 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. -
-
Si la versión de Kubernetes con la que implementó originalmente el clúster era Kubernetes
1.25
o posterior, omita este paso.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 de 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 Almacenamiento de volúmenes de Kubernetes con 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.29
y quiere actualizarla a la1.31
. Primero debe actualizar su clúster de versión1.29
a la versión1.30
y, a continuación, actualizar su clúster de versión1.30
a la versión1.31
. -
Revise la compatibilidad de versiones entre
kube-apiserver
de Kubernetes ykubelet
en sus nodos.-
A partir de la versión de Kubernetes
1.28
, enkubelet
puede haber hasta tres versiones secundarias anteriores akube-apiserver
. Consulte Política de compatibilidad de escalado entre versiones de Kubernetes. -
Si el
kubelet
de sus nodos administrados y de Fargate corresponde a la versión de Kubernetes1.25
o una más reciente, puede actualizar su clúster hasta tres versiones más avanzadas sin necesidad de actualizar la versión dekubelet
. Por ejemplo, sikubelet
está en la versión1.25
, puede actualizar la versión del clúster de Amazon EKS de1.25
a1.26
a1.27
y a1.28
, mientras quekubelet
permanezca en la versión1.25
. -
Si el
kubelet
de sus nodos administrados y de Fargate está en la versión de Kubernetes1.24
o anterior, es posible que solo haya hasta dos versiones secundarias anteriores akube-apiserver
. En otras palabras, sikubelet
es versión1.24
o anterior, solo puede actualizar el clúster hasta dos versiones más avanzadas. Por ejemplo, sikubelet
está en la versión1.21
, puede actualizar la versión del clúster de Amazon EKS de1.21
a1.22
y a1.23
, pero no podrá actualizar el clúster a1.24
mientraskubelet
permanezca en1.21
.
-
-
Como práctica recomendada antes de iniciar una actualización, asegúrese de que el
kubelet
de sus nodos esté en la misma versión de Kubernetes que la de su 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 Asignación de direcciones IP a Pods con CNI de Amazon VPC. -
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 Actualización de los nodos autoadministrados para un clúster y Actualización de un grupo de nodos administrados para un clúster. 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 Escalador automático de clústeres de Kubernetes en el clúster antes de actualizar este último, actualice dicho Escalador automático de clústeres 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 de clústeres 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.31
, busque la última versión del Escalador automático de clústeres que comience por1.31
. Registre el número de versión semántica (1.31.n
, por ejemplo) de esa versión para usarlo en el siguiente paso. -
Establezca la etiqueta de la imagen del Escalador automático de clústeres en la versión que ha registrado en el paso anterior con el siguiente comando. Si es necesario, reemplace
por su propio valor.1.31
.n
kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v
1.31
.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
/deployments/static/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 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 Complementos. En uno de los cuadros de un complemento que tenga una actualización disponible, seleccione Actualizar ahora, seleccione una versión disponible y, a continuación, seleccione 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 Amazon EKS.
-
-
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.30
trabaja con los clústeres Kubernetes,1.29
,1.30
y1.31
. Puede comprobar su versión instalada actualmente con el siguiente comando.kubectl version --client
Actualización a una versión anterior de Kubernetes en un clúster de Amazon EKS
No puede actualizar a una versión anterior de Kubernetes en un clúster de Amazon EKS. En su lugar, cree un clúster nuevo en una versión anterior de Amazon EKS y migre las cargas de trabajo.