Realización de una actualización de Kubernetes de nodo gestionado in situ sincronizando nodos en un pool de nodos existente

Descubra cómo actualizar la versión de Kubernetes en los nodos gestionados de un pool de nodos cambiando las propiedades del pool de nodos existente y, a continuación, sincronizando los nodos mediante Container Engine for Kubernetes (OKE).

Nota

Solo puede sincronizar nodos para realizar una actualización de Kubernetes de nodo gestionado in situ al utilizar clusters mejorados. Consulte Working with Enhanced Clusters and Basic Clusters.

No puede sincronizar nodos con unidades con hardware dedicado. En su lugar, actualice los nodos con unidades con hardware dedicado sustituyendo manualmente los nodos existentes o el pool de nodos existente. Consulte Performing a In-Place Managed Node Kubernetes Upgrade by Manually Replacing Nodes an Existing Node Pool y Performing a Out-of-Place Managed Node Kubernetes Upgrade by Replacing an Existing Node Pool with a New Node Pool.

Esta sección solo se aplica a los nodos gestionados. Para obtener información sobre la actualización de nodos autogestionados, consulte Actualización de nodos autogestionados a una versión más reciente de Kubernetes mediante la sustitución de un nodo autogestionado existente.

Para actualizar la versión de Kubernetes que se ejecuta en los nodos gestionados de un pool de nodos, especifique una versión de Kubernetes más reciente para el pool de nodos existente y, a continuación, sincronice los nodos. Antes de sincronizar los nodos, puede especificar un número máximo permitido de nodos nuevos que se pueden crear durante la operación de actualización y un número máximo permitido de nodos que pueden no estar disponibles.

Al sincronizar los nodos, Container Engine for Kubernetes sustituye automáticamente todos los nodos gestionados existentes por nuevos nodos que ejecutan la versión de Kubernetes más reciente especificada.

Al sincronizar los nodos, Container Engine for Kubernetes conecta, drena y termina los nodos según las opciones de Cordon and dren del pool de nodos.

Equilibrio entre la disponibilidad y el costo del servicio al sincronizar los nodos gestionados

Container Engine for Kubernetes utiliza dos estrategias al sincronizar nodos:

  • Cree nodos nuevos (adicionales) y, a continuación, elimine los nodos existentes: Container Engine for Kubernetes agrega un nodo (o nodos) adicional al pool de nodos, ejecutando la versión más reciente de Kubernetes. Cuando el nodo adicional está activo, Container Engine for Kubernetes conecta un nodo existente, drena el nodo y elimina el nodo del pool de nodos. Esta estrategia mantiene la disponibilidad del servicio, pero cuesta más.
  • Elimine los nodos existentes y, a continuación, cree nuevos nodos: Container Engine for Kubernetes conecta un nodo (o nodos) existente para que no esté disponible, drena el nodo y elimina el nodo del pool de nodos. Cuando se ha eliminado el nodo, Container Engine for Kubernetes agrega un nuevo nodo al pool de nodos para sustituir el nodo que se ha eliminado. Esta estrategia cuesta menos, pero puede comprometer la disponibilidad del servicio.

Para adaptar el comportamiento de Container Engine for Kubernetes a sus propios requisitos de disponibilidad y costo del servicio, puede controlar y equilibrar las dos estrategias especificando:

  • Número de nodos adicionales que se permiten temporalmente durante la operación de actualización (denominada maxSurge). Cuanto mayor sea el número de nodos adicionales que permita, más nodos Container Engine for Kubernetes se pueden actualizar en paralelo sin comprometer la disponibilidad del servicio. Sin embargo, cuanto mayor sea el número de nodos adicionales que permita, mayor será el costo.
  • Número de nodos que dejarán de estar disponibles durante la operación de actualización (denominada maxUnavailable). Cuanto mayor sea el número de nodos que permite que no estén disponibles, más nodos Container Engine for Kubernetes se pueden actualizar en paralelo sin aumentar los costos. Sin embargo, cuanto mayor sea el número de nodos que permite que no estén disponibles, mayor será la disponibilidad del servicio.

En ambos casos, puede especificar el número permitido de nodos como un entero o como un porcentaje del número de nodos que se muestra en la propiedad Recuento de nodos del pool de nodos en la consola (propiedad Tamaño del pool de nodos en la API). Si no especifica explícitamente los números permitidos para los nodos adicionales (maxSurge) y los nodos no disponibles (maxUnavailable), se aplican los siguientes valores por defecto:

  • Si no especifica un valor para maxSurge o maxUnavailable, maxSurge se define por defecto en 1 y maxUnavailable se define por defecto en 0.
  • Si solo especifica un valor para maxSurge, maxUnavailable se establece por defecto en 0.
  • Si solo especifica un valor para maxUnavailable, maxSurge se establece por defecto en 1.

No puede especificar 0 como el número permitido para nodos adicionales (maxSurge) y nodos no disponibles (maxUnavailable).

