Isole as suas cargas de trabalho do GKE com nós de inquilino único


Esta página mostra-lhe como isolar as suas cargas de trabalho em execução em clusters padrão do Google Kubernetes Engine (GKE) através de nós de inquilino único do Compute Engine, que são servidores físicos dedicados que executam apenas as VMs de um projeto específico. Pode usar nós de inquilino único para manter as suas VMs fisicamente separadas das VMs noutros projetos ou para agrupar as suas VMs no mesmo hardware do anfitrião.

Esta funcionalidade não é suportada no GKE Autopilot. Para saber mais sobre os limites de segurança do Autopilot, consulte o artigo Limites de segurança no Autopilot.

Para usar nós de inquilino único no GKE, crie um grupo de nós de inquilino único no Compute Engine e use esse grupo de nós para criar um conjunto de nós do GKE. Pode criar pools de nós com nós de inquilino único a partir do projeto do cluster do GKE ou nós de inquilino único partilhados com recursos em projetos na sua organização. Por exemplo, pode designar um projeto proprietário na sua organização onde cria grupos de nós de inquilino único e projetos consumidores onde tem clusters com conjuntos de nós que usam esses grupos de nós do projeto proprietário.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Peça quota adicional

Os nós de inquilino único são grandes (por exemplo, 96 vCPUs e 624 GB de memória) e as quotas de projetos predefinidas são demasiado baixas para os processar.

Tem de pedir um aumento da quota de CPUs da API Compute Engine na página de quotas para criar nós de inquilino único. Para mais informações sobre como pedir um aumento, consulte o artigo Quotas.

O número de CPUs de que precisa depende do seguinte:

  • A sua utilização atual da quota de CPU.
  • O tamanho do grupo de nós.
  • O modelo de nó.

Examine o número de núcleos do seu tipo de nó de inquilino único e peça um limite de CPU de, pelo menos, esse valor, de preferência com mais 10 CPUs para garantir que o seu projeto tem capacidade adequada.

Crie um modelo de nó de inquilino único

Um modelo de nó de inquilino único é um recurso regional que define e aplica propriedades a todos os nós quando cria um grupo de nós. Para mais informações, consulte os tipos de nós.

Se estiver a usar nós de inquilino único partilhados, certifique-se de que conclui estas instruções no projeto proprietário do grupo de nós e não no projeto consumidor do cluster.

Consola

  1. Aceda à página Nós de inquilino único na Trusted Cloud consola.

    Aceda a Nós de inquilino único

  2. Clique em Criar modelo de nó.

  3. Especifique um Nome e uma Região para o modelo de nó.

  4. Selecione um Tipo de nó. Para ver que tipos de máquinas são suportados para cada tipo de nó, consulte os tipos de nós na "Vista geral da posse exclusiva".

  5. Opcionalmente, adicione uma ou mais etiquetas de afinidade de nós.

  6. Clique em Criar para criar o modelo de nó.

gcloud

Use o comando gcloud compute sole-tenancy node-templates create para criar um modelo de nó:

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type=NODE_TYPE \
    --node-affinity-labels=AFFINITY_LABELS \
    --region=COMPUTE_REGION

Substitua o seguinte:

  • TEMPLATE_NAME: o nome do novo modelo de nó.
  • NODE_TYPE: o tipo de nó para nós de inquilino único criados com base neste modelo. Use o comando gcloud compute sole-tenancy node-types list para obter uma lista dos tipos de nós disponíveis em cada zona.
  • AFFINITY_LABELS: as chaves e os valores, [KEY=VALUE,...], para etiquetas de afinidade. As etiquetas de afinidade permitem-lhe agrupar logicamente nós e grupos de nós e, posteriormente, quando aprovisionar VMs, pode especificar etiquetas de afinidade nas VMs para agendar VMs num conjunto específico de nós ou grupos de nós. Para mais informações, consulte o artigo Afinidade e antiafinidade de nós.
  • COMPUTE_REGION: a região na qual criar o modelo de nó. Pode usar este modelo para criar grupos de nós em qualquer zona desta região.

