Crear un clúster con hosts dedicados

En esta página se explica cómo crear un clúster y un grupo de nodos que usen instancias dedicadas o hosts dedicados de AWS. Los hosts y las instancias dedicados se reservan para tu uso exclusivo y no se comparten con otros clientes de AWS. El ajuste de hosts e instancias dedicados se conoce como tenencia.

Antes de empezar

Para usar instancias o hosts dedicados con GKE en AWS, debes crear una nueva versión de clúster 1.22.8-gke.200 o posterior. No puedes actualizar un clúster que ya tengas y añadir hosts dedicados.

Requisitos de clústeres

Antes de crear un clúster, debes completar los requisitos previos. En concreto, debe proporcionar los siguientes recursos:

  • Una VPC de AWS en la que se ejecutará el clúster.
  • Hasta tres subredes de AWS para las tres réplicas del plano de control. Cada una debe estar en una zona de disponibilidad de AWS diferente.
  • El rol de gestión de identidades y accesos de AWS que asume GKE en AWS al gestionar tu clúster. Para ello, se necesita un conjunto específico de permisos de gestión de identidades y accesos.
  • Claves simétricas de CMEK de KMS para el cifrado en reposo de los datos y la configuración del clúster (etcd).
  • El perfil de instancia de AWS IAM de cada réplica del plano de control. Para ello, se necesita un conjunto específico de permisos de gestión de identidades y accesos.
  • Un par de claves SSH de EC2 (opcional) si necesitas acceso SSH a las instancias de EC2 que ejecutan cada réplica del plano de control.

Es tu responsabilidad crear y gestionar estos recursos, que se pueden compartir entre todos tus clústeres de Anthos. GKE on AWS gestiona todos los demás recursos de AWS subyacentes con ámbito de clúster.

En estas instrucciones se usa la API Multi-Cloud de GKE para crear un clúster y un grupo de nodos. Antes de usar la API GKE Multi-Cloud, asegúrate de que conoces las Google Cloud APIs.

Hosts e instancias dedicados

Cuando creas un clúster o un grupo de nodos, puedes elegir una de las siguientes opciones:

  • DEFAULT: lanza instancias con la opción de aislamiento predeterminada de tu VPC
  • DEDICATED: inicia instancias en una instancia dedicada
  • HOST: lanzar instancias en un host dedicado

Antes de crear un clúster o un grupo de nodos, decide qué opción es la más adecuada para ti.

Para obtener más información, consulta los artículos sobre configurar el alquiler de instancias con una configuración de lanzamiento, instancias dedicadas y hosts dedicados en la documentación de AWS.

Combinar ajustes de arrendamiento en un clúster

Puedes configurar los ajustes de arrendamiento de forma individual para cada plano de control y grupo de nodos. Por ejemplo, puedes crear un clúster con el plano de control en hosts compartidos, un grupo de nodos en hosts dedicados y otro grupo de nodos en hosts compartidos.

Asignar hosts dedicados

Antes de crear un clúster con hosts dedicados, debes asignar hosts a todas las instancias que necesite el clúster. Los hosts deben tener los siguientes atributos:

  • Usa las mismas familias de instancias que necesiten los recursos de tu clúster.
  • Asignados en las mismas zonas en las que tenías previsto crear clústeres
  • Habilitar la colocación automática
  • Tienes suficiente cuota para lanzar hosts dedicados

Para obtener más información sobre cómo asignar hosts dedicados, consulta el artículo Empezar a usar hosts dedicados.

Limitaciones

En esta sección se enumeran las limitaciones de la compatibilidad con hosts dedicados en GKE en AWS.

Grupos de nodos

No puedes actualizar el ajuste de arrendamiento de un grupo de nodos. Para mover cargas de trabajo a instancias con otro ajuste de aislamiento, crea un nuevo grupo de nodos con el aislamiento que quieras y elimina el grupo de nodos actual.

Familias de instancias admitidas

GKE on AWS admite hosts dedicados de las siguientes familias de instancias.

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

No se admiten otras familias de instancias.

Tipos de nodos

Solo se admiten grupos de nodos de Linux.

Crear un clúster

Crea un clúster que admita hosts dedicados con el método projects.locations.awsClusters.create de la API multinube de GKE. Para crear un clúster, sigue estos pasos:

gcloud

En el siguiente ejemplo se crea un clúster con hosts dedicados.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

    • CLUSTER_NAME: el nombre del clúster que hayas elegido
    • GOOGLE_CLOUD_LOCATION: la región Google Cloud donde se encuentra tu clúster (por ejemplo, us-west1)
    • AWS_REGION: la región de AWS en la que se creará el clúster
    • API_ROLE_ARN: el ARN del rol de la API de GKE Multi-cloud
    • CONFIG_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS para cifrar los datos de usuario.
    • DB_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS para cifrar los secretos del clúster.
    • CONTROL_PLANE_PROFILE: el perfil de la instancia de gestión de identidades y accesos asociada al clúster
    • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3 con los IDs de subred de las tres instancias del plano de control de tu clúster
    • TENANCY_TYPE: el ajuste de la tenencia del plano de control. Puede ser DEFAULT, DEDICATED o HOST.
    • CLUSTER_VERSION: A versión de clúster admitida
    • FLEET_PROJECT: el proyecto de host de la flota en el que se registrará el clúster. Si quieres gestionar este clúster desde otro proyecto, consulta Registro entre proyectos.
    • POD_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones CIDR de los pods de tu clúster
    • SERVICE_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones CIDR de los servicios de tu clúster
    • VPC_ID: el ID de la VPC de AWS de este clúster

Ejecuta el siguiente comando:

Linux, macOS o 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

