Crie um cluster

Esta página descreve como criar um cluster do GKE na AWS. Também pode criar uma VPC e um cluster com o Terraform.

Esta página destina-se a administradores, arquitetos e operadores que querem configurar, monitorizar e gerir a infraestrutura na nuvem. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE. Google Cloud

Antes de começar

Antes de criar um cluster, tem de concluir os pré-requisitos. Em particular, tem de fornecer os seguintes recursos:

  • Uma VPC da AWS onde o cluster vai ser executado.
  • Até três sub-redes da AWS para as três réplicas do plano de controlo. Cada um tem de estar numa zona de disponibilidade da AWS diferente.
  • A função do IAM da AWS que o GKE na AWS assume quando gere o seu cluster. Isto requer um conjunto específico de autorizações da IAM.
  • Chaves CMK simétricas do KMS para encriptação em repouso de dados do cluster (etcd) e configuração.
  • O perfil da instância do AWS IAM para cada réplica do plano de controlo. Isto requer um conjunto específico de autorizações de IAM.
  • Um par de chaves SSH do EC2 (opcional) se precisar de acesso SSH às instâncias do EC2 que executam cada réplica do plano de controlo.

É da sua responsabilidade criar e gerir estes recursos, que podem ser partilhados entre todos os seus clusters do GKE. Todos os outros recursos da AWS subjacentes ao âmbito do cluster são geridos pelo GKE na AWS.

Selecione intervalos CIDR para o seu cluster

Quando cria um cluster no GKE na AWS, tem de fornecer intervalos de endereços IPv4 para usar em pods e serviços.

Estes intervalos de IP são especificados através da notação Classless Inter-Domain Routing (CIDR), por exemplo, 100.64.0.0/16.

Recomendamos os seguintes intervalos CIDR para serviços e pods:

  • Serviços: 100.64.0.0/16
  • Pods: 100.96.0.0/11

Estes intervalos são suficientemente grandes para que possa aumentar o seu cluster sem problemas.

As secções seguintes fornecem mais detalhes.

Detalhes sobre a seleção de intervalos

O GKE on AWS usa uma rede de sobreposição para pods e serviços, pelo que os intervalos de IP destas redes não têm de ser encaminháveis na VPC. Todos os intervalos de IP que usar têm de ter disponibilidade garantida. Para mais informações, consulte o artigo Dataplane V2.

  • Os intervalos de IP do pod e do serviço podem sobrepor-se à rede VPC, desde que nenhum deles inclua os intervalos de IP do plano de controlo ou da sub-rede do conjunto de nós.

  • O intervalo de IPs do pod e do serviço tem de estar dentro de um dos seguintes intervalos de IPs privados:

    • 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16: endereços IP privados (RFC 1918)
    • 100.64.0.0/10 — Espaço de endereço partilhado (RFC 6598)
    • 192.0.0.0/24 — Atribuições de protocolos da IETF (RFC 6890)
    • 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24: documentação (RFC 5737)
    • 192.88.99.0/24 — Relé IPv6 para IPv4 (descontinuado) (RFC 7526)
    • 198.18.0.0/15 — Testes de referência (RFC 2544)

Recomendamos intervalos de IPs dentro de 100.64.0.0/10 (RFC 6598). Este intervalo está reservado para NAT de nível de operadora, que provavelmente não é usado na sua VPC.

Por exemplo, a seguinte é uma configuração válida em que as redes de nós, serviços e pods não se sobrepõem (a VPC está a usar endereços IP privados RFC 1918, enquanto as redes de serviços e pods estão sobrepostas em IPs privados RFC 6598).

  • Rede da VPC: 10.0.0.0/16, 172.16.1.0/24, 172.16.2.0/24
  • Rede de pods: 100.65.0.0/16
  • Rede de serviços: 100.66.0.0/16

A seguinte também é uma configuração válida, apesar de as redes de pods e serviços se sobreporem à rede da VPC, uma vez que não existe sobreposição com as réplicas do plano de controlo.

  • Rede da VPC: 10.0.0.0/16
  • Rede de pods: 10.0.1.0/24
  • Rede de serviços: 10.0.2.0/24
  • Sub-redes da réplica do plano de controlo: 10.0.3.0/24, 10.0.4.0/2410.0.5.0/24

