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
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio administrado.cd anthos-aws anthos-gke aws management get-credentials
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 despec.minNodeCount
yspec.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 a10
.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 ...
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
El recurso AWSNodePool cambiará a un estado
Resizing
. Cuando el AWSNodePool completa el escalamiento, pasa al estadoProvisioned
.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.
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
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
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.