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
Limitaciones
- GKE aprovisiona cargas de trabajo en una ubicación de compactación en la misma zona.
- La ubicación de compactación está disponible en las GPU
Balanced
y A100. Para obtener más información, consulta Tipos de máquinas. - La ubicación de compactación está disponible para pods agrupados en hasta 150 nodos.
- No se admite la migración en vivo para 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.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"
El siguiente ejemplo es un extracto de una especificación de pod que habilita la posición de compactación. El identificador del grupo de ubicaciones es placement-group-1
y la clase de procesamiento es Balanced
:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
Cada grupo de ubicaciones tiene un límite de 150 nodos. Te recomendamos limitar un grupo de ubicaciones solo a las cargas de trabajo que se beneficien de la agrupación y distribuir tus cargas de trabajo en grupos de ubicaciones separados cuando sea posible.
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, C2, G2, C2D, C3D, N2, N2D y C3.
- Admite hasta 150 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 la migración en vivo para nodos.
- No se admite proporcionar 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.
A fin de usar una política de recursos existente en tu clúster, especifica la ubicación de la política personalizada para la marca placement-policy
durante la creación del grupo de nodos o el clúster. Esto brinda la flexibilidad de utilizar 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 personalizadas. Asegúrate de que se respete la cantidad máxima de instancias de VM en todos los grupos de nodos mediante 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, no se agregarán más nodos.
Si no especificas las marcas placement-type
y placement-policy
, no hay requisitos de ubicació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 C2 (por ejemplo,c2-standard-4
).--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 de un 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 C2 (por ejemplo,c2-standard-4
).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 de un 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 una política de recursos de forma manual y usarla en varios grupos de nodos.
Crea la política de recursos en la región de 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 C2 (por ejemplo,c2-standard-4
).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 de un 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 C2. Por ejemplo, para usar un tipo predefinido de máquina C2 con 4 CPU virtuales, especificac2-standard-4
.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 C2 (por ejemplo,c2-standard-4
).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
A partir de la versión 1.25 de GKE, el aprovisionamiento automático de nodos admite una política de ubicación compacta. 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.
A fin de habilitar la ubicación compacta para el aprovisionamiento automático de nodos, 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.cloud.google.com/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.
El siguiente ejemplo es una especificación de Pod que habilita la ubicación compacta:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
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 ejemplo siguiente, 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.