Criar um cluster com hosts dedicados

Nesta página, mostramos como criar um cluster e um pool de nós que usa instâncias dedicadas ou hosts dedicados da AWS. Hosts e instâncias dedicados são reservados para seu uso sozinho e não são compartilhados com outros clientes da AWS. A configuração de hosts e instâncias dedicados é conhecida como locação.

Antes de começar

Para usar instâncias ou hosts dedicados com o GKE na AWS, é preciso criar um novo cluster versão 1.22.8-gke.200 ou posterior. Não é possível fazer upgrade de um cluster e adicionar hosts dedicados.

Requisitos de cluster

Antes de criar um cluster, conclua os pré-requisitos. Especificamente, é necessário fornecer os seguintes recursos:

  • Uma VPC da AWS em que o cluster será executado.
  • Até três sub-redes da AWS para as três réplicas do plano de controle. Cada um precisa estar em uma zona de disponibilidade diferente da AWS.
  • O papel do IAM da AWS que o GKE na AWS assume ao gerenciar o cluster. Isso requer um conjunto específico de permissões do IAM.
  • Chaves CMK simétricas do KMS para criptografia e configuração de dados do cluster (etcd) em repouso.
  • O perfil da instância do IAM da AWS para cada réplica do plano de controle. Isso requer um conjunto específico de permissões do IAM.
  • Um par de chaves SSH do EC2 (opcional) se você precisar de acesso SSH às instâncias do EC2 que executam cada réplica do plano de controle.

É sua responsabilidade criar e gerenciar esses recursos, que podem ser compartilhados entre todos os clusters do Anthos. Todos os outros recursos da AWS com escopo de cluster são gerenciados pelo GKE na AWS.

Essas instruções usam a API GKE Multi-Cloud para criar um cluster e um pool de nós. Para usar a API GKE Multi-Cloud, é preciso conhecer as APIs do Google Cloud.

Hosts e instâncias dedicados

Ao criar um cluster ou pool de nós, você escolhe uma das seguintes opções:

  • DEFAULT: inicia instâncias com a locação padrão da sua VPC.
  • DEDICATED: inicia instâncias em uma instância dedicada
  • HOST: inicia instâncias em um host dedicado

Antes de criar um cluster ou pool de nós, decida qual é a opção certa para você.

Para mais informações, consulte Como definir a locação de instâncias com uma configuração de inicialização, instâncias dedicadas e hosts dedicados na documentação da AWS.

Como misturar as configurações de locação em um cluster

É possível definir as configurações de locatário individualmente para cada plano de controle e pool de nós. Por exemplo, é possível criar um cluster com o plano de controle em hosts compartilhados, um pool de nós em hosts dedicados e outro pool de nós em hosts compartilhados.

Alocar hosts dedicados

Antes de criar um cluster com hosts dedicados, você precisa alocar hosts para todas as instâncias necessárias. Os hosts precisam ter os seguintes atributos:

  • Use as mesmas famílias de instâncias de que seus recursos de cluster precisam.
  • Alocado nas mesmas zonas em que você planejou criar clusters.
  • Ativar posicionamento automático
  • Você tem cota suficiente para iniciar hosts dedicados

Para mais informações sobre a alocação de hosts dedicados, consulte Primeiros passos com hosts dedicados.

Limitações

Nesta seção, listamos as limitações da compatibilidade com hosts dedicados no GKE na AWS.

Pools de nós

Não é possível atualizar a configuração de locação de um pool de nós. Para mover cargas de trabalho para instâncias com outra configuração de locação, crie um novo pool de nós com a locação desejada e exclua o atual.

Famílias de instâncias compatíveis

O GKE na AWS é compatível com hosts dedicados das famílias de instâncias a seguir.

  • t3
  • m5
  • m5d
  • c5
  • c5d
  • r5
  • r5d
  • i3en

Outras famílias de instâncias não são compatíveis.

Tipos de nós

Somente pools de nós do Linux são compatíveis.

Criar um cluster

Crie um cluster compatível com hosts dedicados com o método Method: projects.locations.awsClusters.create com a API GKE Multi-Cloud. Para criar um cluster, siga estas etapas:

gcloud

O exemplo a seguir cria um cluster com hosts dedicados.

Antes de usar os dados do comando abaixo, faça estas substituições:

    • CLUSTER_NAME: o nome do cluster escolhido
    • GOOGLE_CLOUD_LOCATION: a região compatível com o Google Cloud que gerencia seu cluster, por exemplo, us-west1
    • AWS_REGION: a região da AWS em que o cluster será criado
    • API_ROLE_ARN: o ARN do papel da API GKE Multi-Cloud
    • CONFIG_KMS_KEY_ARN: o Nome de Recursos da Amazon (ARN, na sigla em inglês) da chave de AWS KMS para criptografar dados do usuário
    • DB_KMS_KEY_ARN: o nome de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os secrets do cluster
    • CONTROL_PLANE_PROFILE: o perfil da instância do IAM associada ao cluster
    • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3 pelos IDs da sub-rede das três instâncias do plano de controle do cluster;
    • TENANCY_TYPE: a configuração da locação do plano de controle. Pode ser DEFAULT, DEDICATED ou HOST.
    • CLUSTER_VERSION: uma versão de cluster compatível
    • FLEET_PROJECT: o projeto host da frota em que o cluster será registrado. Se você quiser gerenciar o cluster de outro projeto, consulte Registro de vários projetos
    • POD_ADDRESS_CIDR_BLOCKS: o intervalo de endereços CIDR dos pods do cluster.
    • SERVICE_ADDRESS_CIDR_BLOCKS o intervalo de endereços CIDR dos serviços do cluster.
    • VPC_ID: o ID de VPC da AWS para este cluster

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

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

