Para escalar sus cargas de trabajo en GKE en AWS, puede configurar sus AWSNodePools para que escalen automáticamente, o crear y eliminar manualmente AWSNodePools para escalar hacia arriba o hacia abajo.
Escalador automático de clúster
GKE en AWS implementa el escalador automático de clústeres de Kubernetes. Cuando la demanda de sus nodos es alta, el escalador automático de clústeres agrega nodos al grupo de nodos. Cuando la demanda es baja, el escalador automático de clústeres reduce su capacidad al tamaño mínimo que usted designe. Esto puede aumentar la disponibilidad de sus cargas de trabajo cuando la necesite, a la vez que controla los costos.
Descripción general
El escalador automático de clústeres ajusta automáticamente el número de nodos en un grupo de nodos según las demandas de sus cargas de trabajo. No necesita agregar o eliminar nodos manualmente ni sobreaprovisionar sus grupos de nodos. En su lugar, especifica un tamaño mínimo y máximo para el grupo de nodos, y el clúster escala automáticamente.
Si se eliminan o mueven recursos durante el escalado automático del clúster, las cargas de trabajo podrían experimentar interrupciones transitorias. Por ejemplo, si la carga de trabajo consta de una sola réplica, el pod de esa réplica podría reprogramarse en un nodo diferente si se elimina el nodo actual. Antes de habilitar el escalador automático de clústeres en AWSNodePool, diseñe sus cargas de trabajo para que toleren posibles interrupciones o asegúrese de que los pods críticos no se interrumpan.
Cómo funciona el escalador automático de clústeres
El escalador automático de clústeres funciona por grupo de nodos. Al crear un grupo de nodos, se especifican sus tamaños mínimo y máximo en el recurso de Kubernetes AWSNodePool .
Puede deshabilitar el escalador automático de clúster configurando spec.minNodeCount
en igual valor que spec.maxNodeCount
en sus AWSNodePools.
El escalador automático de clústeres aumenta o reduce automáticamente el tamaño del grupo de nodos, en función de las solicitudes de recursos (en lugar del uso real de recursos) de los pods que se ejecutan en los nodos de ese grupo. Comprueba periódicamente el estado de los pods y los nodos, y toma las medidas necesarias:
Si los pods no se pueden programar porque no hay suficientes nodos en el grupo, Cluster Autoscaler añade nodos hasta el tamaño máximo del grupo. Si los nodos están infrautilizados y todos los pods podrían programarse incluso con menos nodos en el grupo, Cluster Autoscaler elimina nodos hasta el tamaño mínimo. Si el nodo no se puede vaciar correctamente tras un tiempo de espera de 10 minutos, se cierra forzosamente. El período de gracia no es configurable.
Si sus pods han solicitado muy pocos recursos (por ejemplo, si los valores predeterminados son insuficientes), Cluster Autoscaler no corrige la situación. Puede garantizar que Cluster Autoscaler funcione con la mayor precisión posible creando solicitudes de recursos adecuadas para todas sus cargas de trabajo.
Criterios de funcionamiento
Cluster Autoscaler realiza las siguientes suposiciones al cambiar el tamaño de un grupo de nodos:
Todos los pods replicados pueden reiniciarse en otro nodo, lo que podría causar una breve interrupción. Si sus servicios no toleran interrupciones, no recomendamos usar Cluster Autoscaler.
Todos los nodos de un único grupo de nodos tienen el mismo conjunto de etiquetas.
Si tiene AWSNodePools con diferentes tipos de instancias, Cluster Autoscaler considera el costo relativo de lanzar nuevos nodos e intenta expandir el grupo de nodos menos costoso.
Las etiquetas agregadas manualmente tras la creación inicial del clúster o grupo de nodos no se rastrean. A los nodos creados por Cluster Autoscaler se les asignan las etiquetas especificadas con --node-labels al crear el grupo de nodos.
Cambiar el tamaño de un grupo de nodos
Un AWSNodePool incluye los campos minNodeCount
y maxNodeCount
. Estos campos indican un número mínimo y máximo de nodos de trabajo en el grupo. Puede editar estos valores antes o después de crear el AWSNodePool.
Antes de empezar
Aprovisione un clúster siguiendo las instrucciones de Crear un clúster de usuarios . Tenga disponible el archivo YAML (por ejemplo, cluster-0.yaml
) que crea el clúster.
Habilitación del escalado automático del grupo de nodos
Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su servicio de administración.cd anthos-aws anthos-gke aws management get-credentials
Para habilitar el escalador automático de clústeres, edite el manifiesto de su AWSNodePool. Edite el archivo
cluster-0.yaml
y busque la sección AWSNodePool. Cambie los valores despec.minNodeCount
yspec.maxNodeCount
.El siguiente ejemplo mantiene el tamaño mínimo de este grupo de nodos en
3
nodos, pero permite que el escalador automático de clúster 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, aplique 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 finalice el escalado, pasará al estadoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
El resultado muestra que AWSNodePool está
Resizing
. Las operaciones de redimensionamiento tardan varios minutos en completarse.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Creación manual de un nuevo AWSNodePool
También puede escalar su clúster creando nuevos AWSNodePools. Al crear un nuevo AWSNodePool, también puede aumentar o reducir el tamaño de las instancias .
Puede 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
Edite
new_nodepool.yaml
y elimine las secciones que no aparecen en el siguiente ejemplo. Guarde 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, aplique el manifiesto a su clúster de administración.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
¿Qué sigue?
Implementar un servicio respaldado por Ingress .
Para ver opciones adicionales, lea la documentación de referencia en AWSNodePool .