O resultado é semelhante ao seguinte:

Created [https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/nodeTemplates/template-name].

Crie um grupo de nós de inquilino único

Um grupo de nós é um conjunto de nós de inquilino único numa zona específica a partir do mesmo modelo de nó de inquilino único. Para clusters regionais e pools de nós disponíveis em várias zonas, tem de criar um grupo de nós com o mesmo nome em cada zona. Certifique-se de que tem quota suficiente antes de concluir este passo.

Se estiver a usar nós de inquilino único partilhados, certifique-se de que conclui estas instruções no projeto proprietário do grupo de nós e não no projeto consumidor do cluster.

Consola

Para criar um grupo de nós de inquilino único, execute os seguintes passos:

  1. Aceda à página Nós de inquilino único na Trusted Cloud consola.

    Aceda a Nós de inquilino único

  2. Clique em Criar grupo de nós.

  3. Especifique um nome para o modelo de nó.

  4. Selecione a mesma Região em que criou o modelo de nó e, de seguida, selecione uma Zona nessa Região.

  5. Selecione o modelo de nó.

  6. Opcionalmente, ative o modo de ajuste de escala automático.

  7. Especifique o Número de nós que quer no grupo.

  8. Mantenha a Política de Manutenção predefinida, uma vez que outros valores podem causar interrupções.

  9. Opcionalmente, para partilhar o grupo de nós de inquilino único, configure as definições de partilha especificando uma das seguintes opções na secção Configurar definições de partilha:

    • Partilhe este grupo de nós com todos os projetos na organização.
    • Partilhe este grupo de nós com projetos selecionados na organização.
  10. Clique em Criar para criar o grupo de nós.

gcloud

Crie um grupo de nós a partir do modelo:

gcloud compute sole-tenancy node-groups create GROUP_NAME \
    --zone COMPUTE_ZONE \
    --node-template TEMPLATE_NAME --target-size TARGET_SIZE \
    --share-settings=SHARE_SETTING \
    --share-with=PROJECTS \
    --maintenance-policy=default

Substitua o seguinte:

  • GROUP_NAME: o nome que quer para o seu novo grupo de nós.
  • COMPUTE_ZONE: a zona onde este grupo de nós está localizado. Esta zona tem de estar na mesma região que o modelo de nó que está a usar.
  • TEMPLATE_NAME: o nome do modelo de nó que está a usar.
  • TARGET_SIZE: o número de nós que quer criar no grupo.
  • SHARE_SETTING: a definição de partilha para o grupo de nós. Defina como projects para partilhar com projetos específicos ou defina como organization para partilhar com toda a organização.
  • PROJECTS: uma lista de IDs de projetos ou números de projetos com os quais partilhar o grupo de nós. Só é necessário se definir SHARE_SETTING como projects.

Este comando define a política de manutenção do anfitrião predefinida. Outros valores podem causar interrupções.

Crie um node pool de inquilino único do GKE

Agora que criou um grupo de nós de inquilino único no Compute Engine, pode criar um conjunto de nós de inquilino único.

Se já tiver um cluster do GKE, pode adicionar-lhe um conjunto de nós de inquilino único. Caso contrário, crie um cluster com gcloud container clusters create.

Se estiver a usar um cluster regional ou se o seu conjunto de nós estiver disponível em várias zonas, tem de criar um grupo de nós com o mesmo nome em cada uma dessas zonas. Se não puder reutilizar o nome em cada zona, crie pools de nós separadas para cada zona.

Crie um node pool com um grupo de nós de inquilino único a partir do projeto do cluster

Para criar um node pool com um grupo de nós do projeto do cluster, transmita o nome do grupo de nós de arrendamento exclusivo. Se quiser usar um grupo de nós de inquilino único partilhado ou quiser usar etiquetas de afinidade de nós personalizadas que configurou quando criou o modelo de nó de inquilino único, consulte as instruções para criar um conjunto de nós com um nó de inquilino único partilhado através de um ficheiro de afinidade de nós.

Crie um novo conjunto de nós com um grupo de nós especificado:

Para node pools zonais:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1