Windows (PowerShell)

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

Windows (cmd.exe)

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

REST

O exemplo a seguir cria um cluster com hosts dedicados.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • ENDPOINT: seu endpoint de serviço do Google Cloud
  • PROJECT_ID: seu projeto do Google Cloud.
  • USERNAME: usuário que pode executar operações como administrador do cluster
    • CLUSTER_NAME: o nome do cluster escolhido
    • GOOGLE_CLOUD_LOCATION: a região compatível com o Google Cloud que gerencia seu cluster, por exemplo, us-west1
    • AWS_REGION: a região da AWS em que o cluster será criado
    • API_ROLE_ARN: o ARN do papel da API GKE Multi-Cloud
    • CONFIG_KMS_KEY_ARN: o Nome de Recursos da Amazon (ARN, na sigla em inglês) da chave de AWS KMS para criptografar dados do usuário
    • DB_KMS_KEY_ARN: o nome de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os secrets do cluster
    • CONTROL_PLANE_PROFILE: o perfil da instância do IAM associada ao cluster
    • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3 pelos IDs da sub-rede das três instâncias do plano de controle do cluster;
    • TENANCY_TYPE: a configuração da locação do plano de controle. Pode ser DEFAULT, DEDICATED ou HOST.
    • CLUSTER_VERSION: uma versão de cluster compatível
    • FLEET_PROJECT: o projeto host da frota em que o cluster será registrado. Se você quiser gerenciar o cluster de outro projeto, consulte Registro de vários projetos
    • POD_ADDRESS_CIDR_BLOCKS: o intervalo de endereços CIDR dos pods do cluster.
    • SERVICE_ADDRESS_CIDR_BLOCKS o intervalo de endereços CIDR dos serviços do cluster.
    • VPC_ID: o ID de VPC da AWS para este cluster

Método HTTP e URL:

POST ENDPOINT/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters

Corpo JSON da solicitação:

