Uso de la escala automática del cluster de Kubernetes

Descubra cómo utilizar la escala automática del cluster de Kubernetes para cambiar automáticamente el tamaño de los pools de nodos gestionados en un cluster que haya creado mediante Container Engine for Kubernetes (OKE).

Nota

No puede utilizar la escala automática del cluster de Kubernetes con pools de nodos virtuales.

Puede utilizar la escala automática del cluster de Kubernetes para cambiar automáticamente el tamaño de los pools de nodos gestionados de un cluster en función de las demandas de carga de trabajo de la aplicación. Al cambiar automáticamente el tamaño de los pools de nodos de un cluster, puede garantizar la disponibilidad de la aplicación y optimizar los costos.

La escala automática del cluster de Kubernetes:

  • Agrega nodos de trabajador a un pool de nodos cuando no se puede programar un pod en el cluster debido a restricciones de recursos insuficientes.
  • Elimina los nodos de trabajador de un pool de nodos cuando los nodos no se han utilizado durante un período tiempo prolongado y cuando los pods se pueden colocar en otros nodos existentes.

La escala automática del cluster de Kubernetes aumenta o disminuye automáticamente el tamaño de un pool de nodos en función de las solicitudes de recursos, en lugar de hacerlo en función de la utilización de recursos de los nodos en el pool de nodos.

La escala automática del cluster de Kubernetes funciona sobre la base de pool por nodo. Utilice un archivo de configuración para especificar a qué pools de nodos van a dirigirse la expansión y contracción, los tamaños mínimo y máximo de cada pool de nodos, y cómo desea que se realice la escala automática. La escala automática del cluster de Kubernetes no gestiona los pools de nodos a los que no se hace referencia en el archivo de configuración.

Para permitir a la escala automática del cluster de Kubernetes cambiar automáticamente el tamaño de los pools de nodos de un cluster en función de las demandas de carga de trabajo de la aplicación, siempre incluya límites de solicitud de recursos en las especificaciones de pod (requests: en resources:).

Puede desplegar la escala automática del cluster de Kubernetes en un cluster de Kubernetes de dos formas:

Para obtener más información sobre la escala automática del cluster de Kubernetes, consulte la sección sobre la escala automática del cluster y las preguntas frecuentes de GitHub.

Recomendaciones al utilizar la escala automática del cluster de Kubernetes en entornos de producción

Tenga en cuenta las siguientes recomendaciones:

  • Tenga siempre al menos un pool de nodos que no esté gestionado por la escala automática del cluster de Kubernetes. Este pool de nodos es necesario para ejecutar complementos de cluster críticos. Tenga en cuenta también que es su responsabilidad escalar manualmente cualquier pool de nodos que no esté gestionado por la escala automática del cluster de Kubernetes.
  • Defina siempre varias réplicas para el despliegue de la escala automática del cluster de Kubernetes en el archivo de configuración. Si solo hay una réplica y se expulsa y no se puede reprogramar, la escala automática del cluster de Kubernetes no puede crear más nodos de trabajador.
  • En el archivo de configuración, defina max-node-provision-time en 25 minutos. Normalmente, los nuevos nodos de trabajador se aprovisionan y pasan a la condición Listo en un tiempo significativamente menor que este. Sin embargo, cuando se agregan muchos nodos a un pool de nodos al mismo tiempo, se puede tardar más en aprovisionarlos. Tenga en cuenta que la consola muestra un aviso junto a los nodos de trabajador que tardan más de 20 minutos en inicializarse. Suponiendo que los nodos de trabajador se muevan a la condición Listo en el tiempo especificado para max-node-provision-time, puede ignorar el aviso.
  • En el archivo de configuración, especifique el número máximo de nodos permitidos en el pool de nodos. Asegúrese de que el número máximo de nodos especificado no exceda el límite de arrendamiento de la unidad de nodo de trabajador definida para el pool de nodos. La escala automática del cluster de Kubernetes nunca creará más nodos que los definidos por el límite de arrendamiento. Si especifica un número mayor que el límite de arrendamiento, la escala automática del cluster de Kubernetes intentará crear nodos adicionales periódicamente, pero no lo hará hasta que se haya incrementado el límite de arrendamiento.
  • Al definir clusters que desea que gestione la escala automática del cluster de Kubernetes, recomendamos crear varios pools de nodos con un dominio de disponibilidad especificado por pool de nodos.
  • Diseñe siempre aplicaciones para tolerar las interrupciones que se pueden producir cuando la escala automática del cluster de Kubernetes elimina los nodos de trabajador o mueve los pods a otro nodo de trabajador antes de eliminar un nodo de trabajador infrautilizado. Por ejemplo, diseñe aplicaciones que aprovechen los presupuestos de interrupción de pod (consulte la sección sobre la especificación de un presupuesto de interrupción para la aplicación en la documentación de Kubernetes).
  • No cambie manualmente los pools de nodos gestionados por la escala automática del cluster de Kubernetes. Por ejemplo, no agregue ni elimine nodos mediante kubectl ni mediante la consola (o la CLI o API de Oracle Cloud Infrastructure). La escala automática del cluster de Kubernetes podría sustituir dichos cambios o modificar su comportamiento. Por ejemplo, si desea eliminar todos los nodos de un pool de nodos gestionado por la escala automática del cluster de Kubernetes, utilice siempre la escala automática del cluster de Kubernetes para escalar el pool de nodos a cero.

Parámetros de la escala automática del cluster de Kubernetes soportados

Puede controlar cómo la escala automática del cluster de Kubernetes cambia el tamaño de los pools de nodos de un cluster mediante los parámetros de configuración.

