Para escalar tus cargas de trabajo en GKE en AWS, puedes configurar tus AWSNodePools para que se escalen horizontalmente de forma automática o crear y eliminar AWSNodePools manualmente para escalar verticalmente.
Herramienta de adaptación dinámica de clústeres
GKE en AWS implementa la herramienta de adaptación dinámica de clústeres de Kubernetes. Cuando la demanda de tus nodos es alta, Cluster Autoscaler añade nodos al grupo de nodos. Cuando la demanda es baja, Cluster Autoscaler vuelve a reducir el tamaño hasta el mínimo que hayas designado. De esta forma, puedes aumentar la disponibilidad de tus cargas de trabajo cuando lo necesites y, al mismo tiempo, controlar los costes.
Información general
La herramienta de adaptación dinámica de clústeres cambia automáticamente el tamaño del número de nodos de un grupo de nodos determinado en función de las demandas de tus cargas de trabajo. No tienes que añadir ni quitar nodos manualmente, ni aprovisionar en exceso tus grupos de nodos. En su lugar, especifica un tamaño mínimo y máximo para el grupo de nodos, y el clúster se escala automáticamente.
Si se eliminan o se mueven recursos al autoescalar el clúster, es posible que tus cargas de trabajo sufran interrupciones transitorias. Por ejemplo, si tu carga de trabajo consta de una sola réplica, es posible que el pod de esa réplica se vuelva a programar en otro nodo si se elimina el nodo actual. Antes de habilitar la herramienta de escalado automático de clústeres en tu AWSNodePool, diseña tus cargas de trabajo para que toleren posibles interrupciones o asegúrate de que los pods críticos no se interrumpan.
Cómo funciona la herramienta de adaptación dinámica de clústeres
La herramienta de adaptación dinámica de clústeres 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 de Kubernetes AWSNodePool.
Puedes inhabilitar el autoescalador de clústeres asignando el valor spec.minNodeCount
a spec.maxNodeCount
en tus AWSNodePools.
El autoescalador de clústeres aumenta o reduce el tamaño del grupo de nodos automáticamente en función de las solicitudes de recursos (en lugar de la utilización real de los recursos) de los pods que se ejecutan en los nodos de ese grupo de nodos. Comprueba periódicamente el estado de los pods y los nodos, y toma medidas:
Si no se pueden programar pods porque no hay suficientes nodos en el grupo de nodos, Cluster Autoscaler añade nodos hasta alcanzar el tamaño máximo del grupo de nodos. Si los nodos no se utilizan lo suficiente y todos los pods se pueden programar incluso con menos nodos en el grupo de nodos, la herramienta de ajuste automático de escala de clústeres elimina nodos hasta alcanzar el tamaño mínimo del grupo de nodos. Si el nodo no se puede drenar correctamente después de un periodo de tiempo de espera (10 minutos), se terminará de forma forzosa. El periodo de gracia no se puede configurar.
Si tus pods han solicitado muy pocos recursos (por ejemplo, si los valores predeterminados no son suficientes), el escalador automático de clústeres no corregirá la situación. Puedes ayudar a que el autoescalador de clústeres funcione con la mayor precisión posible creando solicitudes de recursos adecuadas para todas tus cargas de trabajo.
Criterios de funcionamiento
La herramienta de adaptación dinámica de clústeres hace las siguientes suposiciones al cambiar el tamaño de un grupo de nodos:
Todos los pods replicados se pueden reiniciar en otro nodo, lo que puede provocar una breve interrupción. Si tus servicios no toleran las interrupciones, no te recomendamos que uses el escalador automático de clústeres.
Todos los nodos de un mismo grupo de nodos tienen el mismo conjunto de etiquetas.
Si tienes AWSNodePools con diferentes tipos de instancia, el escalador automático de clústeres tiene en cuenta el coste relativo de lanzar nuevos nodos e intenta ampliar el grupo de nodos menos caro.
Las etiquetas añadidas manualmente después de la creación inicial del clúster o del grupo de nodos no se registran. Los nodos creados por la herramienta de ajuste automático de escala de clústeres reciben las etiquetas especificadas con --node-labels en el momento de la creación del grupo de nodos.
Cambiar el tamaño de un grupo de nodos
Un AWSNodePool incluye los campos minNodeCount
y maxNodeCount
. Estos campos declaran el número mínimo y máximo de nodos de trabajador del grupo. Puede editar estos valores antes o después de crear el AWSNodePool.
Antes de empezar
Aprovisiona un clúster siguiendo las instrucciones de Crear un clúster de usuarios. Tener disponible el archivo YAML (por ejemplo, cluster-0.yaml
) que crea el clúster.
Habilitar el escalado automático de grupos de nodos
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu servicio de gestión.cd anthos-aws anthos-gke aws management get-credentials
Para habilitar Cluster Autoscaler, edita el manifiesto de tu AWSNodePool. Edita el archivo
cluster-0.yaml
y busca la sección AWSNodePool. Cambia los valores despec.minNodeCount
yspec.maxNodeCount
.En el ejemplo de abajo, el tamaño mínimo de este grupo de nodos se mantiene en
3
nodos, pero se habilita la herramienta de adaptación dinámica de clústeres para que aumente su tamaño a10
nodos.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 archivo 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 pasará al estado
Resizing
. Cuando AWSNodePool termine de escalarse, pasará al estadoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
El resultado muestra que el AWSNodePool está
Resizing
. Las operaciones de cambio de tamaño tardan varios minutos en completarse.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Crear manualmente un AWSNodePool
También puedes escalar tu clúster creando nuevos AWSNodePools. Cuando creas un AWSNodePool, también puedes aumentar o reducir el tamaño de las instancias.
Puedes obtener el manifiesto de configuración de un AWSNodePool 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 elimina las secciones que no aparezcan 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 nuevo AWSNodePool, aplica el manifiesto a tu clúster de gestión.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
Siguientes pasos
Despliega un servicio respaldado por Ingress.
Para ver más opciones, consulta la documentación de referencia sobre AWSNodePool.