Escala clústeres de usuario

Para escalar tus cargas de trabajo en GKE en AWS, puedes configurar tus AWSNodePool para que ajuste la escala automáticamente, o bien crear y borrar de forma manual AWSNodePools para aumentar o reducir la escala.

Escalador automático del clúster

GKE en AWS implementa el escalador automático del clúster de Kubernetes. Cuando la demanda en tus nodos es alta, el escalador automático del clúster agrega nodos al grupo de nodos. Cuando la demanda es baja, reduce la escala al tamaño mínimo que hayas designado. Esto te permite contar con una mayor disponibilidad para tus cargas de trabajo cuando sea necesario sin incurrir en gastos excesivos.

Descripción general

El escalador automático del clúster cambia el tamaño de la cantidad de nodos en un grupo de nodos de forma automática según las exigencias de tus cargas de trabajo. No es necesario que agregues o quites nodos de forma manual ni que sobreaprovisiones tus grupos de nodos. En su lugar, debes especificar un tamaño mínimo y máximo para el grupo de nodos y el clúster ajustará la escala automáticamente.

Si se borran o mueven recursos mientras se realiza el ajuste de escala automático del clúster, es posible que las cargas de trabajo sufran interrupciones transitorias. Por ejemplo, si tu carga de trabajo consta de un controlador con una sola réplica, es posible que el pod de esa réplica se reprograme en otro nodo si se borra el actual. Antes de habilitar el escalador automático del clúster en el AWSNodePool, diseña tus cargas de trabajo para tolerar posibles interrupciones o asegurarte de que no se interrumpan los Pods críticos.

Cómo funciona el escalador automático del clúster

El escalador automático del clúster funciona por grupo de nodos. Cuando creas un grupo de nodos, especificas un tamaño mínimo y máximo para el grupo de nodos en el recurso AWSNodePool de Kubernetes.

Si quieres inhabilitar el escalador automático del clúster, establece spec.minNodeCount para que sea igual a spec.maxNodeCount en tus AWSNodePool.

El escalador automático del clúster aumenta o disminuye el tamaño del grupo de nodos de forma automática según las solicitudes de recursos (no el uso real) de los Pods que se ejecutan en los nodos de ese grupo de nodos. El escalador verifica el estado de los Pods y los nodos a diario, y realiza las acciones correspondientes:

Si no es posible programar Pods porque el grupo no tiene nodos suficientes, el escalador automático del clúster agrega los nodos necesarios (siempre y cuando no se haya alcanzado el tamaño máximo configurado para el grupo). Si sobra capacidad de nodos y resulta posible programar todos los Pods con una cantidad menor de nodos en el grupo, el escalador automático del clúster quita los nodos sobrantes (siempre y cuando no se haya alcanzado el tamaño mínimo configurado para el grupo). Si un nodo no se puede desviar de forma correcta después de un tiempo de espera (de 10 minutos), se forzará su finalización. El período de gracia no se puede configurar.

Si tus Pods solicitaron muy pocos recursos (por ejemplo, si los valores predeterminados son insuficientes), el escalador automático del clúster no corrige la situación. Para ayudar a garantizar que el escalador automático del clúster funcione de la manera más precisa posible, debes crear solicitudes de recursos adecuadas para todas las cargas de trabajo.

Criterios operativos

El escalador automático del clúster actúa según las siguientes suposiciones cuando cambia el tamaño de un grupo de nodos:

  • Todos los pods replicados se pueden reiniciar en otro nodo, aunque es posible que esto provoque una interrupción breve. Si tus servicios no toleran interrupciones, no recomendamos usar el escalador automático del clúster.

  • Todos los nodos de un grupo tienen el mismo conjunto de etiquetas.

  • Si tienes AWSNodePools con diferentes tipos de instancias, el escalador automático del clúster toma en cuenta el costo relativo de iniciar nodos nuevos y trata de expandir el grupo de nodos menos costoso.

  • No se realiza seguimiento de las etiquetas que se agregan de forma manual después de la creación del clúster o grupo de nodos inicial. Los nodos que se creen con el escalador automático del clúster reciben etiquetas que se especifican con --node-labels cuando se crea el grupo de nodos.

Modifica el tamaño de un grupo de nodos

Un AWSNodePool incluye los campos minNodeCount y maxNodeCount. En estos campos, se declara una cantidad mínima y máxima de nodos trabajadores en el grupo. Puedes editar estos valores antes o después de crear el AWSNodePool.

Antes de comenzar

Aprovisiona un clúster mediante las instrucciones de Crea un clúster de usuario. Además, debes tener el archivo YAML (por ejemplo, cluster-0.yaml) que crea el clúster disponible.

Habilita el escalamiento automático del grupo de nodos

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Para habilitar el escalador automático del clúster, edita el manifiesto del AWSNodePool. Edita el archivo cluster-0.yaml y busca la sección AWSNodePool. Cambia los valores de spec.minNodeCount y spec.maxNodeCount.

    En el siguiente ejemplo, se mantiene el tamaño mínimo de este grupo de nodos en 3 nodos, pero se permite que el escalador automático del clúster aumente su tamaño a 10.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: cluster-0-pool-0
    spec:
      clusterName: cluster-0
      version: 1.25.5-gke.2100
      minNodeCount: 3
      maxNodeCount: 10
      ...
    
  3. A continuación, aplica el YAML para cambiar el tamaño del grupo de nodos.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl apply -f cluster-0.yaml
    
  4. El recurso AWSNodePool cambiará a un estado Resizing. Cuando el AWSNodePool completa el escalamiento, pasa al estado Provisioned.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl get AWSNodePools
    

    En el resultado, se muestra que AWSNodePool es Resizing. Las operaciones de cambio de tamaño toman varios minutos en completarse.

    NAME               CLUSTER     STATE     AGE   VERSION
    cluster-0-pool-0   cluster-0   Resizing  3h    1.25.5-gke.2100
    

Crea un AWSNodePool nuevo de forma manual

También puedes escalar el clúster mediante la creación de AWSNodePools nuevos. Cuando creas un AWSNodePool nuevo, también puedes escalar verticalmente los tamaños de instancia, o reducir sus escalas.

  1. Puedes recuperar el manifiesto de configuración de un AWSNodePool existente con kubectl get.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
    
  2. Edita new_nodepool.yaml y quita las secciones que no están presentes en el siguiente ejemplo. Guarda el archivo.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    
  3. Para crear un AWSNodePool nuevo, aplica el manifiesto a tu clúster de administración.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f new_nodepool.yaml
    

¿Qué sigue?

Implementa un servicio respaldado por Ingress.

Para ver las opciones adicionales, lee la documentación de referencia sobre AWSNodePool.