Criar um cluster
Nesta página, explicamos como criar um cluster e um pool de nós no GKE no Azure no Kubernetes versão 1.29.3-gke.600.
Antes de começar
Para concluir as etapas desta página, faça o seguinte:
Siga as etapas descritas em Configurar pré-requisitos.
Escolha se você executará o plano de controle em várias zonas ou em uma única zona.
Em seguida, selecione intervalos de roteamento entre domínios sem classe (CIDR, na sigla em inglês) para fornecer ao cluster.
Posicionamento por zona do plano de controle
Por padrão, o GKE no Azure coloca réplicas de plano de controle separadas na mesma sub-rede em três zonas na região selecionada. É possível escolher essas zonas e sub-redes.
Se você quiser usar a posição padrão da réplica do plano de controle, pule para Selecionar intervalos CIDR para seu cluster.
Planos de controle de cluster e gateway NAT do Azure
Cada réplica do plano de controle também requer conectividade com o serviço de gerenciamento hospedado pelo Google para operar em um estado normal.
Se você usar o gateway NAT do Azure para fornecer conectividade de saída, avalie como uma falha de zona afeta o plano de controle do cluster. Um endpoint do gateway NAT é isolado para uma única zona ou é regional/não zonal, e apresenta um único ponto de falha.
Se você quiser colocar réplicas do plano de controle em uma única zona, use uma única sub-rede e zona. Se você usar o gateway NAT para a conectividade de saída, verifique se o endpoint está posicionado na mesma zona.
Para colocar réplicas em duas ou três zonas, é possível transmitir uma lista de sub-redes e zonas ao criar um cluster. Quando você passa duas sub-redes e zonas, o GKE no Azure coloca duas réplicas na primeira zona fornecida. Quando você transmite três sub-redes e zonas, o GKE no Azure coloca réplicas em cada sub-rede. Para mais informações, consulte Colocar réplicas em uma sub-rede específica.
Para mais informações sobre como configurar sub-redes e zonas do Azure para alta disponibilidade, consulte Isolamento de zona com pilhas zonais na documentação do Azure.
Colocar réplicas em uma sub-rede específica
Esta seção é opcional.
Para controlar em quais zonas as réplicas do plano de controle serão colocadas, use a sinalização
--replica-placements
e transmita uma lista de IDs de sub-rede e zonas ao criar o
cluster. É possível usar até três sub-redes e zonas para colocar as
réplicas do plano de controle.
Para formatar a lista de sub-redes, execute as etapas a seguir.
Recupere os IDs das sub-redes do Azure com a ferramenta de linha de comando
az
:az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name SUBNET_NAME --query "id" -otsv
Substitua:
CLUSTER_RESOURCE_GROUP_NAME
: um nome de grupo de recursos atual em que você quer executar o clusterVNET_RESOURCE_GROUP_NAME
: o nome do grupo de recursos que contém sua VNetVNET_NAME
: seu nome de VNetSUBNET_NAME
: o nome da sub-rede
A saída é o ID da sub-rede. Os IDs das sub-redes do Azure são semelhantes a estes:
/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME
Repita esse comando para cada sub-rede em que você quer criar uma réplica de plano de controle. Copie os IDs de sub-rede em um editor de texto para a etapa a seguir.
Crie uma lista separada por vírgulas de IDs de sub-rede e zonas de disponibilidade do Azure, com dois pontos separando a sub-rede e a zona. Por exemplo, para criar réplicas do plano de controle em
subnet1
na zona 1,subnet2
na zona 2 esubnet3
na zona 3, use a seguinte string:/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet1:1,/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet2:2,/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet3:3
Copie essa string e use-a como o valor da sinalização
--replica-placements
ao criar um cluster.
Selecionar intervalos CIDR para o cluster
Ao criar um cluster no GKE no Azure, você precisa fornecer intervalos de endereços IPv4 para usar em pods e serviços.
Esses intervalos de IP são especificados usando a notação de roteamento entre domínios sem classe
(CIDR),
por exemplo, 100.64.0.0/16
.
Intervalos recomendados
Recomendamos os seguintes intervalos CIDR para serviços e pods:
- Serviços: 100.64.0.0/16
- Pods: 100.96.0.0/11
Esses intervalos são grandes o suficiente para que você possa expandir seu cluster sem problemas.
Veja mais detalhes nas seções a seguir.
Detalhes sobre a seleção de intervalos
O GKE no Azure usa uma rede de sobreposição para pods e serviços. Portanto, os intervalos de IP dessas redes não precisam ser roteáveis na VNet. Todos os intervalos de IP usados precisam ter disponibilidade garantida. Para mais informações, consulte Dataplane V2.
Os intervalos de IPs de pods e serviços podem se sobrepor à rede VNet, desde que os intervalos de IPs de sub-rede do pool de nós ou do plano de controle não sejam incluídos.
O intervalo de IP do pod e do serviço precisa estar em um dos seguintes intervalos de IP particulares:
10.0.0.0/8
,172.16.0.0/12
,192.168.0.0/16
— Endereços IP privados (RFC 1918)- Espaço de endereços compartilhado
100.64.0.0/10
RFC 6598 - Atribuições do protocolo IETF
192.0.0.0/24
RFC 6890 192.0.2.0/24
,198.51.100.0/24
,203.0.113.0/24
— Documentação (RFC 5737)- Retransmissão IPv6 para IPv4 (obsoleta)
192.88.99.0/24
RFC 7526 - Teste de comparativo de mercado
198.18.0.0/15
RFC 2544
Recomendamos intervalos de IP dentro de 100.64.0.0/10
(RFC 6598). Esse intervalo
é liberado para NAT de nível de operadora, que provavelmente não é usado na
VNet.
O exemplo a seguir é uma configuração válida, já que as redes de pods, serviços e nós não se sobrepõem (a VNet usa endereços IP privados RFC 1918, enquanto as redes de pods e serviços são sobrepostas em IPs privados RFC 6598).
- Rede VNet:
10.0.0.0/16
,172.16.1.0/24
,172.16.2.0/24
- Rede do pod:
100.65.0.0/16
- Rede de serviços:
100.66.0.0/16
Veja a seguir uma configuração válida, mesmo com as redes de pods e serviços sobrepostas pela rede VNet, já que não há sobreposição com as réplicas do plano de controle.
- Rede VNet:
10.0.0.0/16
- Rede do pod:
10.0.1.0/24
- Rede de serviços:
10.0.2.0/24
- Sub-redes da réplica do plano de controle:
10.0.3.0/24
,10.0.4.0/24
,10.0.5.0/24
A configuração a seguir é inválida porque o intervalo de IP do pod se sobrepõe à rede do plano de controle. Essa sobreposição pode impedir que as cargas de trabalho se comuniquem com a réplica do plano de controle na rede VNet:
- Rede VNet:
10.0.0.0/16
- Rede do pod:
10.0.1.0/24
- Rede de serviços:
10.1.0.0/24
- Sub-redes da réplica do plano de controle:
10.0.1.0/24
,10.0.2.0/24
,10.0.3.0/24
Detalhes sobre o intervalo de endereços do pod
O Kubernetes aloca endereços para objetos de pod do intervalo de endereços do pod. O intervalo do pod de um cluster é dividido em intervalos menores para cada nó. Quando um pod é programado em um nó específico, o Kubernetes atribui um endereço IP de pod do intervalo do nó.
Para calcular o tamanho do intervalo de endereços de pods, é preciso estimar o número de nós que você quer no cluster e o número de pods que você quer executar em cada nó.
A tabela a seguir fornece recomendações de tamanho para intervalos de CIDR de pod com base no número de nós e pods que você pretende executar.
Tabela de intervalos de endereços de pods
Intervalo de endereços do pod | Máximo de endereços de IP de pod | Máximo de nós | Máximo de pods |
---|---|---|---|
/24 Menor intervalo de endereços de pod possível |
256 endereços | 1 nó | 110 pods |
/23 | 512 endereços | 2 nós | 220 pods |
/22 | 1.024 endereços | 4 nós | 440 pods |
/21 | 2.048 endereços | 8 nós | 880 pods |
/20 | 4.096 endereços | 16 nós | 1.760 pods |
/19 | 8.192 endereços | 32 nós | 3.520 pods |
/18 | 16.384 endereços | 64 nós | 7.040 pods |
/17 | 32.768 endereços | 128 nós | 14.080 pods |
/16 | 65.536 endereços | 256 nós | 28.160 pods |
/15 | 131.072 endereços | 512 nós | 56.320 pods |
/14 | 262.144 endereços | 1.024 nós | 112.640 pods |
Detalhes sobre o intervalo de endereços do serviço
O Kubernetes aloca endereços IP virtuais para objetos de serviço, por exemplo, desse tipo de balanceador de carga.
Para calcular o tamanho do intervalo de endereços de Serviço, faça uma estimativa do número de serviços que você quer no cluster.
A tabela a seguir fornece recomendações de tamanho para intervalos CIDR de serviço com base no número de serviços que você pretende executar.
Tabela de intervalos de endereços de serviço
Intervalo de endereços do serviço | Número máximo de Serviços |
---|---|
/27 Menor intervalo de endereços de Serviço possível |
32 Serviços |
/26 | 64 Serviços |
/25 | 128 Serviços |
/24 | 256 Serviços |
/23 | 512 Serviços |
/22 | 1.024 Serviços |
/21 | 2.048 Serviços |
/20 | 4.096 Serviços |
/19 | 8.192 Serviços |
/18 | 16.384 Serviços |
/17 | 32.768 Serviços |
/16 O maior intervalo de endereços de Serviço possível |
65.536 Serviços |
Autenticar no Azure
O GKE no Azure oferece dois métodos de autenticação no Azure: federação de identidade da carga de trabalho e criação de um certificado do cliente. A autenticação da federação de identidade da carga de trabalho é o método recomendado, porque é mais simples e seguro.
Federação de identidade da carga de trabalho
A federação de identificação da carga de trabalho permite que o GKE no Azure se autentique no Azure usando uma conta de serviço do Google para gerenciar recursos posteriormente no aplicativo Azure AD. Em comparação com o AzureClient, não é necessário gerenciar certificados e fazer upload para o Azure AD manualmente.
Para configurar uma credencial de identidade federada no aplicativo Azure AD, execute os comandos a seguir. É possível adicionar até 20 credenciais a cada aplicativo do Azure AD.
Salve o ID do aplicativo Azure em variáveis de ambiente:
APPLICATION_ID=$(az ad app list --all \ --query "[?displayName=='APPLICATION_NAME'].appId" --output tsv) PROJECT_ID="$(gcloud config get-value project)" PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" \ --format "value(projectNumber)")
APPLICATION_NAME
: o nome do aplicativo do Azure AD que você usou ao Criar um aplicativo do Azure Active Directory.
Crie um arquivo JSON chamado
credential.json
.{ "name": "CREDENTIAL_NAME", "issuer": "https://accounts.google.com", "subject": "service-PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com", "audiences": ["api://AzureADTokenExchange"], "description": "Allow GKE on Azure to authenticate to the Azure AD application using a Google service account." }
CREDENTIAL_NAME
: o nome da credencial.PROJECT_NUMBER
: o número do projeto do Google Cloud que hospeda o cluster.
Crie uma credencial de identidade federada no aplicativo Azure AD:
az ad app federated-credential create --id "${APPLICATION_ID}" --parameters credential.json
Para mais detalhes, consulte a documentação do Azure Federação de identidade da carga de trabalho do Azure AD com o Google Cloud.
Também é possível provisionar a credencial de identidade federada do Azure usando o Terraform. Para mais detalhes, consulte azuread_application_federated_identity_credential.
Depois de configurar as credenciais, crie ou selecione um par de chaves SSH para o cluster.
Crie um par de chaves SSH.
Ao criar um cluster, você precisa fornecer um par de chaves SSH. Se você tiver um par de chaves para usar, pule esta etapa.
Para criar um novo par de chaves, use a ferramenta de linha de comando
ssh-keygen
:ssh-keygen -m PEM -t rsa -b 4096 -f KEY_PATH
Substitua
KEY_PATH
pelo caminho para a nova chave privada.Armazene a chave em uma variável de ambiente:
SSH_PUBLIC_KEY=$(cat KEY_PATH.pub)
Por exemplo, para criar um novo par de chaves em
~/.ssh/anthos-multicloud-key.pub
e armazenar a chave pública em uma variável de ambiente, execute os seguintes comandos:ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/anthos-multicloud-key SSH_PUBLIC_KEY=$(cat ~/.ssh/anthos-multicloud-key.pub)
Depois de salvar a chave pública em uma variável de ambiente, você estará pronto para criar um cluster.
Selecionar o projeto host de frota
Fleets são um conceito do Google Cloud para organizar clusters em grupos maiores. Com as frotas, é possível gerenciar vários clusters em várias nuvens e aplicar políticas consistentes nelas. A API GKE Multi-Cloud registra automaticamente seus clusters com uma frota quando o cluster é criado.
Ao criar um cluster, especifique um projeto host da frota em que o cluster será gerenciado. Como o GKE no Azure usa o nome do cluster como o nome da associação da frota, é preciso garantir que os nomes dos clusters sejam únicos em toda a frota.
Registro entre projetos
Se você quiser usar um projeto de host do Fleet diferente do projeto do Google Cloud em que o cluster está localizado, aplique uma vinculação de política de IAM adicional à conta de serviço do agente de serviços de várias nuvens. Isso permite que a conta de serviço gerencie as frotas com o projeto host da frota.
Para adicionar o agente de serviço ao projeto, execute este comando:
gcloud beta services identity create --service=gkemulticloud.googleapis.com \ --project=CLUSTER_PROJECT_NUMBER
Substitua
CLUSTER_PROJECT_NUMBER
pelo número do projeto do Google Cloud.Atribua essa vinculação com o seguinte comando:
gcloud projects add-iam-policy-binding FLEET_PROJECT_ID \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com" \ --role="roles/gkemulticloud.serviceAgent"
Substitua:
FLEET_PROJECT_ID
: o projeto do Google Cloud do seu projeto host da frotaCLUSTER_PROJECT_NUMBER
: o número do projeto do Google Cloud.
O nome da conta do agente de serviços em várias nuvens tem o seguinte formato: service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com
.
É possível encontrar as contas de serviço na página Conta de serviço do console do Google Cloud. Para mais informações sobre como encontrar o número de projeto, consulte Como identificar projetos.
Crie um cluster
Para criar um cluster, execute os seguintes comandos:
Salve os IDs de grupo de recursos, VNet e sub-rede do Azure em variáveis de ambiente:
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv) TENANT_ID=$(az account list \ --query "[?id=='${SUBSCRIPTION_ID}'].{tenantId:tenantId}" --output tsv) CLUSTER_RG_ID=$(az group show --resource-group=CLUSTER_RESOURCE_GROUP_NAME \ --query "id" -otsv) VNET_ID=$(az network vnet show --resource-group=VNET_RESOURCE_GROUP_NAME \ --name=VNET_NAME --query "id" -otsv) SUBNET_ID=$(az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name default --query "id" -otsv)
Substitua:
CLUSTER_RESOURCE_GROUP_NAME
: um nome de grupo de recursos atual em que você quer executar o clusterVNET_RESOURCE_GROUP_NAME
: o nome do grupo de recursos que contém sua VNetVNET_NAME
: o nome da sua VNet
Crie um cluster com a Google Cloud CLI:
Federação de identidade da carga de trabalho
gcloud container azure clusters create CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --fleet-project FLEET_PROJECT \ --azure-tenant-id "${TENANT_ID}" \ --azure-application-id "${APPLICATION_ID}" \ --azure-region AZURE_REGION \ --pod-address-cidr-blocks POD_CIDR \ --service-address-cidr-blocks SERVICE_CIDR \ --vm-size VM_SIZE \ --cluster-version 1.29.3-gke.600 \ --ssh-public-key "$SSH_PUBLIC_KEY" \ --resource-group-id "$CLUSTER_RG_ID" \ --vnet-id "$VNET_ID" \ --subnet-id "$SUBNET_ID" # Optional, see following note \ --tags "control-plane=CLUSTER_NAME" \ --admin-users ADMIN_USERS_LIST
Cliente do Azure
gcloud container azure clusters create CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --fleet-project FLEET_PROJECT \ --client CLIENT_NAME \ --azure-region AZURE_REGION \ --pod-address-cidr-blocks POD_CIDR \ --service-address-cidr-blocks SERVICE_CIDR \ --vm-size VM_SIZE \ --cluster-version 1.29.3-gke.600 \ --ssh-public-key "$SSH_PUBLIC_KEY" \ --resource-group-id "$CLUSTER_RG_ID" \ --vnet-id "$VNET_ID" \ --subnet-id "$SUBNET_ID" # Optional, see following note \ --tags "control-plane=CLUSTER_NAME" \ --admin-users ADMIN_USERS_LIST
Substitua:
CLUSTER_NAME
: o nome do cluster.GOOGLE_CLOUD_LOCATION
: o local do Google Cloud que gerencia seu clusterFLEET_PROJECT
pelo projeto host da fleet em que o cluster será registrado. Se você quiser gerenciar esse cluster em outro projeto do Google Cloud, consulte Registro entre projetos.AZURE_REGION
: uma região compatível do Azure, associada à região do Google Cloud.POD_CIDR
: o intervalo de endereços de pods do cluster, por exemplo,10.0.1.0/18
SERVICE_CIDR
: o intervalo de endereços de serviço do clusterVM_SIZE
: um tamanho de VM do Azure compatívelADMIN_USERS_LIST
(opcional): uma lista separada por vírgulas de endereços de e-mail dos usuários para conceder privilégios administrativos a, por exemplo, "kai@example.com,hao@example.com,kalani@example.com". O padrão é o usuário que cria o cluster.CLIENT_NAME
: nome do seu AzureClient.
Verifique o status do cluster:
gcloud container azure clusters describe CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
Substitua:
CLUSTER_NAME
GOOGLE_CLOUD_LOCATION
A saída inclui informações sobre o status e a configuração do cluster.
Autorizar o Cloud Logging / Cloud Monitoring
Para que o GKE no Azure crie e faça upload de registros e métricas do sistema para o Google Cloud, ele precisa ser autorizado.
Para autorizar a Identidade da carga de trabalho do Kubernetes gke-system/gke-telemetry-agent
a gravar registros no Google Cloud Logging e métricas no Google Cloud Monitoring,
execute este comando:
gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
--member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter
Substitua GOOGLE_PROJECT_ID
pelo ID do projeto do Google Cloud do cluster.
Essa vinculação do IAM concede acesso a todos os clusters no projeto do Google Cloud para fazer upload de registros e métricas. Você só precisa executá-lo após criar o primeiro cluster para o projeto.
A adição dessa vinculação do IAM falhará a menos que pelo menos um cluster tenha sido
criado no seu projeto do Google Cloud. Isso ocorre porque o pool de identidades de cargas de trabalho
a que ele se refere (GOOGLE_PROJECT_ID.svc.id.goog
) não é
provisionado até a criação do cluster.
Criar um pool de nós
Antes de criar um pool de nós, você precisa do seguinte:
- Permissões para usar a ferramenta de linha de comando
az
para recuperar um ID de sub-rede do Azure. - Acesso à chave pública SSH do cluster de usuário.
Para criar um pool de nós, execute os comandos a seguir:
Salve o ID da sub-rede VNet do Azure e a chave pública SSH nas variáveis de ambiente:
SUBNET_ID=$(az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name default --query "id" -otsv) SSH_PUBLIC_KEY=$(cat KEY_PATH.pub)
Substitua:
VNET_RESOURCE_GROUP_NAME
: o nome do grupo de recursos em que está a VNetVNET_NAME
: o nome da sua VNetKEY_PATH
: o caminho para o par de chaves
Crie um pool de nós com a Google Cloud CLI:
gcloud container azure node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --node-version 1.29.3-gke.600 \ --vm-size VM_SIZE \ --max-pods-per-node 110 \ --min-nodes MIN_NODES \ --max-nodes MAX_NODES \ --ssh-public-key "${SSH_PUBLIC_KEY}" \ --subnet-id "${SUBNET_ID}"
Substitua:
NODE_POOL_NAME
: um nome exclusivo para o pool de nós, por exemplo,node-pool-1
CLUSTER_NAME
: o nome do cluster do GKE no AzureGOOGLE_CLOUD_LOCATION
: o local do Google Cloud que gerencia seu clusterVM_SIZE
: um tamanho de VM do Azure compatívelMIN_NODES
: o número mínimo de nós no pool de nós. Para mais informações, consulte Escalonador automático de cluster.MAX_NODES
: o número máximo de nós no pool.
Verifique o status do seu pool de nós:
gcloud container azure node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION
Substitua:
NODE_POOL_NAME
: um nome exclusivo para o pool de nós, por exemplo,node-pool-1
CLUSTER_NAME
: o nome do cluster do GKE no AzureGOOGLE_CLOUD_LOCATION
: o local do Google Cloud que gerencia seu cluster
A saída inclui o status do pool de nós, incluindo se é
PROVISIONING
ouRUNNING
.
A seguir
- Configure o acesso do cluster para o kubectl.
- Crie um pool de nós.
- Use o guia de início rápido para iniciar sua primeira carga de trabalho.
- Leia a documentação de referência para
gcloud container clusters create
. - Ocorreu um problema ao criar o cluster? Consulte Solução de problemas para mais informações.