Actualización de una versión de Kubernetes de clúster de Amazon EKS - Amazon EKS

Actualización de una versión de Kubernetes de clúster de Amazon EKS

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 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 del cliente de Kubernetes que cuentan con soporte oficial, realizan este proceso de reconexión de forma transparente.

Actualice la versión de Kubernetes de un clúster de Amazon EKS

Para actualizar la versión de Kubernetes del clúster
  1. 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.28 y uno de los nodos con la versión 1.27, debe actualizar los nodos a la versión 1.28 antes de actualizar el plano de control a la 1.29. 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.

  2. 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
  3. 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.

    1. 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.

    2. 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
  4. 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ón 1.23 para evitar interrupciones en la carga de trabajo. Para obtener más información, consulte Kubernetes 1.23 y Controlador CSI de Amazon EBS.

    • Kubernetes 1.24 y versiones posteriores utilizan containerd como el tiempo de ejecución predeterminado del contenedor. Si va a cambiar al tiempo de ejecución de containerd 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 de dockerd, el tiempo de ejecución del contenedor containerdcontiene 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.27 y quiere actualizarla a la 1.29. Primero debe actualizar su clúster de versión 1.27 a la versión 1.28 y, a continuación, actualizar su clúster de versión 1.28 a la versión 1.29.

    • Revise la compatibilidad de versiones entre kube-apiserver de Kubernetes y kubelet en sus nodos.

      • A partir de la versión de Kubernetes 1.28, en kubelet puede haber hasta tres versiones secundarias anteriores a kube-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 Kubernetes 1.25 o una más reciente, puede actualizar su clúster hasta tres versiones más avanzadas sin necesidad de actualizar la versión de kubelet. Por ejemplo, si kubelet está en la versión 1.25, puede actualizar la versión del clúster de Amazon EKS de 1.25 a 1.26 a 1.27 y a 1.28, mientras que kubelet permanezca en la versión 1.25.

      • Si el kubelet de sus nodos administrados y de Fargate está en la versión de Kubernetes 1.24 o anterior, es posible que solo haya hasta dos versiones secundarias anteriores a kube-apiserver. En otras palabras, si kubelet es versión 1.24 o anterior, solo puede actualizar el clúster hasta dos versiones más avanzadas. Por ejemplo, si kubelet está en la versión 1.21, puede actualizar la versión del clúster de Amazon EKS de 1.21 a 1.22 y a 1.23, pero no podrá actualizar el clúster a 1.24 mientras kubelet permanezca en 1.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 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ón 2.4.7 o posterior antes de actualizar la versión del clúster a 1.25. Para obtener más información, consulte las notas de la versión Kubernetes1,25.

    eksctl

    En este procedimiento, se requiere la versión 0.172.0 o posterior de eksctl. Puede verificar la versión con el siguiente comando:

    eksctl version

    Para obtener instrucciones sobre cómo instalar y actualizar eksctl, consulte Instalación en la documentación de eksctl.

    Actualice la versión de Kubernetes de su plano de control de Amazon EKS. Reemplace my-cluster por el nombre del clúster. Reemplace 1.29 por el número de versión compatible con Amazon EKS al que desea actualizar su clúster. Para ver una lista de los números de versiones compatibles, consulte Versiones de Amazon EKS de Kubernetes.

    eksctl upgrade cluster --name my-cluster --version 1.29 --approve

    La actualización puede tardar varios minutos en completarse.

    AWS Management Console
    1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home#/clusters.

    2. Elija el nombre del clúster de Amazon EKS que desea actualizar y elija Actualizar versión del clúster.

    3. En Versión de Kubernetes, seleccione la versión a la que desea actualizar el clúster y elija Actualizar.

    4. En Nombre del clúster, escriba el nombre del clúster y seleccione Confirmar.

      La actualización puede tardar varios minutos en completarse.

    AWS CLI
    1. Actualice el clúster de Amazon EKS con el siguiente comando de la AWS CLI. Reemplace los example values por los de su propiedad. Reemplace 1.29 por el número de versión compatible con Amazon EKS al que desea actualizar su clúster. Para ver una lista de los números de versiones compatibles, consulte Versiones de Amazon EKS de Kubernetes.

      aws eks update-cluster-version --region region-code --name my-cluster --kubernetes-version 1.29

      Un ejemplo de salida sería el siguiente.

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "InProgress",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.29"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
    2. Monitoree el estado de la actualización del clúster con el siguiente comando. Utilice el nombre del clúster e ID de actualización devueltos por el comando anterior. Cuando se muestra el estado Successful, la actualización se ha completado. La actualización puede tardar varios minutos en completarse.

      aws eks describe-update --region region-code --name my-cluster --update-id b5f0ba18-9a87-4450-b5a0-825e6e84496f

      Un ejemplo de salida sería el siguiente.

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "Successful",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.29"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
  5. 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.

  6. (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ó.

    1. 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.29, busque la última versión del escalador automático del clúster que comience por 1.29. Registre el número de versión semántica (1.29.n, por ejemplo) de esa versión para usarlo en el siguiente paso.

    2. 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 siguiente comando. Si es necesario, reemplace 1.29.n por su propio valor.

      kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.n
  7. (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 Kubernetes DaemonSet de su clúster. Reemplace vX.X.X con la versión Plugin de dispositivo NVidia/K8S 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
  8. 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.

  9. De ser necesario, actualice su versión de kubectl. Debe utilizar una versión de kubectl 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 de kubectl 1.28 trabaja con los clústeres Kubernetes, 1.27, 1.28 y 1.29. Puede comprobar su versión instalada actualmente con el siguiente comando.

    kubectl version --client