A seguinte configuração é inválida porque o intervalo de IPs do pod sobrepõe-se à rede do plano de controlo. Esta sobreposição pode impedir que as cargas de trabalho comuniquem com a réplica do plano de controlo na rede VPC:

  • Rede da VPC: 10.0.0.0/16
  • Rede de pods: 10.0.1.0/24
  • Rede de serviços: 10.1.0.0/24
  • Sub-redes da réplica do plano de controlo: 10.0.1.0/24, 10.0.2.0/2410.0.3.0/24

Detalhes acerca do intervalo de endereços do pod

O Kubernetes atribui endereços a objetos Pod a partir do intervalo de endereços do Pod. O intervalo de pods de um cluster é dividido em intervalos mais pequenos para cada nó. Quando um pod é agendado num nó específico, o Kubernetes atribui um endereço IP do pod a partir do intervalo do nó.

Para calcular o tamanho do intervalo de endereços do Pod, tem de estimar o número de nós que quer no cluster e o número de Pods que quer executar em cada nó.

A tabela seguinte fornece recomendações de tamanho para intervalos CIDR de pods com base no número de nós e pods que pretende executar.

Tabela de intervalos de endereços de pods

Intervalo de endereços do pod Máximo de endereços IP do agrupamento Máximo de nós Agrupamentos máximos
/24
Intervalo de endereços de pod mais pequeno possível
256 endereços 1 nó 110 pods
/23 512 endereços 2 nós 220 agrupamentos
/22 1024 endereços 4 nós 440 Pods
/21 2048 endereços 8 nós 880 Pods
/20 4096 endereços 16 nós 1760 agrupamentos
/19 8192 endereços 32 nós 3520 agrupamentos
/18 16 384 endereços 64 nós 7040 agrupamentos
/17 32 768 endereços 128 nós 14 080 agrupamentos
/16 65 536 endereços 256 nós 28 160 agrupamentos
/15 131 072 endereços 512 nós 56 320 agrupamentos
/14 262 144 endereços 1024 nós 112 640 agrupamentos

Detalhes sobre o intervalo de moradas de serviço

O Kubernetes atribui endereços IP virtuais para objetos de serviço, por exemplo, equilibradores de carga a partir deste intervalo de endereços.

Para calcular a dimensão do intervalo de endereços de serviço, tem de estimar o número de serviços que quer no cluster.

A tabela seguinte fornece recomendações de tamanho para intervalos CIDR de serviços com base no número de serviços que pretende executar.

Tabela de intervalos de moradas de serviço

Intervalo de moradas de serviço Número máximo de serviços
/27
O intervalo de endereços de serviço mais pequeno possível
32 serviços
/26 64 serviços
/25 128 serviços
/24 256 serviços
/23 512 serviços
/22 1024 serviços
/21 2048 serviços
/20 4096 serviços
/19 8192 serviços
/18 16 384 serviços
/17 32 768 serviços
/16
Maior intervalo de moradas de serviço possível
65 536 serviços

Selecione o projeto de anfitrião do Fleet

As frotas são um Google Cloud conceito para organizar clusters em grupos maiores. Com as frotas, pode gerir vários clusters em várias nuvens e aplicar políticas consistentes em todos eles. A API GKE Multi-Cloud regista automaticamente os seus clusters numa frota quando o cluster é criado.

Quando cria um cluster, especifica um projeto de anfitrião da frota a partir do qual o cluster vai ser gerido. Uma vez que o GKE na AWS usa o nome do cluster como o nome de membro da Fleet, tem de garantir que os nomes dos clusters são exclusivos na sua Fleet.

Registo em vários projetos

Se quiser usar um projeto anfitrião da frota diferente do Google Cloud projeto onde o cluster está localizado, tem de aplicar uma associação de política do IAM adicional à conta de serviço do agente de serviço multinuvem. Isto permite que a conta de serviço faça a gestão de frotas com o projeto anfitrião da frota.

  1. Para adicionar o agente do serviço ao seu 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 seu Google Cloud projeto.

  2. Atribua esta associaçã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 o seguinte:

    • FLEET_PROJECT_ID: o projeto de alojamento do Fleet Google Cloud
    • CLUSTER_PROJECT_NUMBER: o número do seu Google Cloud projeto