Para node pools regionais:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1,COMPUTE_ZONE2

Substitua o seguinte:

  • NODE_POOL_NAME: um nome para o novo node pool.
  • GROUP_NAME: o nome do grupo de nós de arrendamento único existente que quer usar.
  • CLUSTER_NAME: o nome do cluster no qual está a criar o node pool.
  • CONTROL_PLANE_LOCATION: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
  • MACHINE_TYPE: o tipo de máquina do node pool.
  • COMPUTE_ZONE1, COMPUTE_ZONE2,[...]: as zonas para os grupos de nós de arrendamento exclusivo.

Para ver uma lista completa das flags opcionais que pode especificar, consulte a gcloud container node-pools create documentação.

Crie um node pool com um nó de inquilino único partilhado através de um ficheiro de afinidade de nós

Para criar um node pool com um grupo de nós de inquilino único partilhado, tem de usar etiquetas de afinidade de nós. Também pode usar a afinidade de nós para escolher grupos de nós do mesmo projeto.

Para fazer referência a etiquetas, siga as instruções para criar um conjunto de nós, substituindo a flag --node-group pela flag --sole-tenant-node-affinity-file. Transmita um ficheiro JSON com essas etiquetas. Por exemplo, veja o seguinte comando:

  gcloud container node-pools create sole-tenant-node-pool \
      --sole-tenant-node-affinity-file /path/to/affinity/file --cluster my-cluster \
      --location us-central1 --machine-type n1-standard-4  \
      --node-locations=us-central1-a,us-central1-b,us-central1-c

As secções seguintes descrevem exemplos de utilização de etiquetas de afinidade de nós com nós de inquilino único.

Especifique um nome de grupo de nós de um projeto

Para usar grupos de nós de inquilino único de um projeto específico e um nome de grupo de nós, especifique estes valores no ficheiro de afinidade de nós. Pode usar esta afinidade se estiver a criar um conjunto de nós de várias zonas em que os nomes dos grupos de nós de cada zona têm de corresponder. Para usar qualquer grupo de nós no projeto proprietário especificado, omita o bloco compute-googleapis.com/node-group-name inteiro do ficheiro JSON.

Veja o exemplo seguinte:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "compute.googleapis.com/node-group-name",
    "operator" : "IN",
    "values" : ["GROUP_NAME"]
  },
]

Especifique etiquetas personalizadas

Também pode usar a afinidade e a anti-afinidade de nós para criar um conjunto de nós com grupos de nós com etiquetas personalizadas. A cada grupo de nós são atribuídas automaticamente etiquetas de afinidade predefinidas. Pode consultar as etiquetas predefinidas, como nos exemplos anteriores, ou usar etiquetas personalizadas designadas quando criar o modelo de nó. Pode usar etiquetas personalizadas para isolar ou agrupar cargas de trabalho.

Veja o exemplo seguinte:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
  },
]

Limitações

Quando cria um node pool com nós de inquilino único, é responsável por gerir a capacidade subjacente dos grupos de nós de inquilino único. Considere como as seguintes funcionalidades interagem com grupos de nós de inquilino único:

Sobrededicação da CPU

O excesso de compromisso de CPU é uma funcionalidade opcional que lhe permite subscrever em excesso os recursos de CPU nos seus nós de inquilino único. O excesso de compromisso da CPU pode ser útil para cargas de trabalho que não estão limitadas pela CPU, o que lhe permite executar mais pods em menos nós e, potencialmente, reduzir os custos.

Para ativar o compromisso excessivo de CPUs, tem de especificar a flag --cpu-overcommit-type=enabled quando cria um modelo de nó de inquilino único. Quando cria um conjunto de nós, pode especificar o número mínimo de vCPUs que têm de estar disponíveis no nó de inquilino único através da flag --sole-tenant-min-node-cpus. A funcionalidade de compromisso excessivo de CPUs tem os mesmos limites descritos no artigo Comprometa CPUs em VMs de inquilino único. Esta funcionalidade é suportada na versão 1.33.1-gke.1545000 e posteriores do GKE.

O que se segue?