Puedes controlar si tus nodos de Google Kubernetes Engine (GKE) están ubicados físicamente entre sí en una zona mediante una política de colocación compacta.
Información general
Cuando creas grupos de nodos y cargas de trabajo en un clúster de GKE, puedes definir una política de colocación compacta, que especifica que estos nodos o cargas de trabajo deben colocarse en una proximidad física más cercana entre sí dentro de una zona. Si los nodos están más cerca entre sí, se puede reducir la latencia de la red entre ellos, lo que puede ser especialmente útil para las cargas de trabajo por lotes con un alto acoplamiento.
Usar la colocación compacta con Autopilot de GKE
En los clústeres Autopilot, puedes solicitar una colocación compacta para cargas de trabajo específicas añadiendo selectores de nodos a la especificación de tu pod. Puedes usar la política de emplazamiento compacta predeterminada de Autopilot o una política de emplazamiento compacta de Compute Engine que utilice la serie de máquinas N2 o la serie de máquinas N2D.
Limitaciones
- GKE aprovisiona cargas de trabajo en una ubicación compacta de la misma zona.
- Disponible con las clases de computación
Balanced
,Performance
yAccelerator
. - Solo está disponible en los tipos de máquinas C2, C2D, C3, C3D, C4D (1.33.0-gke.1439000 o posterior), H3, H4D, N2 y N2D.
- Solo está disponible con las GPUs A100, L4 y H100.
- La colocación compacta está disponible para los pods agrupados en hasta 1500 nodos.
Habilitar una política de colocación compacta
Para habilitar la colocación compacta en Autopilot de GKE, añade un
nodeSelector
a la especificación de Pod con las siguientes claves:
cloud.google.com/gke-placement-group
: el identificador que asignas al grupo de pods que deben ejecutarse juntos en el mismo grupo de emplazamiento compacto. Cada grupo de emplazamientos tiene un límite de 1500 nodos. Te recomendamos que limites un grupo de colocación solo a las cargas de trabajo que se beneficien de la agrupación y que distribuyas tus cargas de trabajo en grupos de colocación independientes siempre que sea posible.Una de las siguientes claves para definir el tipo de recurso:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name
: opcionalmente, el nombre de una política de colocación compacta de Compute Engine. Solo puedes especificar una política de colocación compacta personalizada en GKE 1.31.1-gke.2010000 y versiones posteriores.Para obtener instrucciones, consulta la sección Crear una política de colocación compacta de esta página.
La siguiente especificación de Pod habilita la colocación compacta con una política de colocación compacta personalizada:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
Sustituye PLACEMENT_POLICY_NAME
por el nombre de una política de colocación compacta de Compute Engine. Para usar la política de emplazamiento compacta predeterminada de Autopilot, omite la línea cloud.google.com/placement-policy-name
.
Usar una política de colocación compacta personalizada sin grupos de colocación
Para usar una política de colocación compacta personalizada sin grupos de colocación, debes añadir el selector de nodos cloud.google.com/placement-policy-name
a la especificación de tu pod o definir una clase de computación personalizada con prioridad de colocación.
Añade el cloud.google.com/placement-policy-name
selector de nodos a la especificación de tu pod
Este enfoque puede ser útil si quieres usar un JobSet para programar cada trabajo por separado, pero también quieres usar una política de colocación compacta personalizada para colocar los nodos que ejecutan el mismo trabajo más cerca unos de otros.
Como JobSet no admite la especificación de selectores de nodos diferentes para cada trabajo, no puedes usar JobSet con grupos de colocación en este caso. Sin embargo, puedes usar la compatibilidad integrada de JobSet con las topologías exclusivas para conseguir el mismo efecto.
La siguiente especificación de pod habilita el emplazamiento compacto con una política de emplazamiento compacto personalizada para una carga de trabajo de JobSet:
apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
name: my-jobset
annotations:
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-nodepool
spec:
replicatedJobs:
- name: my-job
template:
spec:
# lines omitted for clarity
template:
spec:
nodeSelector:
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
cloud.google.com/machine-family: "n2"
# lines omitted for clarity
Sustituye PLACEMENT_POLICY_NAME
por el nombre de una política de colocación compacta de Compute Engine.
Usar una clase de computación personalizada para definir la política de colocación
Consulta la documentación sobre clases de cálculo personalizadas con prioridad de colocación para ver los detalles.
En lugar de añadir un nodeSelector
con el nombre de la política directamente a la especificación de tu carga de trabajo, puedes aplicar una política de colocación compacta configurando el campo placement
en una definición de ComputeClass
. Para obtener más información, consulta Clase de computación personalizada con prioridad de colocación.
Usar la colocación compacta con GKE Standard
Limitaciones
La colocación compacta en los grupos de nodos estándar de GKE tiene las siguientes limitaciones:
- Solo se admite en los nuevos grupos de nodos. No puedes habilitar ni inhabilitar la colocación compacta en grupos de nodos que ya tengas.
- Solo está disponible para grupos de nodos que operan en una sola zona.
- Solo está disponible en los tipos de máquinas A2, A3, A4, C2, C2D, C3, C3D, C4, C4D, G2, H3, H4D, N2 y N2D. Sin embargo, en el caso de A3 Ultra y A4, le recomendamos que utilice reservas orientadas a bloques en lugar de la colocación compacta. Para obtener más información, consulta Reservar capacidad.
- Admite hasta 1500 instancias de VM de Compute Engine por política. Cualquier grupo de nodos que supere este límite en cualquier momento se rechazará durante la creación.
- No se admite el uso de una política de recursos personalizada con la marca
placement-policy
en las actualizaciones azul-verde.
Crear una política de colocación compacta
Para crear políticas de colocación compactas, en la CLI de Google Cloud, especifica la opción placement-type=COMPACT
al crear el grupo de nodos o el clúster. Con este ajuste, GKE intenta colocar los nodos de un grupo de nodos más cerca unos de otros.
Para usar una política de recursos en tu clúster, especifica la ubicación de tu política personalizada en la marca placement-policy
durante la creación del grupo de nodos o del clúster. Esto permite usar emplazamientos reservados, varios grupos de nodos con la misma política de emplazamiento y otras opciones de emplazamiento avanzadas. Sin embargo, también requiere más operaciones manuales que especificar la marca --placement-type=COMPACT. Por ejemplo, debe crear, eliminar y mantener sus políticas de recursos personalizadas. Asegúrate de que se respete el número máximo de instancias de VM en todos los grupos de nodos que usen la política de recursos. Si se alcanza este límite mientras algunos de tus grupos de nodos no han alcanzado su tamaño máximo, no podrás añadir más nodos.
Si no especifica las marcas placement-type
y placement-policy
, de forma predeterminada no habrá ningún requisito sobre la colocación de los nodos.
Crear una política de emplazamiento compacta en un clúster nuevo
Cuando creas un clúster, puedes especificar una política de colocación compacta que se aplicará al grupo de nodos predeterminado. En los grupos de nodos que crees posteriormente para el clúster, tendrás que especificar si quieres aplicar la colocación compacta.
Para crear un clúster en el que se aplique una política de colocación compacta al grupo de nodos predeterminado, usa el siguiente comando:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del nuevo clúster.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos, que debe ser un tipo de máquina admitido que se incluya en las limitaciones de los clústeres estándar.--placement-type COMPACT
: aplica la colocación compacta a los nodos del grupo de nodos predeterminado.MAX_UNAVAILABLE
: número máximo de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. Para una colocación compacta, recomendamos actualizaciones rápidas sin picos para optimizar la probabilidad de encontrar nodos colocados durante las actualizaciones.
Crear una política de colocación compacta en un clúster
En un clúster, puedes crear un grupo de nodos al que se le haya aplicado una política de colocación compacta.
Para crear un grupo de nodos al que se le haya aplicado una política de emplazamiento compacto, usa el siguiente comando:
gcloud container node-pools create NODEPOOL_NAME \
--machine-type MACHINE_TYPE \
--cluster CLUSTER_NAME \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Haz los cambios siguientes:
NODEPOOL_NAME
: el nombre del nuevo grupo de nodos.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos, que debe ser un tipo de máquina admitido que se incluya en las limitaciones de los clústeres estándar.CLUSTER_NAME
: el nombre del clúster.--placement-type COMPACT
: indica que se debe aplicar la colocación compacta a los nodos del nuevo grupo de nodos.MAX_UNAVAILABLE
: número máximo de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. Para una colocación compacta, recomendamos actualizaciones rápidas sin picos para optimizar la probabilidad de encontrar nodos colocados durante las actualizaciones.
Crear grupos de nodos con una política de colocación personalizada compartida
Puedes crear manualmente una política de recursos y usarla en varios grupos de nodos.
Crea la política de recursos en la región del clúster: Google Cloud
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Haz los cambios siguientes:
POLICY_NAME
: nombre de la política de recursos.REGION
: la región de tu clúster.
Crea un grupo de nodos con la política de recursos personalizada:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Haz los cambios siguientes:
NODEPOOL_NAME
: el nombre del nuevo grupo de nodos.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos, que debe ser un tipo de máquina admitido que se indique en las limitaciones de los clústeres estándar.CLUSTER_NAME
: el nombre del clúster.MAX_UNAVAILABLE
: número máximo de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. Para una colocación compacta, recomendamos actualizaciones rápidas sin picos para optimizar la probabilidad de encontrar nodos colocados durante las actualizaciones.
Usar una reserva de Compute Engine con una política de colocación compacta
Las reservas te ayudan a garantizar que el hardware esté disponible en una zona específica, lo que reduce el riesgo de que se produzca un error al crear un pool de nodos debido a que no hay suficiente hardware.
Crea una reserva que especifique una política de colocación compacta:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservation
Haz los cambios siguientes:
RESERVATION_NAME
: el nombre de tu reserva.MACHINE_COUNT
: número de nodos reservados.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos, que debe ser un tipo de máquina admitido que se indique en las limitaciones de los clústeres estándar.POLICY_NAME
: nombre de la política de recursos.ZONE
: la zona en la que quieres crear la reserva.
Crea un grupo de nodos especificando tanto la política de colocación compacta como la reserva que has creado en el paso anterior:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --reservation-affinity specific \ --reservation RESERVATION_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
Haz los cambios siguientes:
NODEPOOL_NAME
: el nombre del nuevo grupo de nodos.MACHINE_TYPE
: el tipo de máquina que se va a usar en los nodos, que debe ser un tipo de máquina admitido que se incluya en las limitaciones de los clústeres estándar.CLUSTER_NAME
: el nombre del clúster.
Crear una carga de trabajo en nodos que usen emplazamiento compacto
Para ejecutar cargas de trabajo en nodos dedicados que usen la colocación compacta, puedes usar varios mecanismos de Kubernetes, como asignar pods a nodos y evitar que se programen pods no deseados en un grupo de nodos.
En el siguiente ejemplo, añadimos un taint a los nodos dedicados y añadimos una tolerancia y una afinidad correspondientes a los pods.
Añade un taint a los nodos del grupo de nodos que tenga una política de colocación compacta:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
En la definición de la carga de trabajo, especifica la tolerancia necesaria y una afinidad de nodo. Aquí tienes un ejemplo con un solo Pod:
apiVersion: v1 kind: Pod metadata: ... spec: ... tolerations: - key: dedicated-pool operator: "Equal" value: "NODEPOOL_NAME" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dedicated-pool operator: In values: - NODEPOOL_NAME
En algunas ubicaciones, puede que no sea posible crear un grupo de nodos grande con una política de colocación compacta. Para limitar el tamaño de estos grupos de nodos a lo necesario, te recomendamos que crees un grupo de nodos por cada carga de trabajo que requiera una colocación compacta.
Usar el emplazamiento compacto para el aprovisionamiento automático de nodos
Con el aprovisionamiento automático de nodos, GKE aprovisiona automáticamente grupos de nodos en función de la demanda de recursos del clúster. Para obtener más información, consulta Usar el aprovisionamiento automático de nodos.
Para habilitar la colocación compacta en el aprovisionamiento automático de nodos, añade un nodeSelector
a la especificación de Pod, como en el siguiente ejemplo:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity
Haz los cambios siguientes:
PLACEMENT_GROUP_IDENTIFIER
: el identificador que asignas al grupo de pods que deben ejecutarse juntos en el mismo grupo de colocación compacto.MACHINE_FAMILY
: el nombre de la familia de máquinas. Usa una de las familias de máquinas que admiten la colocación compacta. Te recomendamos que uses las familias de máquinas C2 o C2D para cargas de trabajo que requieran un buen rendimiento de computación y de red.PLACEMENT_POLICY_NAME
: opcionalmente, el nombre de una política de colocación compacta de Compute Engine. GKE usa la política de colocación compacta especificada cuando el aprovisionamiento automático de nodos crea un grupo de nodos para agrupar tus pods. Solo puedes especificar una política de colocación compacta personalizada en GKE 1.31.1-gke.2010000 y versiones posteriores.Para obtener instrucciones, consulta la sección Crear una política de colocación compacta de esta página.
Puedes omitir la clave cloud.google.com/machine-family
si la configuración del pod ya define un tipo de máquina compatible con la colocación compacta. Por ejemplo, si la especificación de Pod incluye nvidia.com/gpu
y el clúster está configurado para usar GPUs A100, no es necesario que incluya la clave cloud.google.com/machine-family
.
En el siguiente ejemplo se muestra una especificación de Pod que define una nvidia.com/gpu
solicitud y el clúster está configurado para usar GPUs A100. Este pod spec
no incluye la clave cloud.google.com/machine-family
:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
resources:
limits:
nvidia.com/gpu: 2
Para obtener más información, consulta cómo configurar pods para que usen GPUs.
Optimizar el tamaño de los grupos de emplazamientos
Como GKE encuentra la mejor ubicación para las implementaciones más pequeñas, te recomendamos que indiques a GKE que evite ejecutar diferentes tipos de pods en el mismo grupo de emplazamiento. Añade una clave de tolerancia con la clave cloud.google.com/gke-placement-group
y el identificador de colocación compacto que hayas definido.
El siguiente ejemplo es una especificación de Pod que define una tolerancia de Pod con una colocación compacta:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
Para obtener más información sobre el aprovisionamiento automático de nodos con tolerancia de pods, consulta Separación de cargas de trabajo.
Siguientes pasos
- Consulta información sobre cómo definir políticas de colocación de instancias en Compute Engine.