{
    "name": "CLUSTER_NAME",
    "authorization": {
        "adminUsers": [
            {
                "username": "USERNAME"
            }
        ]
    },
    "awsRegion": "AWS_REGION",
    "controlPlane": {
        "awsServicesAuthentication": {
            "roleArn": "API_ROLE_ARN"
        },
        "configEncryption": {
            "kmsKeyArn": "CONFIG_KMS_KEY_ARN"
        },
        "databaseEncryption": {
            "kmsKeyArn": "DB_KMS_KEY_ARN"
        },
        "iamInstanceProfile": "CONTROL_PLANE_PROFILE",
        "mainVolume": {},
        "rootVolume": {},
        "sshConfig": {},
        "subnetIds": [
           "CONTROL_PLANE_SUBNET_1",
           "CONTROL_PLANE_SUBNET_2",
           "CONTROL_PLANE_SUBNET_3"
        ],
        "tags": {
            "google:gkemulticloud:cluster": "CLUSTER_NAME"
        },
        "instancePlacement": {
          "tenancy": "TENANCY_TYPE"
        },
        "version": "CLUSTER_VERSION"
    },
    "fleet": {
        "project": "FLEET_PROJECT"
    },
    "networking": {
        "podAddressCidrBlocks": [
            "POD_ADDRESS_CIDR_BLOCKS"
        ],
        "serviceAddressCidrBlocks": [
            "SERVICE_ADDRESS_CIDR_BLOCKS"
        ],
        "vpcId": "VPC_ID"
    }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Para ver mais opções, consulte a documentação de referência Method: projects.locations.awsClusters.create.

Crie um pool de nós.

gcloud

O exemplo a seguir cria um pool de nós com hosts dedicados. Quando você cria um pool de nós, todas as instâncias dentro do pool têm o mesmo tipo de instância e configuração de locação.

Antes de usar os dados do comando abaixo, faça estas substituições:

    • GOOGLE_CLOUD_LOCATION: a região compatível com o Google Cloud
    • CLUSTER_NAME: o nome do cluster.
    • NODE_POOL_NAME: o nome do pool de nós que gerencia seu cluster, por exemplo, us-west1
    • MIN_NODES: o número mínimo de nós que o pool pode conter.
    • MAX_NODES: o número máximo de nós que o pool pode conter.
    • CONFIG_KMS_KEY_ARN: o nome de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os dados do usuário.
    • NODEPOOL_PROFILE: o perfil de instância do IAM para VMs de pool de nós.
    • ROOT_VOLUME_SIZE: o tamanho desejado para o volume raiz de cada nó, em GB.
    • TENANCY_TYPE: a configuração da locação do plano de controle. Pode ser DEFAULT, DEDICATED ou HOST.
    • INSTANCE_TYPE: o tipo de instância de máquina da AWS desejado para este pool de nós
    • NODEPOOL_SUBNET: o ID da sub-rede em que o pool de nós será executado. Se essa sub-rede estiver fora do bloco CIDR primário de VPC, algumas etapas adicionais serão necessárias. Para mais informações, consulte grupos de segurança.
    • CLUSTER_VERSION: uma versão de cluster compatível

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud alpha container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --iam-instance-profile NODEPOOL_PROFILE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --node-version CLUSTER_VERSION \
    --max-pods-per-node 110 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Windows (PowerShell)

gcloud alpha container aws node-pools create NODE_POOL_NAME `
    --cluster CLUSTER_NAME `
    --location GOOGLE_CLOUD_LOCATION `
    --min-nodes MIN_NODES `
    --max-nodes MAX_NODES `
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN `
    --iam-instance-profile NODEPOOL_PROFILE `
    --root-volume-size ROOT_VOLUME_SIZE `
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE `
    --subnet-id NODEPOOL_SUBNET `
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME `
    --node-version CLUSTER_VERSION `
    --max-pods-per-node 110 `
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Windows (cmd.exe)

gcloud alpha container aws node-pools create NODE_POOL_NAME ^
    --cluster CLUSTER_NAME ^
    --location GOOGLE_CLOUD_LOCATION ^
    --min-nodes MIN_NODES ^
    --max-nodes MAX_NODES ^
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN ^
    --iam-instance-profile NODEPOOL_PROFILE ^
    --root-volume-size ROOT_VOLUME_SIZE ^
    --instance-placement TENANCY_TYPE
    --instance-type INSTANCE_TYPE ^
    --subnet-id NODEPOOL_SUBNET ^
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME ^
    --node-version CLUSTER_VERSION ^
    --max-pods-per-node 110 ^
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

REST

O exemplo a seguir cria um pool de nós com hosts dedicados. Quando você cria um pool de nós, todas as instâncias dentro do pool têm o mesmo tipo de instância e configuração de locação.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • ENDPOINT: seu endpoint de serviço do Google Cloud
  • PROJECT_ID: seu projeto do Google Cloud.
  • USERNAME: usuário que pode executar operações como administrador do cluster
    • GOOGLE_CLOUD_LOCATION: a região compatível com o Google Cloud
    • CLUSTER_NAME: o nome do cluster.
    • NODE_POOL_NAME: o nome do pool de nós que gerencia seu cluster, por exemplo, us-west1
    • MIN_NODES: o número mínimo de nós que o pool pode conter.
    • MAX_NODES: o número máximo de nós que o pool pode conter.
    • CONFIG_KMS_KEY_ARN: o nome de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os dados do usuário.
    • NODEPOOL_PROFILE: o perfil de instância do IAM para VMs de pool de nós.
    • ROOT_VOLUME_SIZE: o tamanho desejado para o volume raiz de cada nó, em GB.
    • TENANCY_TYPE: a configuração da locação do plano de controle. Pode ser DEFAULT, DEDICATED ou HOST.
    • INSTANCE_TYPE: o tipo de instância de máquina da AWS desejado para este pool de nós
    • NODEPOOL_SUBNET: o ID da sub-rede em que o pool de nós será executado. Se essa sub-rede estiver fora do bloco CIDR primário de VPC, algumas etapas adicionais serão necessárias. Para mais informações, consulte grupos de segurança.
    • CLUSTER_VERSION: uma versão de cluster compatível

Método HTTP e URL:

POST ENDPOINT/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools

Corpo JSON da solicitação:

{
    "name": "NODE_POOL_NAME",
    "autoscaling": {
        "minNodeCount": MIN_NODES,
        "maxNodeCount": MAX_NODES
    },
    "config": {
        "configEncryption": {
            "kmsKeyArn": "CONFIG_KMS_KEY_ARN"
        },
        "iamInstanceProfile": "NODEPOOL_PROFILE",
        "rootVolume": {
            "sizeGib": ROOT_VOLUME_SIZE
        },
        "instancePlacement": {
          "tenancy": "TENANCY_TYPE"
        },
        "instanceType" : "INSTANCE_TYPE"
        "tags": {
            "google:gkemulticloud:cluster": "NODE_POOL_NAME"
        }
    },
    "maxPodsConstraint": {
        "maxPodsPerNode": "110"
    },
    "subnetId": "NODEPOOL_SUBNET",
    "version": "CLUSTER_VERSION"
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Para ver mais opções, consulte a documentação de referência Method: projects.locations.awsClusters.awsNodePools.create.

Como fazer a limpeza

Para excluir um cluster usando hosts dedicados, execute as seguintes etapas:

  1. Excluir qualquer pool de nós
  2. Exclua um cluster.
  3. Depois de excluir os pools de nós e o cluster, é possível Liberar hosts dedicados.

A seguir