Nesta página, mostramos como consumir recursos zonais reservados do Compute Engine em cargas de trabalho específicas do GKE. Essas reservas de capacidade oferecem um alto nível de garantia de que um hardware específico está disponível para suas cargas de trabalho.
Confira se você já conhece os conceitos de reservas do Compute Engine, como tipos de consumo, compartilhamento e provisionamento. Para mais detalhes, consulte Reservas para recursos zonais do Compute Engine.
Esta página é destinada às seguintes pessoas:
- Operadores de aplicativos que implantam cargas de trabalho que precisam ser executadas o mais rápido possível, geralmente com hardware especializado, como GPUs.
- Administradores de plataforma que querem ter um alto nível de garantia de que as cargas de trabalho são executadas em hardware otimizado que atende aos requisitos de aplicativos e da organização.
Sobre o consumo de reservas no GKE
Com as reservas de capacidade do Compute Engine, é possível provisionar configurações de hardware específicas em Google Cloud zonas, imediatamente ou em um horário futuro especificado. Depois, é possível consumir essa capacidade reservada no GKE.
Dependendo do modo de operação do GKE, é possível consumir os seguintes tipos de reserva:
- Modo Autopilot: apenas reservas específicas.
- Modo padrão: reservas específicas ou qualquer reserva correspondente.
Para ativar o consumo de reservas e criar recursos, especifique uma afinidade de reserva, como any
ou specific
.
Opções de consumo de reserva no GKE
O GKE permite consumir reservas diretamente em cargas de trabalho individuais usando nodeSelectors do Kubernetes no manifesto da carga de trabalho ou criando pools de nós do modo Standard que consomem a reserva. Nesta página, descrevemos a abordagem de selecionar diretamente reservas em recursos individuais.
Também é possível configurar o GKE para consumir reservas durante operações de escalonamento que criam novos nós usando classes de computação personalizadas. Com as classes de computação personalizadas, os administradores de plataforma definem uma hierarquia de configurações de nós para o GKE priorizar durante o escalonamento de nós. Assim, as cargas de trabalho são executadas no hardware selecionado.
É possível especificar reservas na configuração da classe de computação personalizada para que qualquer carga de trabalho do GKE que use essa classe indique ao GKE para consumir as reservas especificadas para essa classe.
Para saber mais, na página "Sobre as classes de computação personalizadas", consulte Consumir reservas do Compute Engine.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update
. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Consumir reservas de capacidade em clusters do Autopilot
Com os clusters Autopilot, é possível consumir recursos de reservas de capacidade do Compute Engine no mesmo projeto ou em um projeto compartilhado. Defina a property do tipo de consumo da reserva de destino como específico e selecione essa reserva explicitamente no manifesto. Se você não especificar explicitamente uma reserva, os clusters Autopilot não consumirão as reservas. Para saber mais sobre os tipos de consumo de reservas, consulte Como funcionam as reservas.
Essas reservas se qualificam para os descontos por compromisso de uso flexíveis do Compute. Use a classe de computação Accelerator
ou Performance
para consumir reservas de capacidade.
Antes de começar, crie um cluster do Autopilot executando as seguintes versões:
- Para consumir aceleradores reservados, como GPUs: 1.28.6-gke.1095000 ou mais recente
- Para executar pods em uma série de máquinas específica e com cada pod em um nó próprio: 1.28.6-gke.1369000 e posterior ou versão 1.29.1-gke.1575000 e posterior.
Criar reservas de capacidade para o Autopilot
Os pods do Autopilot podem consumir reservas com a property do tipo de consumo específico no mesmo projeto que o cluster ou em uma reserva compartilhada de um projeto diferente. Para consumir o hardware reservado, faça referência explícita a essa reserva no manifesto. É possível consumir reservas no Autopilot para os seguintes tipos de hardware:
Qualquer um dos seguintes tipos de GPU:
nvidia-gb200
: NVIDIA GB200 (pré-lançamento)nvidia-b200
: NVIDIA B200 (180GB)nvidia-h200-141gb
: NVIDIA H200 (141GB)nvidia-h100-mega-80gb
: NVIDIA H100 Mega (80GB)nvidia-h100-80gb
: NVIDIA H100 (80GB)nvidia-a100-80gb
: NVIDIA A100 (80GB)nvidia-tesla-a100
: NVIDIA A100 (40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
Qualquer um dos seguintes tipos de TPUs:
tpu-v6e-slice
: fração de TPU v6etpu-v5p-slice
: fração da TPU v5ptpu-v5-lite-podslice
: podslice lite da TPU v5tpu-v5-lite-device
: dispositivo TPU v5 Litetpu-v4-lite-device
: dispositivo TPU v4 Litetpu-v4-podslice
: podslice de TPU v4tpu-v3-device
: dispositivo TPU v3tpu-v3-slice
: podslice de TPU v3
Para criar uma reserva de capacidade, consulte os recursos a seguir. O bloco precisa atender aos seguintes requisitos:
- Os tipos de máquina, tipos de acelerador e quantidades de acelerador correspondem ao que suas cargas de trabalho consumirão.
A reserva usa o tipo de consumo específico. Por exemplo, na gcloud CLI, é necessário especificar a flag
--require-specific-reservation
ao criar a reserva.
O GKE anexa automaticamente todos os SSDs locais da reserva específica selecionada ao nó. Não é necessário selecionar SSDs locais individuais no manifesto da carga de trabalho. Por exemplo, se a reserva selecionada incluir dois SSDs locais, os nós que o GKE criar com base nessa reserva terão dois SSDs locais anexados.
Consumir uma reserva específica no mesmo projeto no Autopilot
Nesta seção, mostramos como consumir uma reserva de capacidade específica que está no mesmo projeto que seu cluster. É possível usar o kubectl ou o Terraform.
kubectl
Salve o seguinte manifesto
specific-autopilot.yaml
como : Esse manifesto tem seletores de nós que consomem uma reserva específica. É possível usar instâncias de VM ou aceleradores.Instâncias de VM
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 2 memory: "4Gi"
Substitua:
MACHINE_SERIES
: uma série de máquinas que contém o tipo de máquina das VMs na sua reserva de capacidade específica. Por exemplo, se a reserva for para tipos de máquinac3-standard-4
, especifiquec3
no campoMACHINE_SERIES
.RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.
Aceleradores de GPU
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: QUANTITY
Substitua:
ACCELERATOR
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Precisa ser um dos seguintes valores:nvidia-gb200
: NVIDIA GB200 (pré-lançamento)nvidia-b200
: NVIDIA B200 (180GB)nvidia-h200-141gb
: NVIDIA H200 (141GB)nvidia-h100-mega-80gb
: NVIDIA H100 Mega (80GB)nvidia-h100-80gb
: NVIDIA H100 (80GB)nvidia-a100-80gb
: NVIDIA A100 (80GB)nvidia-tesla-a100
: NVIDIA A100 (40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.QUANTITY
: o número de GPUs a serem anexadas ao contêiner. Precisa ser uma quantidade compatível com a GPU especificada, conforme descrito em Quantidades de GPUs compatíveis.
Aceleradores de TPU
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-tpu-accelerator: ACCELERATOR cloud.google.com/gke-tpu-topology: TOPOLOGY cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: google.com/tpu: QUANTITY
Substitua:
ACCELERATOR
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Precisa ser um dos valores abaixo:tpu-v6e-slice
: fração de TPU v6etpu-v5p-slice
: fração da TPU v5ptpu-v5-lite-podslice
: podslice lite da TPU v5tpu-v5-lite-device
: dispositivo TPU v5 Litetpu-v4-lite-device
: dispositivo TPU v4 Litetpu-v4-podslice
: podslice de TPU v4tpu-v3-device
: dispositivo TPU v3tpu-v3-slice
: podslice de TPU v3
TOPOLOGY
: a topologia da TPU.RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.QUANTITY
: o número de TPUs a serem anexadas ao contêiner. Precisa estar alinhado com a topologia de TPU.
Implante o pod:
kubectl apply -f specific-autopilot.yaml
O Autopilot usa a capacidade reservada na reserva especificada para provisionar um novo nó e posicionar o pod.
Terraform
Para consumir uma reserva específica no mesmo projeto com instâncias de VM usando o Terraform, consulte o exemplo a seguir:
Para consumir uma reserva específica no mesmo projeto com a classe de computação do acelerador usando o Terraform, consulte o exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Consumir uma reserva compartilhada específica no Autopilot
Nesta seção, usamos os seguintes termos:
- Projeto de proprietário: o projeto que é proprietário da reserva e que a compartilha com outros projetos.
- Projeto do consumidor: o projeto que executa as cargas de trabalho que consomem a reserva compartilhada.
Para consumir uma reserva compartilhada, você precisa conceder ao agente de serviço do GKE acesso à reserva no projeto que é proprietário dela. Faça o seguinte:
Crie um papel personalizado do IAM que contenha a permissão
compute.reservations.list
no projeto de proprietário:gcloud iam roles create ROLE_NAME \ --project=OWNER_PROJECT_ID \ --permissions='compute.reservations.list'
Substitua:
ROLE_NAME
: um nome para a nova função.OWNER_PROJECT_ID
: o ID do projeto que tem a reserva de capacidade.
Conceda ao agente de serviço do GKE no projeto consumidor acesso para listar reservas compartilhadas no projeto proprietário:
gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \ --project=OWNER_PROJECT_ID \ --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role='projects/OWNER_PROJECT_ID/roles/ROLE_NAME'
Substitua
CONSUMER_PROJECT_NUMBER
pelo número de projeto numérico do seu projeto de consumidor. Para encontrar esse número, consulte Como identificar projetos na documentação do Resource Manager.Salve o seguinte manifesto
shared-autopilot.yaml
como : Esse manifesto tem nodeSelectors que instruem o GKE a consumir uma reserva compartilhada específica.Instâncias de VM
apiVersion: v1 kind: Pod metadata: name: performance-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 2 memory: "4Gi"
Substitua:
MACHINE_SERIES
: uma série de máquinas que contém o tipo de máquina das VMs na sua reserva de capacidade específica. Por exemplo, se a reserva for para tipos de máquinac3-standard-4
, especifiquec3
no campoMACHINE_SERIES
.RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.OWNER_PROJECT_ID
: o ID do projeto que tem a reserva de capacidade.
Aceleradores de GPU
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: QUANTITY
Substitua:
ACCELERATOR
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Precisa ser um dos seguintes valores:nvidia-gb200
: NVIDIA GB200 (pré-lançamento)nvidia-b200
: NVIDIA B200 (180GB)nvidia-h200-141gb
: NVIDIA H200 (141GB)nvidia-h100-mega-80gb
: NVIDIA H100 Mega (80GB)nvidia-h100-80gb
: NVIDIA H100 (80GB)nvidia-a100-80gb
: NVIDIA A100 (80GB)nvidia-tesla-a100
: NVIDIA A100 (40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.OWNER_PROJECT_ID
: o ID do projeto que tem a reserva de capacidade.QUANTITY
: o número de GPUs a serem anexadas ao contêiner. Precisa ser uma quantidade compatível com a GPU especificada, conforme descrito em Quantidades de GPUs compatíveis.
Aceleração com TPU
apiVersion: v1 kind: Pod metadata: name: specific-shared-project-pod spec: nodeSelector: cloud.google.com/gke-tpu-accelerator: ACCELERATOR cloud.google.com/gke-tpu-topology: TOPOLOGY cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: google.com/tpu: QUANTITY
Substitua:
ACCELERATOR
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Precisa ser um dos valores abaixo:tpu-v6e-slice
: fração de TPU v6etpu-v5p-slice
: fração da TPU v5ptpu-v5-lite-podslice
: podslice lite da TPU v5tpu-v5-lite-device
: dispositivo TPU v5 Litetpu-v4-lite-device
: dispositivo TPU v4 Litetpu-v4-podslice
: podslice de TPU v4tpu-v3-device
: dispositivo TPU v3tpu-v3-slice
: podslice de TPU v3
TOPOLOGY
: a topologia da TPU.RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.OWNER_PROJECT_ID
: o ID do projeto que tem a reserva de capacidade.QUANTITY
: o número de TPUs a serem anexadas ao contêiner. Precisa estar alinhado com a topologia de TPU.
Implante o pod:
kubectl apply -f shared-autopilot.yaml
O Autopilot usa a capacidade reservada na reserva especificada para provisionar um novo nó e posicionar o pod.
Consumir um bloco de reserva específico no Autopilot
Nesta seção, mostramos como consumir um bloco de reserva de capacidade específico que está no mesmo projeto que seu cluster ou em um projeto compartilhado.
Esse recurso está disponível apenas para aceleradores específicos.
É possível usar kubectl
para configurar o pod e consumir o bloco de reserva.
Salve o seguinte manifesto
reservation-block-autopilot.yaml
como : Esse manifesto tem seletores de nós que consomem uma reserva específica.Projeto local
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" cloud.google.com/reservation-blocks: RESERVATION_BLOCKS_NAME containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: QUANTITY
Substitua:
ACCELERATOR
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Precisa ser um dos valores abaixo:nvidia-b200
: NVIDIA B200 (180GB)nvidia-h200-141gb
: NVIDIA H200 (141GB)
RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.RESERVATION_BLOCKS_NAME
: o nome do bloco de reserva de capacidade do Compute Engine.QUANTITY
: o número de GPUs a serem anexadas ao contêiner. Precisa ser uma quantidade compatível com a GPU especificada, conforme descrito em Quantidades de GPUs compatíveis.
Para reservas de outro projeto, adicione cloud.google.com/reservation-project: OWNER_PROJECT_ID ao campo
spec.nodeSelector
. SubstituaOWNER_PROJECT_ID
pelo ID do projeto que é proprietário da reserva de capacidade.Implante o pod:
kubectl apply -f reservation-block-autopilot.yaml
O Autopilot usa a capacidade reservada no bloco de reserva especificado para provisionar um novo nó e posicionar o pod.
Consumir um sub-bloco de reserva específico no Autopilot
Nesta seção, mostramos como consumir um sub-bloco de reserva de capacidade específico que está no mesmo projeto que seu cluster ou em um projeto compartilhado.
Salve o seguinte manifesto ComputeClass como
reservation-sub-block-computeclass.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: specific-reservation-subblock spec: nodePoolAutoCreation: enabled: true priorities: - gpu: type: ACCELERATOR_TYPE count: ACCELERATOR_COUNT reservations: affinity: Specific specific: - name: RESERVATION_NAME project: RESERVATION_PROJECT_ID reservationBlock: name: RESERVATION_BLOCK_NAME reservationSubBlock: name: RESERVATION_SUB_BLOCK_NAME
Substitua:
ACCELERATOR_TYPE
: o acelerador que você reservou na reserva de capacidade do Compute Engine. Esse valor precisa sernvidia-gb200
.ACCELERATOR_COUNT
: o número de aceleradores a serem anexados a cada nó. Esse valor precisa ser uma quantidade compatível com o tipo de acelerador especificado. Para mais informações, consulte Quantidades de GPU compatíveis.RESERVATION_NAME
: o nome da reserva de capacidade do Compute Engine.RESERVATION_PROJECT_ID
: o ID do projeto que tem a reserva de capacidade.RESERVATION_BLOCK_NAME
: o nome do bloco de reserva de capacidade do Compute Engine.RESERVATION_SUB_BLOCK_NAME
: o nome do sub-bloco da reserva de capacidade do Compute Engine.
Salve o seguinte manifesto de pod como
reservation-sub-block-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: reservation-sub-block-pod spec: nodeSelector: cloud.google.com/compute-class: specific-reservation-subblock containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral-storage: "200Gi" limits: nvidia.com/gpu: CONTAINER_GPU_COUNT
Substitua
CONTAINER_GPU_COUNT
pelo número de GPUs a serem alocadas para o contêiner. Esse valor precisa ser menor ou igual ao número de aceleradores que a classe de computação anexa a cada nó.Implante o pod:
kubectl apply -f reservation-sub-block-pod.yaml
O Autopilot usa a capacidade reservada no sub-bloco de reserva especificado para provisionar um novo nó e executar o pod.
Solução de problemas de consumo de reservas no Autopilot
- Verifique se os tipos de máquina, tipos de acelerador, configurações de SSD local e quantidades de acelerador correspondem ao que suas cargas de trabalho consumirão. Para ver uma lista completa de properties que precisam de correspondência, consulte Properties de reserva de capacidade do Compute Engine.
- Verifique se a reserva foi criada com afinidade específica.
- Ao usar reservas compartilhadas, verifique se o agente de serviço do GKE no projeto consumidor tem permissão para listar reservas compartilhadas no projeto proprietário.
Como consumir instâncias reservadas no GKE Standard
Ao criar um cluster ou pool de nós, indique o modo de consumo de reserva especificando a sinalização --reservation-affinity
.
Como consumir reservas correspondentes
É possível criar uma reserva e instâncias para consumir qualquer reserva usando a gcloud CLI ou o Terraform.
gcloud
Para consumir automaticamente qualquer reserva correspondente, defina a sinalização de afinidade de reserva como --reservation-affinity=any
. Como any
é o valor padrão definido no Compute Engine, é possível omitir completamente a flag de afinidade de reserva.
No modo de consumo de reserva any
, os nós usam primeiro a capacidade de todas as reservas de projeto único antes das reservas compartilhadas, que estão mais disponíveis para outros projetos. Para saber
como as instâncias são consumidas automaticamente, consulte a
ordem de consumo.
Crie uma reserva de três instâncias de VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3
Substitua:
RESERVATION_NAME
: o nome da reserva a ser criada.MACHINE_TYPE
: o tipo de máquina (somente nome) a ser usado para a reserva. Por exemplo,n1-standard-2
.
Verifique se a reserva foi criada corretamente:
gcloud compute reservations describe RESERVATION_NAME
Crie um cluster com um nó para consumir qualquer reserva correspondente:
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any
Substitua
CLUSTER_NAME
pelo nome do cluster a ser criado.Crie um pool de nós com três nós para consumir qualquer reserva correspondente:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME --num-nodes=3 \ --machine-type=MACHINE_TYPE --reservation-affinity=any
Substitua
NODEPOOL_NAME
pelo nome do pool de nós a ser criado.
O número total de nós é quatro, o que excede a capacidade da reserva. Três dos nós consomem a reserva enquanto o último nó utiliza o pool geral de recursos do Compute Engine.
Terraform
Para criar uma reserva de três instâncias de VM usando o Terraform, consulte o exemplo a seguir:
Para criar um cluster com um nó para consumir qualquer reserva correspondente usando o Terraform, consulte o exemplo a seguir:
Para criar um pool de nós com três nós para consumir qualquer reserva correspondente usando o Terraform, consulte o exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Como consumir uma reserva específica de projeto único
Para consumir uma reserva específica, defina a sinalização de afinidade de reserva como --reservation-affinity=specific
e informe o nome dessa reserva. Nesse modo, as instâncias precisam usar a capacidade da reserva especificada na zona. A solicitação gerará uma falha se a reserva não tiver capacidade suficiente.
Se quiser criar uma reserva e instâncias para consumir uma reserva específica, siga as etapas abaixo. É possível usar a gcloud CLI ou o Terraform.
gcloud
Crie uma reserva específica de três instâncias de VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --require-specific-reservation
Substitua:
RESERVATION_NAME
: o nome da reserva a ser criada.MACHINE_TYPE
: o tipo de máquina (somente nome) a ser usado para a reserva. Por exemplo,n1-standard-2
.
Crie um pool de nós com um único nó para consumir uma reserva específica de um único projeto:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific --reservation=RESERVATION_NAME
Substitua:
NODEPOOL_NAME
: o nome do pool de nós a ser criado.CLUSTER_NAME
: o nome do cluster que você criou.
Terraform
Para criar uma reserva específica usando o Terraform, consulte o exemplo a seguir:
Para criar um pool de nós com um único nó para consumir uma reserva específica de um único projeto usando o Terraform, consulte o exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Como consumir uma reserva compartilhada específica
Para criar uma reserva compartilhada específica e consumi-la, siga as etapas abaixo. É possível usar a gcloud CLI ou o Terraform.
gcloud
Crie uma reserva compartilhada específica:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --zone=ZONE \ --require-specific-reservation \ --project=OWNER_PROJECT_ID \ --share-setting=projects \ --share-with=CONSUMER_PROJECT_IDS
Substitua:
RESERVATION_NAME
: o nome da reserva a ser criada.MACHINE_TYPE
: o nome do tipo de máquina a ser usado para a reserva. Por exemplo,n1-standard-2
.OWNER_PROJECT_ID
: o ID do projeto para o qual essa reserva compartilhada será criada. Se você omitir a flag--project
, o GKE usará o projeto atual como proprietário por padrão.CONSUMER_PROJECT_IDS
: uma lista separada por vírgulas dos IDs dos projetos com os quais você quer compartilhar essa reserva. Por exemplo,project-1,project-2
. É possível incluir de 1 a 100 projetos de consumidor. Esses projetos precisam estar na mesma organização do projeto de proprietário. Não inclua oOWNER_PROJECT_ID
, porque ele pode consumir essa reserva por padrão.
Consumir a reserva compartilhada:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific \ --reservation=projects/OWNER_PROJECT_ID/reservations/RESERVATION_NAME
Substitua:
NODEPOOL_NAME
: o nome do pool de nós a ser criado.CLUSTER_NAME
: o nome do cluster que você criou.
Terraform
Para criar uma reserva compartilhada específica usando o Terraform, consulte o exemplo a seguir:
Para consumir a reserva compartilhada específica usando o Terraform, consulte o exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Outras considerações sobre o consumo de uma reserva específica
Quando um pool de nós é criado com uma afinidade específica de reserva, incluindo pools padrão na criação do cluster, o tamanho dele é limitado à capacidade da reserva específica durante todo o ciclo de vida do pool. Isso afeta os seguintes recursos do GKE:
- Cluster com várias zonas: em clusters regionais ou de várias zonas, os nós de um pool podem se estender por várias zonas. Como as reservas são exclusivas de uma zona, é necessário ter várias reservas. Para ter um pool de nós que consuma a reserva desses clusters, crie uma reserva específica com exatamente os mesmos nome e propriedades de máquina em cada zona do pool.
- Upgrade automático de clusters e upgrades de pools de nós: se você não tiver capacidade extra na reserva específica, os upgrades de pools de nós ou o escalonamento automático do pool de nós poderão falhar porque as duas operações exigem criação de outras instâncias. Para resolver isso, altere o tamanho da reserva ou libere alguns dos seus recursos limitados.
Como consumir reservas de GPU
Para criar um pool de nós do Standard que consuma uma reserva de GPU ou
qualquer reserva em que a capacidade esteja em uma única zona, especifique
a flag --node-locations
ao adicionar um pool de nós. Ao criar um cluster padrão regional ou um cluster padrão multizonal, especificar os locais dos nós garante que o GKE crie nós apenas em uma zona em que você tenha capacidade de GPU reservada.
Para instruções detalhadas sobre como criar um pool de nós que usa GPUs, consulte Criar um pool de nós de GPU.
Como consumir reservas de TPU
Para criar um pool de nós Standard que consuma uma reserva de TPU, especifique a flag --node-locations
ao adicionar um pool de nós. Ao criar um cluster regional do Standard ou um cluster multizonal do Standard, especificar os locais dos nós garante que o GKE crie nós apenas em uma zona em que você reservou capacidade de TPU.
As reservas de TPU são diferentes de outros tipos de máquina. Confira a seguir os aspectos específicos da TPU que precisam ser considerados ao criar reservas de TPU:
- Ao usar TPUs no GKE,
SPECIFIC
é o único valor compatível com a flag--reservation-affinity
.
Para instruções detalhadas sobre como criar um pool de nós que usa TPUs, consulte Criar um pool de nós de TPU.
Como criar nós sem consumir reservas
Para evitar expressamente o consumo de recursos de qualquer reserva, defina a afinidade como --reservation-affinity=none
.
Crie um cluster que não consuma nenhuma reserva:
gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
Substitua
CLUSTER_NAME
pelo nome do cluster a ser criado.Crie um pool de nós que não consuma nenhuma reserva:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=none
Substitua
NODEPOOL_NAME
pelo nome do pool de nós a ser criado.
Como seguir reservas disponíveis entre zonas
Ao usar pools de nós em execução em várias zonas com reservas que não sejam
iguais entre zonas, use a sinalização --location_policy=ANY
. Isso garante
que, quando novos nós forem adicionados ao cluster, eles sejam criados na zona que
ainda tem reservas não utilizadas.
Como fazer a limpeza
Para evitar cobranças dos recursos usados nesta página na conta do Google Billing, siga estas etapas:
Exclua os clusters criados executando o seguinte comando para cada um dos clusters:
gcloud container clusters delete CLUSTER_NAME
Exclua as reservas criadas executando o seguinte comando para cada uma das reservas:
gcloud compute reservations delete RESERVATION_NAME
A seguir
- Saiba mais sobre como reservar recursos por zona do Compute Engine.
- Saiba mais sobre pools de nós.
- Saiba mais sobre o escalonador automático de clusters.
- Saiba mais sobre as estratégias de upgrade de nós.