O nome da conta do agente do serviço multinuvem tem o seguinte formato: service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com.

Pode encontrar as suas contas de serviço na página Google Cloud consola Conta de serviço. Para mais informações sobre como encontrar o número do projeto, consulte o artigo Identificar projetos.

Crie o seu cluster

Use o seguinte comando para criar o cluster no GKE na AWS. Para mais informações sobre este comando, incluindo os respetivos parâmetros opcionais, consulte a página de referência gcloud container aws.

gcloud container aws clusters create CLUSTER_NAME \
  --aws-region AWS_REGION \
  --location GOOGLE_CLOUD_LOCATION \
  --cluster-version CLUSTER_VERSION \
  --fleet-project FLEET_PROJECT \
  --vpc-id VPC_ID \
  --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
  --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
  --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
  --role-arn API_ROLE_ARN \
  --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
  --admin-users ADMIN_USERS_LIST \
  --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
  --iam-instance-profile CONTROL_PLANE_PROFILE \
  --tags "Name=CLUSTER_NAME-cp"

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster escolhido
  • AWS_REGION: a região da AWS na qual criar o cluster
  • GOOGLE_CLOUD_LOCATION: o nome da Google Cloud localização a partir da qual este cluster vai ser gerido, conforme definido nas Google Cloud regiões de gestão.
  • CLUSTER_VERSION: a versão do Kubernetes a instalar no seu cluster
  • FLEET_PROJECT: o projeto anfitrião do Fleet onde o cluster vai ser registado. Se quiser gerir este cluster a partir de outro Google Cloud projeto, consulte o artigo Registo entre projetos.
  • VPC_ID: o ID da VPC da AWS para este cluster
  • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3: os IDs das sub-redes das três instâncias do plano de controlo do cluster
  • POD_ADDRESS_CIDR_BLOCKS: o intervalo de endereços CIDR para os pods do seu cluster
  • SERVICE_ADDRESS_CIDR_BLOCKS: o intervalo de endereços CIDR para os serviços do cluster
  • API_ROLE_ARN: o ARN da função da API GKE Multi-Cloud
  • CONTROL_PLANE_PROFILE: o perfil da instância do IAM associada ao cluster. Para ver detalhes sobre como atualizar um perfil de instância do IAM, consulte o artigo Atualize o perfil de instância do AWS IAM.
  • DB_KMS_KEY_ARN: o nome de recurso da Amazon (ARN) da chave do AWS KMS para encriptar os segredos do cluster
  • CONFIG_KMS_KEY_ARN: o Amazon Resource Name (ARN) da chave do AWS KMS para encriptar os dados do utilizador
  • ADMIN_USERS_LIST (opcional): uma lista separada por vírgulas dos endereços de email dos utilizadores aos quais conceder privilégios administrativos. Por exemplo, "kai@example.com,hao@example.com,kalani@example.com". A predefinição é o utilizador que cria o cluster

Se estiver presente, o parâmetro --tags aplica a etiqueta da AWS especificada a todos os recursos da AWS subjacentes geridos pelo GKE na AWS. Este exemplo etiqueta os nós do plano de controlo com o nome do cluster ao qual pertencem.

Não pode executar o SSH nestes nós do plano de controlo, a menos que especifique um par de chaves SSH com a flag --ssh-ec2-key-pair.

Para ver todas as versões do Kubernetes suportadas numa determinada Google Cloud localização, execute o seguinte comando.

gcloud container aws get-server-config --location GCP_LOCATION

Autorize o Cloud Logging / Cloud Monitoring

Para que o GKE on AWS crie e carregue registos do sistema e métricas para o Google Cloud, tem de ser autorizado.

Para autorizar a identidade da carga de trabalho do Kubernetes gke-system/gke-telemetry-agent a escrever registos 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 cluster.

Esta associação de IAM concede acesso a todos os clusters no projeto Google Cloud project para carregar registos e métricas. Só tem de o executar depois de criar o primeiro cluster para o projeto.

A adição desta associação de IAM falha, a menos que tenha sido criado, pelo menos, um cluster no seu projeto Google Cloud . Isto deve-se ao facto de o Workload Identity Pool a que se refere (GOOGLE_PROJECT_ID.svc.id.goog) não ser aprovisionado até à criação do cluster.

O que se segue?