Puedes controlar si tus nodos de Google Kubernetes Engine (GKE) se encuentran a nivel físico entre sí dentro de una zona usando una política de posición compacta.
Descripción general
Cuando creas grupos de nodos y cargas de trabajo en un clúster de GKE, puedes definir una política de posición de compactación que especifique que estos nodos o cargas de trabajo deben estar más cerca entre sí dentro de una zona. Tener nodos más cerca entre sí puede reducir la latencia de red entre ellos, lo que puede ser muy útil para cargas de trabajo por lotes con acoplamiento alto.
Usa la posición de compactación con GKE Autopilot
En los clústeres de Autopilot, puedes solicitar la colocación compacta para cargas de trabajo específicas agregando selectores de nodos a la especificación del Pod. Puedes usar la política de posición compacta predeterminada de Autopilot o una política de posición compacta existente de Compute Engine que use la serie de máquinas N2 o la serie de máquinas N2D.
Limitaciones
- GKE aprovisiona cargas de trabajo en una posición compacta en la misma zona.
- Disponible con las clases de procesamiento
Balanced
,Performance
yAccelerator
. - Disponible solo 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 ubicación de compactación está disponible para pods agrupados en hasta 1,500 nodos.
Habilita una política de posición de compactación
Si deseas habilitar la posición de compactación para GKE Autopilot, agrega un nodeSelector
a la especificación del Pod con las siguientes claves:
cloud.google.com/gke-placement-group
: Es el identificador que asignas al grupo de Pods que deben ejecutarse juntos, en el mismo grupo de ubicación compacta. Cada grupo de ubicaciones tiene un límite de 1,500 nodos. Te recomendamos limitar un grupo de ubicación solo a las cargas de trabajo que se beneficien de la agrupación y distribuir tus cargas de trabajo en grupos de ubicación separados cuando 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
: De manera opcional, el nombre de una política de posición compacta de Compute Engine existente. Solo puedes especificar una política de posición compacta personalizada en la versión 1.31.1-gke.2010000 de GKE y versiones posteriores.Para obtener instrucciones, consulta la sección Crea una política de posición compacta en esta página.
La siguiente especificación de Pod de ejemplo habilita la posición de compactación con una política de posición de compactación 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
Reemplaza PLACEMENT_POLICY_NAME
por el nombre de una política de posición compacta de Compute Engine existente. Para usar la política de posición de compactación predeterminada para Autopilot, omite la línea cloud.google.com/placement-policy-name
.
Usa una política de posición de compactación personalizada sin grupos de posiciones
Para usar una política de ubicación compacta personalizada sin grupos de ubicación, debes agregar el selector de nodos cloud.google.com/placement-policy-name
a la especificación del Pod o definir una clase de procesamiento personalizada con prioridad de ubicación.
Agrega el selector de nodos cloud.google.com/placement-policy-name
a la especificación del Pod.
Este enfoque puede ser útil si deseas usar un JobSet para programar cada trabajo por separado, pero también deseas usar una política de posición de compactación personalizada para colocar los nodos que ejecutan el mismo trabajo más cerca unos de otros.
Dado que JobSet no admite la especificación de diferentes selectores de nodos para cada trabajo, no puedes usar JobSet con grupos de ubicación en este caso. Sin embargo, puedes usar la compatibilidad integrada de JobSet con las topologías exclusivas para lograr el mismo efecto.
La siguiente especificación de Pod de ejemplo habilita la ubicación compacta con una política de ubicación compacta 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
Reemplaza PLACEMENT_POLICY_NAME
por el nombre de una política de posición compacta de Compute Engine existente.
Usa una clase de procesamiento personalizada para definir la política de posición
Consulta la documentación sobre la clase de procesamiento personalizada con prioridad de posición para conocer los detalles.
En lugar de agregar 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 posición compacta configurando el campo placement
en una definición de ComputeClass
. Para obtener más información, consulta clase de procesamiento personalizada con prioridad de ubicación.
Usa la posición de compactación con GKE Standard
Limitaciones
La posición de compactación en los grupos de nodos de GKE estándar tiene las siguientes limitaciones:
- Solo es compatible con los grupos de nodos nuevos. No puedes habilitar o inhabilitar la ubicación compacta en grupos de nodos existentes.
- Está disponible solo para grupos de nodos que operan en una sola zona.
- Disponible solo en los tipos de máquinas A2, A3, A4, C2, C2D, C3, C3D, C4, C4D, G2, H3, H4D, N2 y N2D. Sin embargo, para A3 Ultra y A4, recomendamos usar reservas segmentadas por bloques en lugar de la colocación compacta. Para obtener más detalles, consulta Reserva de capacidad.
- Admite hasta 1,500 instancias de VM de Compute Engine en cada política. El grupo de nodos que exceda este límite en cualquier momento se rechazará durante la creación.
- No se admite el suministro de una política de recursos personalizada con la marca
placement-policy
en las actualizaciones azul-verde.
Crea una política de posición de compactación
Para crear políticas de posiciones compactas, en Google Cloud CLI, especifica la opción placement-type=COMPACT
durante la creación del grupo de nodos o el clúster. Con esta configuración, GKE intenta colocar nodos dentro de un grupo de nodos cerca el uno del otro.
Para usar una política de recursos existente en tu clúster, especifica la ubicación de tu política personalizada para la marca placement-policy
durante la creación del clúster o del grupo de nodos. Esto permite la flexibilidad de usar posiciones reservadas, varios grupos de nodos con la misma política de posición y otras opciones de posición avanzadas. Sin embargo, también requiere más operaciones manuales que especificar la marca --placement-type=COMPACT. Por ejemplo, debes crear, borrar y mantener tus políticas de recursos personalizados. Asegúrate de que la cantidad máxima de instancias de VM se respete en todos los grupos de nodos que usan la política de recursos. Si se alcanza este límite mientras algunos de tus grupos de nodos no alcanzan su tamaño máximo, fallará la adición de más nodos.
Si no especificas las marcas placement-type
y placement-policy
, no hay requisitos de posición del nodo de forma predeterminada.
Crea una Política de Posición de compactación en un clúster nuevo
Cuando creas un clúster nuevo, puedes especificar una Política de Posición de compactación que se aplicará al grupo de nodos predeterminado. En cualquier grupo de nodos posterior que crees para el clúster, deberás especificar si deseas aplicar la posición de compactación.
Para crear un clúster nuevo en el que el grupo de nodos predeterminado tenga una Política de Posición de compactación aplicada, 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
Reemplaza lo siguiente:
CLUSTER_NAME
: Es el nombre del clúster nuevo.MACHINE_TYPE
: Es el tipo de máquina que se usará para los nodos, que debe ser un tipo de máquina compatible que se enumera en las limitaciones del clúster estándar.--placement-type COMPACT
: Aplica la posición de compactación para los nodos en el grupo de nodos predeterminado.MAX_UNAVAILABLE
: Es la cantidad máxima de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. En el caso de las posiciones compactas, recomendamos actualizaciones rápidas que no sean de aumento para optimizar la probabilidad de encontrar nodos ubicados durante las actualizaciones.
Crea una Política de Posición de compactación en un clúster existente
En un clúster existente, puedes crear un grupo de nodos que tenga aplicada una Política de Posición de compactación.
Para crear un grupo de nodos que tenga una Política de Posición de compactación aplicada, 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
Reemplaza lo siguiente:
NODEPOOL_NAME
: Es el nombre de tu grupo de nodos nuevo.MACHINE_TYPE
: Es el tipo de máquina que se usará para los nodos, que debe ser un tipo de máquina compatible que se enumera en las limitaciones del clúster estándar.CLUSTER_NAME
: Es el nombre del clúster existente.--placement-type COMPACT
: Indica que se debe aplicar la posición de compactación para los nodos del grupo de nodos nuevo.MAX_UNAVAILABLE
: Es la cantidad máxima de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. En el caso de las posiciones compactas, recomendamos actualizaciones rápidas que no sean de aumento para optimizar la probabilidad de encontrar nodos ubicados durante las actualizaciones.
Crea grupos de nodos con una política de posició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 Google Cloud del clúster:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Reemplaza lo siguiente:
POLICY_NAME
: Es el nombre de la política de recursos.REGION
: es la región del 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
Reemplaza lo siguiente:
NODEPOOL_NAME
: Es el nombre de tu grupo de nodos nuevo.MACHINE_TYPE
: Es el tipo de máquina que se usará para los nodos, que debe ser un tipo de máquina compatible que se encuentre en las limitaciones del clúster estándar.CLUSTER_NAME
: Es el nombre del clúster existente.MAX_UNAVAILABLE
: Es la cantidad máxima de nodos que pueden no estar disponibles al mismo tiempo durante una actualización del grupo de nodos. En el caso de las posiciones compactas, recomendamos actualizaciones rápidas que no sean de aumento para optimizar la probabilidad de encontrar nodos ubicados durante las actualizaciones.
Usa una reserva de Compute Engine con una política de posición compacta
Las reservas te ayudan a garantizar que el hardware esté disponible en una zona específica, lo que reduce el riesgo de falla en la creación del grupo de nodos debido a que el hardware es insuficiente.
Crea una reserva que especifique una política de posició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
Reemplaza lo siguiente:
RESERVATION_NAME
: el nombre de tu reservaMACHINE_COUNT
: Es la cantidad de nodos reservados.MACHINE_TYPE
: Es el tipo de máquina que se usará para los nodos, que debe ser un tipo de máquina compatible que se encuentre en las limitaciones del clúster estándar.POLICY_NAME
: Es el nombre de la política de recursos.ZONE
: Es la zona en la que se creará la reserva.
Para crear un grupo de nodos, especifica la política de posición compacta y la reserva que creaste 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
Reemplaza lo siguiente:
NODEPOOL_NAME
: Es el nombre de tu grupo de nodos nuevo.MACHINE_TYPE
: Es el tipo de máquina que se usará para los nodos, que debe ser un tipo de máquina compatible que se enumera en las limitaciones del clúster estándar.CLUSTER_NAME
: Es el nombre del clúster existente.
Crea una carga de trabajo en los nodos que usan la posición de compactación
Para ejecutar cargas de trabajo en nodos dedicados que usan la posición de compactación, puedes usar varios mecanismos de Kubernetes, como asignar pods a nodos y evitar programar pods no deseados en un grupo de nodos..
En el siguiente ejemplo, agregamos un taint a los nodos dedicados y una tolerancia y afinidad correspondientes a los pods.
Agrega un taint a los nodos del grupo de nodos que tenga una Política de Posición de compactación:
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. A continuación, se muestra 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, es posible que no sea posible crear un grupo de nodos grande mediante una Política de Posición de compactación. Para limitar estos grupos de nodos al tamaño necesario, debes considerar crear un grupo de nodos por carga de trabajo que requiera una posición de compactación.
Usa la ubicación compacta para el aprovisionamiento automático de nodos
Con el aprovisionamiento automático de nodos, GKE aprovisiona de forma automática los grupos de nodos según la demanda de recursos del clúster. Para obtener más información, consulta Usa el aprovisionamiento automático de nodos.
Para habilitar la ubicación compacta para el aprovisionamiento automático de nodos, agrega un nodeSelector
a la especificación del 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
Reemplaza lo siguiente:
PLACEMENT_GROUP_IDENTIFIER
: Es el identificador que asignas al grupo de Pods que deben ejecutarse juntos, en el mismo grupo de ubicación compacta.MACHINE_FAMILY
: Es el nombre de la familia de máquinas. Usa una de las familias de máquinas que admiten la ubicación compacta. Recomendamos que uses familias de máquinas C2 o C2D para las cargas de trabajo con requisitos de rendimiento de red y procesamiento.PLACEMENT_POLICY_NAME
: De manera opcional, el nombre de una política de posición compacta de Compute Engine existente. GKE usa la política de posición compacta especificada cuando el aprovisionamiento automático de nodos crea un grupo de nodos nuevo para agrupar tus Pods. Solo puedes especificar una política de posición compacta personalizada en la versión 1.31.1-gke.2010000 y versiones posteriores de GKE.Para obtener instrucciones, consulta la sección Crea una política de posición compacta en 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 ubicación compacta. Por ejemplo, si la especificación del Pod incluye nvidia.com/gpu
y el clúster está configurado para usar GPU A100, no necesitas incluir la clave cloud.google.com/machine-family
.
En el siguiente ejemplo, se incluye una especificación de Pod que define la solicitud nvidia.com/gpu
, y el clúster está configurado para usar GPU 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
Si deseas obtener más información, consulta cómo configurar pods Para consumir GPU.
Optimiza el tamaño del grupo de ubicación
Debido a que GKE encuentra la mejor ubicación para implementaciones más pequeñas, te recomendamos que le indiques a GKE que evite ejecutar diferentes tipos de Pods en el mismo grupo de ubicaciones. Agrega una clave de tolerancia con la clave cloud.google.com/gke-placement-group
y el identificador de ubicación compacta que definiste.
El siguiente ejemplo es una especificación de Pod que define una tolerancia de Pod con ubicació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.
¿Qué sigue?
- Obtén más información sobre cómo definir políticas de ubicación de instancias en Compute Engine.