Tenga en cuenta lo siguiente:

  • Al final de la operación de cambio de versión, el número de nodos del pool de nodos vuelve al número especificado por la propiedad Recuento de nodos del pool de nodos que se muestra en la consola (la propiedad Tamaño del pool de nodos en la API).
  • Si especifica un valor para maxSurge durante la operación de cambio de versión, su arrendamiento debe tener suficiente cuota para el número de nodos adicionales que especifique.
  • Si especifica un valor para maxUnavailable durante la operación ugrade, pero el pool de nodos no puede hacer que ese número de nodos no esté disponible (por ejemplo, debido a un presupuesto de interrupción de pod), la operación de actualización falla.
  • Si introduce un porcentaje como valor de maxSurge o maxUnavailable, Container Engine for Kubernetes redondea al alza el porcentaje al entero más cercano al calcular el número permitido de nodos.
  • Si ha utilizado kubectl para actualizar nodos directamente (por ejemplo, para aplicar una etiqueta personalizada a un nodo), estos cambios se pierden cuando Container Engine for Kubernetes sincroniza los nodos.
  • Al actualizar pools de nodos grandes, tenga en cuenta que los valores que especifique para maxSurge y maxUnavailable pueden provocar tiempos de ciclo inaceptablemente largos. Por ejemplo, si especifica 1 como valor para maxSurge al sincronizar los nodos de un pool de nodos con 1000 nodos, Container Engine for Kubernetes puede tardar varios días en sincronizar todos los nodos del pool de nodos. Si la operación de sincronización de nodos no se completa en un plazo de 30 días, el estado de la solicitud de trabajo asociada se establece en Con fallos. Ejecute otra solicitud de sincronización de nodo para reanudar la operación.

Uso de la consola

Para realizar una actualización "in situ" de un pool de nodos en un cluster, especifique una versión de Kubernetes más reciente para el pool de nodos existente y, a continuación, sincronice los nodos:

  1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Contenedores y artefactos, haga clic en Clusters de Kubernetes (OKE).
  2. Seleccione un compartimento en el que tenga permiso para trabajar.
  3. En la página Lista de clusters, haga clic en el nombre del cluster en el que desea cambiar la versión de Kubernetes que se ejecuta en los nodos gestionados.
  4. En la página Cluster, muestre el separador Pools de nodos y haga clic en el nombre del pool de nodos en el que desea actualizar la versión de Kubernetes que se ejecuta en los nodos gestionados.

  5. En la página Grupo de nodos, haga clic en Editar y, en el campo Versión, especifique la versión de Kubernetes necesaria para los nodos gestionados.

    La versión de Kubernetes que especifique debe ser compatible con la versión que se está ejecutando en los nodos de plano de control.

  6. Haga clic en Guardar cambios para guardar el cambio.

    Ahora sincroniza los nodos para suprimir automáticamente los nodos gestionados existentes e iniciar nuevos nodos gestionados que ejecuten la versión de Kubernetes especificada.

    Se recomienda: aproveche los presupuestos de interrupción de pod según corresponda en su aplicación para garantizar que haya un número suficiente de pods de réplica en ejecución durante la operación de actualización. Para obtener más información, consulte Especificación de un presupuesto de interrupción para la aplicación en la documentación de Kubernetes.

  7. En la página Pool de nodos, haga clic en Nodos de ciclo.

  8. En el cuadro de diálogo Nodos de ciclo:
    1. Controle el número de nodos que desea actualizar en paralelo y equilibre la disponibilidad y el costo del servicio especificando:
      • Número o porcentaje máximo de nodos adicionales (maxSurge): número máximo de nodos adicionales que permitir temporalmente en el pool de nodos durante la operación de cambio de versión (expresado como entero o como porcentaje). Los nodos adicionales son nodos por encima del número especificado en la propiedad Node count del pool de nodos. Si especifica un número entero para el número de nodos adicionales, no especifique un número mayor que el valor de Recuento de nodos.
      • Número o porcentaje máximo de nodos no disponibles (maxUnavailable): número máximo de nodos que pueden no estar disponibles en el pool de nodos durante la operación de cambio de versión (expresado como entero o como porcentaje). Si especifica un número entero para el número de nodos no disponibles, no especifique un número mayor que el valor de Recuento de nodos.

      Consulte Equilibrio de la disponibilidad y el costo del servicio al sincronizar los nodos gestionados.

    2. Haga clic en Nodos de ciclo para iniciar la operación de cambio de versión.
  9. Supervise el progreso de la operación de cambio de versión visualizando el estado de la solicitud de trabajo asociada (consulte Obtención de detalles de solicitud de trabajo).

Uso de la CLI

Para obtener información sobre el uso de la CLI, consulte Interfaz de línea de comandos (CLI). Para obtener una lista completa de los indicadores y las opciones disponibles para los comandos de la CLI, consulte Referencia de la línea de comandos.

Para realizar una actualización de nodo gestionado "in situ" mediante la sincronización de nodos

Actualice la propiedad de versión de Kubernetes del nodo de trabajador del pool de nodos y especifique el OCID de la imagen correspondiente. Incluya el parámetro --node-pool-cycling-details en el comando para especificar que desea sincronizar los nodos en el pool de nodos, especificando opcionalmente un número máximo permitido de nodos nuevos que se pueden crear durante la operación de cambio de versión y un número máximo permitido de nodos que pueden no estar disponibles:

oci ce node-pool update --node-pool-id <node-pool-ocid> --kubernetes-version <version> --node-source-details "{\"imageId\":\"<image-ocid>\",\"sourceType\":\"IMAGE\"}" --node-pool-cycling-details "{\"isNodeCyclingEnabled\":true,\"maximumUnavailable\":\"<value>\",\"maximumSurge\":\"<value>\"}"

Supervise el progreso de la operación de cambio de versión visualizando el estado de la solicitud de trabajo asociada:

oci ce work-request list --compartment-id <compartment-ocid> --resource-id <node-pool-ocid>
oci ce work-request get --work-request-id <work-request-ocid>