En el siguiente ejemplo se crea un clúster con hosts dedicados.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • ENDPOINT: tu Google Cloud endpoint de servicio
  • PROJECT_ID: tu Google Cloud proyecto
  • USERNAME: usuario que puede realizar operaciones como administrador de clústeres
    • CLUSTER_NAME: el nombre del clúster que hayas elegido
    • GOOGLE_CLOUD_LOCATION: la región Google Cloud donde se encuentra tu clúster (por ejemplo, us-west1)
    • AWS_REGION: la región de AWS en la que se creará el clúster
    • API_ROLE_ARN: el ARN del rol de la API de GKE Multi-cloud
    • CONFIG_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS para cifrar los datos de usuario.
    • DB_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS para cifrar los secretos del clúster.
    • CONTROL_PLANE_PROFILE: el perfil de la instancia de gestión de identidades y accesos asociada al clúster
    • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3 con los IDs de subred de las tres instancias del plano de control de tu clúster
    • TENANCY_TYPE: el ajuste de la tenencia del plano de control. Puede ser DEFAULT, DEDICATED o HOST.
    • CLUSTER_VERSION: A versión de clúster admitida
    • FLEET_PROJECT: el proyecto de host de la flota en el que se registrará el clúster. Si quieres gestionar este clúster desde otro proyecto, consulta Registro entre proyectos.
    • POD_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones CIDR de los pods de tu clúster
    • SERVICE_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones CIDR de los servicios de tu clúster
    • VPC_ID: el ID de la VPC de AWS de este clúster

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "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 tu solicitud, despliega una de estas opciones:

Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.

Para ver más opciones, consulta la documentación de referencia del método projects.locations.awsClusters.create.

Crear un grupo de nodos

gcloud

En el siguiente ejemplo se crea un grupo de nodos con hosts dedicados. Cuando creas un grupo de nodos, todas las instancias del grupo tienen el mismo tipo de instancia y el mismo ajuste de arrendamiento.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

    • GOOGLE_CLOUD_LOCATION: la región Google Cloud
    • CLUSTER_NAME: el nombre de tu clúster
    • NODE_POOL_NAME: el nombre del grupo de nodos que gestiona tu clúster. Por ejemplo, us-west1.
    • MIN_NODES: número mínimo de nodos que puede contener el grupo de nodos.
    • MAX_NODES: número máximo de nodos que puede contener el grupo de nodos
    • CONFIG_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS que cifra los datos de los usuarios.
    • NODEPOOL_PROFILE: el perfil de instancia de gestión de identidades y accesos de las VMs del grupo de nodos
    • ROOT_VOLUME_SIZE: tamaño deseado del volumen raíz de cada nodo, en GB.
    • TENANCY_TYPE: el ajuste de la tenencia del plano de control. Puede ser DEFAULT, DEDICATED o HOST.
    • INSTANCE_TYPE: el tipo de instancia de máquina de AWS que quieras para este grupo de nodos.
    • NODEPOOL_SUBNET: el ID de la subred en la que se ejecutará el grupo de nodos. Si esta subred está fuera del bloque CIDR principal de la VPC, se deben seguir algunos pasos adicionales. Para obtener más información, consulta la sección Grupos de seguridad.
    • CLUSTER_VERSION: A versión de clúster admitida

Ejecuta el siguiente comando:

Linux, macOS o 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

En el siguiente ejemplo se crea un grupo de nodos con hosts dedicados. Cuando creas un grupo de nodos, todas las instancias del grupo tienen el mismo tipo de instancia y el mismo ajuste de arrendamiento.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • ENDPOINT: tu Google Cloud endpoint de servicio
  • PROJECT_ID: tu Google Cloud proyecto
  • USERNAME: usuario que puede realizar operaciones como administrador de clústeres
    • GOOGLE_CLOUD_LOCATION: la región Google Cloud
    • CLUSTER_NAME: el nombre de tu clúster
    • NODE_POOL_NAME: el nombre del grupo de nodos que gestiona tu clúster. Por ejemplo, us-west1.
    • MIN_NODES: número mínimo de nodos que puede contener el grupo de nodos.
    • MAX_NODES: número máximo de nodos que puede contener el grupo de nodos
    • CONFIG_KMS_KEY_ARN: el nombre de recurso de Amazon (ARN) de la clave de KMS de AWS que cifra los datos de los usuarios.
    • NODEPOOL_PROFILE: el perfil de instancia de gestión de identidades y accesos de las VMs del grupo de nodos
    • ROOT_VOLUME_SIZE: tamaño deseado del volumen raíz de cada nodo, en GB.
    • TENANCY_TYPE: el ajuste de la tenencia del plano de control. Puede ser DEFAULT, DEDICATED o HOST.
    • INSTANCE_TYPE: el tipo de instancia de máquina de AWS que quieras para este grupo de nodos.
    • NODEPOOL_SUBNET: el ID de la subred en la que se ejecutará el grupo de nodos. Si esta subred está fuera del bloque CIDR principal de la VPC, se deben seguir algunos pasos adicionales. Para obtener más información, consulta la sección Grupos de seguridad.
    • CLUSTER_VERSION: A versión de clúster admitida

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "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 tu solicitud, despliega una de estas opciones:

Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.

Para ver más opciones, consulta la documentación de referencia de Method: projects.locations.awsClusters.awsNodePools.create.

Eliminar los recursos utilizados

Para eliminar un clúster mediante hosts dedicados, sigue estos pasos:

  1. Eliminar grupos de nodos
  2. Eliminar un clúster.
  3. Una vez que hayas eliminado tus grupos de nodos y tu clúster, puedes liberar los hosts dedicados.

Siguientes pasos