Pode controlar se os nós do Google Kubernetes Engine (GKE) estão fisicamente localizados uns em relação aos outros numa zona através de uma política de posicionamento compacto.
Vista geral
Quando cria pools de nós e cargas de trabalho num cluster do GKE, pode definir uma política de posicionamento compacto, que especifica que estes nós ou cargas de trabalho devem ser colocados mais próximos fisicamente uns dos outros numa zona. Ter nós mais próximos uns dos outros pode reduzir a latência da rede entre nós, o que pode ser especialmente útil para cargas de trabalho em lote fortemente acopladas.
Use o posicionamento compacto com o GKE Autopilot
Nos clusters do Autopilot, pode pedir o posicionamento compacto para cargas de trabalho específicas adicionando seletores de nós à especificação do pod. Pode usar a política de posicionamento compacta do Autopilot predefinida ou uma política de posicionamento compacta do Compute Engine existente que use a série de máquinas N2 ou a série de máquinas N2D.
Limitações
- O GKE aprovisiona cargas de trabalho num posicionamento compacto na mesma zona.
- Disponível com as classes de computação
Balanced
,Performance
eAccelerator
. - Disponível apenas nos tipos de máquinas C2, C2D, C3, C3D, C4D (1.33.0-gke.1439000 ou posterior), H3, H4D, N2 e N2D.
- Disponível apenas com GPUs A100, L4 e H100.
- O posicionamento compacto está disponível para pods agrupados em até 1500 nós.
Ative uma política de posicionamento compacta
Para ativar o posicionamento compacto para o GKE Autopilot, adicione um
nodeSelector
à especificação do pod com as seguintes chaves:
cloud.google.com/gke-placement-group
: o identificador que atribui ao grupo de pods que devem ser executados em conjunto, no mesmo grupo de posicionamentos compacto. Cada grupo de posicionamentos está limitado a 1500 nós. Recomendamos que limite um grupo de posicionamentos apenas às cargas de trabalho que beneficiam do agrupamento e distribua as cargas de trabalho em grupos de posicionamentos separados, sempre que possível.Uma das seguintes chaves para definir o tipo de recurso:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name
: opcionalmente, o nome de uma política de posicionamento compacta do Compute Engine existente. Só pode especificar uma política de posicionamento compacta personalizada na versão 1.31.1-gke.2010000 e posteriores do GKE.Para ver instruções, consulte a secção Crie uma política de posicionamento compacta nesta página.
A especificação de Pod de exemplo seguinte permite o posicionamento compacto com uma política de posicionamento compacto 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
Substitua PLACEMENT_POLICY_NAME
pelo nome de uma política de posicionamento compacta do Compute Engine existente. Para usar a política de posicionamento compacta predefinida para o Autopilot, omita a linha cloud.google.com/placement-policy-name
.
Use uma política de posicionamento compacta personalizada sem grupos de posicionamentos
Para usar uma política de posicionamento compacta personalizada sem grupos de posicionamentos, tem de
adicionar o seletor de nós cloud.google.com/placement-policy-name
à especificação do pod
ou definir uma classe de computação personalizada com prioridade de posicionamento.
Adicione o seletor de nós cloud.google.com/placement-policy-name
à especificação do pod
Esta abordagem pode ser útil se quiser usar um JobSet para agendar cada tarefa separadamente, mas também quiser usar uma política de posicionamento compacta personalizada para posicionar os nós que executam a mesma tarefa mais próximos uns dos outros.
Uma vez que o JobSet não suporta a especificação de seletores de nós diferentes para cada tarefa, não pode usar o JobSet com grupos de posicionamentos neste cenário. No entanto, pode usar o suporte integrado do JobSet para topologias exclusivas para alcançar o mesmo efeito.
A especificação do pod de exemplo seguinte permite o posicionamento compacto com uma política de posicionamento compacto personalizada para uma carga de trabalho 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
Substitua PLACEMENT_POLICY_NAME
pelo nome de uma política de posicionamento compacta do Compute Engine existente.
Use uma classe de computação personalizada para definir a política de posicionamento
Consulte a documentação classe de computação personalizada com prioridade de posicionamento para ver os detalhes.
Em vez de adicionar um nodeSelector
com o nome da política diretamente à especificação da carga de trabalho, pode aplicar uma política de posicionamento compacta definindo o campo placement
numa definição de ComputeClass
. Para mais detalhes, consulte o artigo Classe de computação personalizada com prioridade de posicionamento.
Use o posicionamento compacto com o GKE Standard
Limitações
O posicionamento compacto em pools de nós padrão do GKE tem as seguintes limitações:
- Apenas suportado em novos conjuntos de nós. Não pode ativar nem desativar o posicionamento compacto em pools de nós existentes.
- Disponível apenas para pools de nós que operam numa única zona.
- Disponível apenas nos tipos de máquinas A2, A3, A4, C2, C2D, C3, C3D, C4, C4D, G2, H3, H4D, N2 e N2D. No entanto, para o A3 Ultra e o A4, recomendamos usar reservas segmentadas por blocos em vez do posicionamento compacto. Para ver detalhes, consulte Reserve capacidade.
- Suporta até 1500 instâncias de VM do Compute Engine em cada política. Qualquer conjunto de nós que exceda este limite em qualquer altura é rejeitado durante a criação.
- O fornecimento de uma política de recursos personalizada através da flag
placement-policy
não é suportado com atualizações azul-verde.
Crie uma política de posicionamento compacta
Para criar políticas de posicionamento compactas, na CLI Google Cloud, especifique a opção placement-type=COMPACT
durante a criação do cluster ou do conjunto de nós. Com esta definição, o GKE tenta colocar os nós num conjunto de nós numa proximidade física mais próxima uns dos outros.
Para usar uma política de recursos existente no seu cluster, especifique a localização da sua política personalizada para a flag placement-policy
durante a criação do cluster ou do conjunto de nós. Isto permite a flexibilidade de usar posicionamentos reservados, vários conjuntos de nós com a mesma política de posicionamento e outras opções de posicionamento avançadas. No entanto, também requer mais operações manuais do que especificar a flag --placement-type=COMPACT. Por exemplo, tem de criar, eliminar e manter as suas políticas de recursos personalizadas. Certifique-se de que
o número máximo de instâncias de VM é respeitado em
todos os conjuntos de nós que usam a política de recursos. Se este limite for atingido enquanto alguns dos seus pools de nós não atingiram o tamanho máximo, a adição de mais nós falha.
Se não especificar as flags placement-type
e placement-policy
, por predefinição, não existem requisitos de posicionamento de nós.
Crie uma política de posicionamento compacta num novo cluster
Quando cria um novo cluster, pode especificar uma política de posicionamento compacta que será aplicada ao conjunto de nós predefinido. Para todos os conjuntos de nós subsequentes que criar para o cluster, tem de especificar se quer aplicar o posicionamento compacto.
Para criar um novo cluster onde o conjunto de nós predefinido tem uma política de posicionamento compacto aplicada, use o seguinte comando:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
Substitua o seguinte:
CLUSTER_NAME
: o nome do novo cluster.MACHINE_TYPE
: O tipo de máquina a usar para os nós, que tem de ser um tipo de máquina suportado indicado nas limitações do cluster padrão.--placement-type COMPACT
: aplica o posicionamento compacto aos nós no conjunto de nós predefinido.MAX_UNAVAILABLE
: número máximo de nós que podem estar indisponíveis em simultâneo durante uma atualização do node pool. Para o posicionamento compacto, recomendamos atualizações rápidas sem picos para otimizar a probabilidade de encontrar nós colocados durante as atualizações.
Crie uma política de posicionamento compacta num cluster existente
Num cluster existente, pode criar um node pool com uma política de posicionamento compacto aplicada.
Para criar um node pool com uma política de posicionamento compacta aplicada, use o seguinte 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
Substitua o seguinte:
NODEPOOL_NAME
: o nome do novo node pool.MACHINE_TYPE
: O tipo de máquina a usar para os nós, que tem de ser um tipo de máquina suportado indicado nas limitações do cluster padrão.CLUSTER_NAME
: o nome do cluster existente.--placement-type COMPACT
: indica que deve aplicar o posicionamento compacto aos nós no novo node pool.MAX_UNAVAILABLE
: número máximo de nós que podem estar indisponíveis em simultâneo durante uma atualização do node pool. Para o posicionamento compacto, recomendamos atualizações rápidas sem picos para otimizar a probabilidade de encontrar nós colocados durante as atualizações.
Crie node pools com uma política de posicionamento personalizada partilhada
Pode criar manualmente uma política de recursos e usá-la em vários conjuntos de nós.
Crie a política de recursos na Trusted Cloud região do cluster:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
Substitua o seguinte:
POLICY_NAME
: o nome da política de recursos.REGION
: a região do seu cluster.
Crie um node pool com a 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
Substitua o seguinte:
NODEPOOL_NAME
: o nome do novo node pool.MACHINE_TYPE
: o tipo de máquina a usar para os nós, que tem de ser um tipo de máquina suportado indicado nas limitações do cluster padrão.CLUSTER_NAME
: o nome do cluster existente.MAX_UNAVAILABLE
: número máximo de nós que podem estar indisponíveis em simultâneo durante uma atualização do node pool. Para o posicionamento compacto, recomendamos atualizações rápidas sem picos para otimizar a probabilidade de encontrar nós colocados durante as atualizações.
Use uma reserva do Compute Engine com uma política de posicionamento compacta
As reservas ajudam a garantir que o hardware está disponível numa zona especificada, o que reduz o risco de falha na criação do conjunto de nós causada por hardware insuficiente.
Crie uma reserva que especifique uma política de posicionamento 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
Substitua o seguinte:
RESERVATION_NAME
: o nome da sua reserva.MACHINE_COUNT
: o número de nós reservados.MACHINE_TYPE
: o tipo de máquina a usar para os nós, que tem de ser um tipo de máquina suportado indicado nas limitações do cluster padrão.POLICY_NAME
: o nome da política de recursos.ZONE
: a zona onde criar a sua reserva.
Crie um node pool especificando a política de posicionamento compacta e a reserva que criou no passo 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
Substitua o seguinte:
NODEPOOL_NAME
: o nome do novo node pool.MACHINE_TYPE
: O tipo de máquina a usar para os nós, que tem de ser um tipo de máquina suportado indicado nas limitações do cluster padrão.CLUSTER_NAME
: o nome do cluster existente.
Crie uma carga de trabalho em nós que usam o posicionamento compacto
Para executar cargas de trabalho em nós dedicados que usam o posicionamento compacto, pode usar vários mecanismos do Kubernetes, como atribuir pods a nós e impedir o agendamento de pods indesejados num grupo de nós para o conseguir.
No exemplo seguinte, adicionamos uma mancha aos nós dedicados e adicionamos uma tolerância e uma afinidade correspondentes aos pods.
Adicione uma restrição aos nós no conjunto de nós que tem uma política de posicionamento compacta:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
Na definição da carga de trabalho, especifique a tolerância necessária e uma afinidade de nó. Segue-se um exemplo com um único 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
Em algumas localizações, pode não ser possível criar um conjunto de nós grande com uma política de posicionamento compacta. Para limitar o tamanho destes conjuntos de nós ao que é necessário, deve considerar criar um conjunto de nós por carga de trabalho que exija um posicionamento compacto.
Use o posicionamento compacto para o aprovisionamento automático dos nós
Com o aprovisionamento automático de nós, o GKE aprovisiona automaticamente pools de nós com base na procura de recursos do cluster. Para mais informações, consulte o artigo Usar o aprovisionamento automático de nós.
Para ativar o posicionamento compacto para o aprovisionamento automático de nós, adicione um nodeSelector
à especificação do pod, como no exemplo seguinte:
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
Substitua o seguinte:
PLACEMENT_GROUP_IDENTIFIER
: o identificador que atribui ao grupo de pods que devem ser executados em conjunto, no mesmo grupo de posicionamento compacto.MACHINE_FAMILY
: o nome da família de máquinas. Use uma das famílias de máquinas que suportam o posicionamento compacto. Recomendamos que use as famílias de máquinas C2 ou C2D para cargas de trabalho com requisitos de desempenho de computação e rede.PLACEMENT_POLICY_NAME
: opcionalmente, o nome de uma política de posicionamento compacta do Compute Engine existente. O GKE usa a política de posicionamento compacto especificada quando o aprovisionamento automático de nós cria um novo conjunto de nós para agrupar os seus pods. Só pode especificar uma política de posicionamento compacta personalizada na versão 1.31.1-gke.2010000 e posteriores do GKE.Para ver instruções, consulte a secção Crie uma política de posicionamento compacta nesta página.
Pode omitir a chave cloud.google.com/machine-family
se a configuração do Pod já definir um tipo de máquina suportado com o posicionamento compacto. Por exemplo, se a especificação do pod incluir nvidia.com/gpu
e o cluster estiver configurado para usar GPUs A100, não precisa de incluir a chave cloud.google.com/machine-family
.
O exemplo seguinte é uma especificação de pod que define o pedido nvidia.com/gpu
e o cluster está configurado para usar GPUs A100. Este
Pod spec
não inclui a chave 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 saber mais, veja como configurar pods para consumir GPUs.
Otimize o tamanho do grupo de posicionamentos
Uma vez que o GKE encontra o melhor posicionamento para implementações mais pequenas, recomendamos que instrua o GKE para evitar a execução de diferentes tipos de pods no mesmo grupo de posicionamento. Adicione uma chave de tolerância com a chave cloud.google.com/gke-placement-group
e o identificador de posicionamento compacto que definiu.
O exemplo seguinte é uma especificação de Pod que define uma tolerância de Pod com posicionamento compacto:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
Para mais informações sobre o aprovisionamento automático de nós com tolerância de pods, consulte o artigo Separação de cargas de trabalho
O que se segue?
- Saiba como definir políticas de posicionamento de instâncias no Compute Engine.