Los parámetros de configuración que puede utilizar para gestionar clusters creados por Container Engine for Kubernetes y cómo especificarlos, dependen de si utiliza la escala automática del cluster de Kubernetes como un programa independiente o como un complemento de cluster.

  • Uso de la escala automática del cluster de Kubernetes como programa independiente

    Si utiliza la escala automática del cluster de Kubernetes como programa independiente, especifique los parámetros de configuración en un archivo de configuración.

    Al utilizar la escala automática del cluster de Kubernetes como programa independiente, no puede utilizar los siguientes parámetros de configuración para gestionar clusters creados por Container Engine for Kubernetes:

    • --node-group-auto-discovery : no soportado (específico del proveedor en la nube).
    • --node-autoprovisioning-enabled=true : no soportado.
    • --gpu-total : no soportado (específico del proveedor en la nube).
    • --expander=price : no soportado (específico del proveedor en la nube).

    A excepción de los parámetros anteriores, puede utilizar cualquiera de los parámetros de configuración al utilizar la escala automática del cluster de Kubernetes como programa independiente.

    Para obtener una lista completa de los parámetros de configuración de la escala automática del cluster de Kubernetes, consulte ¿Cuáles son los parámetros de la CA? en las Preguntas frecuentes sobre la escala automática del cluster de GitHub.

  • Uso de la escala automática del cluster de Kubernetes como complemento de cluster

    Si utiliza la escala automática del cluster de Kubernetes como complemento de cluster, especifique los parámetros de configuración en un archivo de configuración (al utilizar la CLI o la API) o en la consola.

    Al utilizar la escala automática del cluster de Kubernetes como complemento de cluster, no puede utilizar los siguientes parámetros de configuración para gestionar clusters creados por Container Engine for Kubernetes:

    • --node-group-auto-discovery : no soportado (específico del proveedor en la nube).
    • --node-autoprovisioning-enabled=true : no soportado.
    • --gpu-total : no soportado (específico del proveedor en la nube).
    • --expander=price : no soportado (específico del proveedor en la nube).

    Tenga en cuenta que otros parámetros de configuración de la escala automática del cluster de Kubernetes tampoco están soportados al utilizar la escala automática del cluster de Kubernetes como complemento de cluster.

    Para obtener una lista de los parámetros de configuración soportados al utilizar la escala automática del cluster de Kubernetes como complemento de cluster, junto con los nombres que se deben utilizar al especificarlos, consulte Argumentos de configuración del complemento de escala automática del cluster.

Notas sobre la escala automática del cluster de Kubernetes

Tenga en cuenta lo siguiente:

  • La escala automática del cluster de Kubernetes agrega y elimina nodos en pools de nodos existentes en clusters existentes. Más concretamente, tenga en cuenta que la escala automática del cluster de Kubernetes:

  • Al eliminar nodos de trabajador de un pool de nodos, la escala automática del cluster de Kubernetes respeta las reglas de programación y expulsión de pods. Estas reglas pueden evitar que la escala automática del cluster de Kubernetes elimine un nodo de trabajador.

    Por ejemplo, por defecto, la escala automática del cluster de Kubernetes no eliminará los nodos que ejecutan pods kube-system (como los pods coredns), con la excepción de DaemonSet o pods de espejo. Puede controlar este comportamiento mediante un parámetro de configuración (skip-nodes-with-system-pods cuando se despliega como un programa independiente, skipNodesWithSystemPods cuando se despliega como un complemento de cluster). El parámetro se define en true por defecto.

    Para obtener más información, consulte la sección sobre los tipos de pods que pueden impedir que la CA elimine un nodo en las preguntas frecuentes de la escala automática del cluster de GitHub.

  • Si utiliza tanto Terraform como la escala automática del cluster de Kubernetes para gestionar pools de nodos, tenga en cuenta que Terraform puede revertir los cambios realizados en el tamaño de un pool de nodos mediante la escala automática del cluster de Kubernetes. Para evitar este comportamiento, utilice la función ignore_changes de Terraform, que está diseñada específicamente para situaciones en las que Terraform comparte la responsabilidad de gestionar un solo objeto con otro proceso. Por ejemplo, cuando se crea un recurso con referencia a datos que podrían cambiar en el futuro, pero no desea que esos cambios de datos potenciales afecten al recurso después de su creación. El metaargumento ignore_changes especifica los atributos de recursos que Terraform debe ignorar al planificar actualizaciones en el objeto remoto asociado. Para obtener más información, consulte El metaargumento del ciclo de vida en la documentación de Terraform.

    Por ejemplo:

    resource "node_pool_1" "example" {
      # ...
    
      lifecycle {
        ignore_changes = [
          node_config_details.size
        ]
      }
    }
  • Al actualizar un cluster a una nueva versión de Kubernetes, es su responsabilidad actualizar manualmente la escala automática del cluster de Kubernetes para que sea compatible con la nueva versión de Kubernetes del cluster. La escala automática del cluster de Kubernetes no se actualiza automáticamente.
  • Para utilizar la escala automática del cluster de Kubernetes para gestionar un cluster que ha creado con Container Engine for Kubernetes, el cluster debe ejecutar determinadas versiones de Kubernetes de la siguiente manera:
    • Al utilizar la escala automática del cluster de Kubernetes como programa independiente, los clusters deben ejecutar la versión 1.17 o posterior de Kubernetes.
    • Al utilizar la escala automática del cluster de Kubernetes como complemento de cluster, los clusters deben ejecutar la versión 1.25 o posterior de Kubernetes.
  • Puede utilizar la escala automática del cluster de Kubernetes con pools de nodos gestionados, pero no con pools de nodos virtuales.