Você pode reservar instâncias do Compute Engine em uma zona específica para garantir que os recursos estejam disponíveis para as cargas de trabalho deles conforme a necessidade. Para mais detalhes sobre como gerenciar reservas, consulte Como reservar recursos por zona do Compute Engine.
Depois de criar reservas, é possível consumir os recursos reservados no GKE. O GKE é compatível com os mesmos modos de consumo do Compute Engine:
- Consumo de recursos de qualquer reserva: somente padrão
- Como consumir recursos de uma reserva específica: Standard e Autopilot
- Como criar nós sem consumir nenhuma reserva: Standard e Autopilot
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 Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
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 usando a classe de computação Accelerator: 1.28.6-gke.1095000 ou posterior
- Para usar a classe de computação de desempenho: 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-h100-80gb
: NVIDIA H100 (80 GB) (disponível apenas com a classe de computação Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80GB)nvidia-tesla-a100
: NVIDIA A100 (40GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
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.
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: 12 memory: "50Gi" ephemeral-storage: "200Gi"
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
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 valores abaixo:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (disponível apenas com a classe de computação Accelerator)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.
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: 12 memory: "50Gi" ephemeral-storage: "200Gi"
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
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 valores abaixo:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (disponível apenas com a classe de computação Accelerator)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.
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.
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 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.
Reserva da 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
degcloud container node-pools create
. - As reservas de TPU não podem ser compartilhadas entre projetos.
Para mais informações, consulte Reservas da TPU.
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.