Crear un clúster de usuarios personalizado

En este tema se describe cómo personalizar la configuración de un clúster de usuario de GKE en AWS.

Puede crear un clúster de usuarios personalizado por los siguientes motivos:

  • Crear otro clúster para un entorno de pruebas o de desarrollo.
  • Añadir grupos de nodos con diferentes tipos de máquinas.
  • Crear un clúster en zonas de disponibilidad (AZ) de AWS específicas.

Antes de empezar

Antes de empezar a usar GKE en AWS, asegúrate de haber completado las siguientes tareas:

  • Instala un servicio de gestión.

  • Si quieres crear un clúster sin usar terraform output example_cluster, debes tener subredes privadas de AWS para tu plano de control. Cada subred debe pertenecer a una zona de disponibilidad diferente de la misma región de AWS. Las tablas de rutas deben configurarse para permitir el tráfico entre subredes privadas, y cada subred debe tener acceso a una pasarela NAT.

  • Tener el ID de tu nube privada virtual (VPC) de AWS. Un ID de VPC tiene el siguiente formato: vpc-012345678abcde. Puedes encontrar tu ID de VPC en la consola de AWS.

Para conectarte a tus recursos de GKE en AWS, sigue estos pasos. Selecciona si tienes una VPC de AWS (o una conexión directa a tu VPC) o si has creado una VPC específica al crear tu servicio de gestión.

VPC ya creada

Si tienes una conexión directa o VPN a una VPC, omite la línea env HTTP_PROXY=http://localhost:8118 de los comandos de este tema.

VPC dedicada

Cuando creas un servicio de gestión en una VPC dedicada, GKE en AWS incluye un host bastión en una subred pública.

Para conectarte a tu servicio de gestión, sigue estos pasos:

  1. Cambia al directorio con tu configuración de GKE en AWS. Has creado este directorio al instalar el servicio de gestión.

    cd anthos-aws

  2. Para abrir el túnel, ejecuta la secuencia de comandos bastion-tunnel.sh. El túnel reenvía a localhost:8118.

    Para abrir un túnel al host bastion, ejecuta el siguiente comando:

    ./bastion-tunnel.sh -N
    

    Los mensajes del túnel SSH aparecen en esta ventana. Cuando quieras cerrar la conexión, detén el proceso con Control+C o cierra la ventana.

  3. Abre una terminal nueva y ve al directorio anthos-aws.

    cd anthos-aws
  4. Comprueba que puedes conectarte al clúster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    La salida incluye la URL del servidor de la API del servicio de gestión.

Seleccionar el tamaño de una instancia del plano de control

GKE en AWS no admite el cambio de tamaño de las instancias del plano de control. Antes de crear el clúster de usuarios, selecciona el tamaño de instancia de los planos de control. El tamaño del plano de control depende del número de nodos del clúster. En la siguiente tabla se incluyen los tamaños de instancia del plano de control recomendados para distintos tamaños de clúster.

Tamaño del clúster (nodos) Tipo de instancia del plano de control
De 1 a 10 m5.large
11-100 m5.xlarge
101-200 m5.2xlarge

Crear un clúster con una configuración personalizada

Puedes usar terraform output example_cluster para crear la configuración de un clúster de usuario por cada clúster de gestión. Si quieres crear clústeres adicionales, debes aplicar una configuración personalizada.

En este ejemplo, crearás un clúster manualmente a partir de los CRDs AWSCluster y AWSNodePool.

  1. Cambia al directorio con tu configuración de GKE en AWS. Has creado este directorio al instalar el servicio de gestión.

    cd anthos-aws

  2. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio de gestión.

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. Abre un editor de texto y copia la siguiente definición de AWSCluster en un archivo llamado custom-cluster.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster.
    • AWS_REGION: la región de AWS en la que se ejecuta el clúster.

    • VPC_ID: el ID de la VPC en la que se ejecuta el clúster.

    • POD_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones IPv4 que usan los pods del clúster. Actualmente, solo se admite un intervalo. El intervalo no se puede solapar con ninguna subred accesible desde tu red. Es seguro usar el mismo intervalo en varios objetos AWSCluster diferentes. Por ejemplo, 10.2.0.0/16.

    • SERVICE_ADDRESS_CIDR_BLOCKS: el intervalo de direcciones IPv4 que usan los servicios del clúster. Actualmente, solo se admite un intervalo. El intervalo no debe solaparse con ninguna subred accesible desde tu red. Puedes usar el mismo intervalo en varios objetos AWSCluster sin problemas. Por ejemplo, 10.1.0.0/16.

    • SERVICE_LOAD_BALANCER_SUBNETS: los IDs de las subredes en las que GKE en AWS puede crear balanceadores de carga públicos o privados.

    • CLUSTER_VERSION: a versión de Kubernetes compatible con GKE en AWS. La versión más reciente es la 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: un tipo de instancia de EC2 admitido.

    • SSH_KEY_NAME: un par de claves de AWS EC2.

    • CONTROL_PLANE_SUBNET_IDS: los IDs de subred de las zonas de disponibilidad en las que se ejecutan las instancias del plano de control.

    • CONTROL_PLANE_SECURITY_GROUPS: un securityGroupID creado durante la instalación del servicio de gestión. Para personalizarlo, añade los securityGroupIDs necesarios para conectarte al plano de control.

    • CONTROL_PLANE_IAM_PROFILE: nombre de la instancia de AWS EC2 perfil asignado a las réplicas del plano de control.

    • ROOT_VOLUME_SIZE: tamaño, en gibibytes (GiB), de los volúmenes raíz del plano de control.

    • ROOT_VOLUME_TYPE con el tipo de volumen de EBS. Por ejemplo, gp3.

    • ROOT_VOLUME_IOPS con la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) del volumen. Solo es válido cuando volumeType es GP3. Para obtener más información, consulta Volúmenes SSD de uso general (gp3).

    • ROOT_VOLUME_KEY con el nombre de recurso de Amazon de la clave de AWS KMS que cifra los volúmenes raíz de la instancia del plano de control.

    • ETCD_VOLUME_SIZE: el tamaño de los volúmenes que usa etcd.

    • ETCD_VOLUME_TYPE con el tipo de volumen de EBS. Por ejemplo, gp3.

    • ETCD_VOLUME_IOPS con la cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) del volumen. Solo es válido cuando volumeType es gp3. Para obtener más información, consulta Volúmenes SSD de uso general (gp3).

    • ETCD_VOLUME_KEY con el nombre de recurso de Amazon de la clave de AWS KMS que cifra los volúmenes de datos de etcd del plano de control.

    • ARN_OF_KMS_KEY: la clave de KMS de AWS que se usa para cifrar los secretos del clúster.

    • ANTHOS_CONNECT_NAME: el nombre de miembro de Connect que se usa para registrar el clúster. El nombre de la suscripción debe ser único. Por ejemplo, projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, donde YOUR_PROJECT es tu Google Cloud proyecto y CLUSTER_NAME es un nombre único en tu proyecto. Este campo es opcional.

    • YOUR_PROJECT: tu ID de proyecto.

    • GCP_REGION: la Google Cloud región en la que quieres almacenar los registros. Elige una región cercana a la región de AWS. Para obtener más información, consulta Ubicaciones globales: regiones y zonas, como us-central1.

    • ENABLE_LOGGING: true o false, si Cloud Logging está habilitado en los nodos del plano de control.

    • ENABLE_MONITORING: true o false, si Cloud Monitoring está habilitado en los nodos del plano de control.

    • WORKLOAD_IDENTITY_BUCKET: el nombre del segmento de Cloud Storage que contiene la información de detección de tu identidad de carga de trabajo. Este campo es opcional.

  4. Crea uno o varios AWSNodePools para tu clúster. Abre un editor de texto y copia la siguiente definición de AWSCluster en un archivo llamado custom-nodepools.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    

    Haz los cambios siguientes:

    • NODE_POOL_NAME: nombre único de tu AWSNodePool.
    • AWSCLUSTER_NAME: el nombre de tu AWSCluster. Por ejemplo, staging-cluster.
    • CLUSTER_VERSION: una versión de Kubernetes compatible con GKE en AWS.
    • AWS_REGION: la misma región de AWS que tu AWSCluster.
    • AWS_SUBNET_ID: una subred de AWS en la misma región que tu AWSCluster.
    • MINIMUM_NODE_COUNT: número mínimo de nodos del grupo de nodos. Consulta más información sobre cómo escalar clústeres de usuarios.
    • MAXIMUM_NODE_COUNT: número máximo de nodos del grupo de nodos.
    • MAXIMUM_PODS_PER_NODE_COUNT: número máximo de pods que GKE en AWS puede asignar a un nodo.
    • AWS_NODE_TYPE: un tipo de instancia de AWS EC2.
    • KMS_KEY_PAIR_NAME: el par de claves de KMS de AWS asignado a cada trabajador del grupo de nodos.
    • NODE_IAM_PROFILE: nombre del perfil de instancia de AWS EC2 asignado a los nodos del grupo.
    • ROOT_VOLUME_SIZE: tamaño, en gibibytes (GiB), de los volúmenes raíz del plano de control.
    • VOLUME_TYPE: el tipo de volumen de EBS de AWS del nodo. Por ejemplo, gp3.
    • IOPS: la cantidad de operaciones de entrada/salida por segundo (IOPS) aprovisionadas para los volúmenes. Solo es válido cuando volumeType es gp3.
    • NODE_VOLUME_KEY: el ARN de la clave de KMS de AWS que se usa para cifrar el volumen. Para obtener más información, consulta Usar una CMK gestionada por el cliente para cifrar volúmenes.
  5. Aplica los manifiestos a tu servicio de gestión.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

Crear un archivo kubeconfig

Mientras se inicia el clúster de usuarios, puedes crear un contexto kubeconfig para el nuevo clúster de usuarios. El contexto se usa para autenticar a un usuario o a un clúster de gestión.

  1. Usa anthos-gke aws clusters get-credentials para generar un kubeconfig para tu clúster de usuarios en ~/.kube/config.

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    Sustituye CLUSTER_NAME por el nombre de tu clúster. Por ejemplo, cluster-0.

  2. Usa kubectl para autenticarte en tu nuevo clúster de usuarios.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    Si el clúster está listo, el resultado incluye las URLs de los componentes de Kubernetes del clúster.

Ver el estado de un clúster

El servicio de gestión aprovisiona recursos de AWS cuando aplicas un AWSCluster o un AWSNodePool.

  1. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio de gestión.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Para enumerar tus clústeres, usa kubectl get AWSClusters.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    La salida incluye el nombre, el estado, la antigüedad, la versión y el endpoint de cada clúster.

    Por ejemplo, el siguiente resultado solo incluye un AWSCluster llamado cluster-0:

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

Ver los eventos de un clúster

Para ver los eventos de Kubernetes recientes de tu clúster de usuario, usa kubectl get events.

  1. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio de gestión.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Ejecuta kubectl get events.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

La salida incluye información, advertencias y errores relacionados con tu servicio de gestión.

Eliminar un clúster de usuarios

Para eliminar un clúster de usuarios, sigue estos pasos:

  1. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio de gestión.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Usa kubectl delete para eliminar el manifiesto que contiene tus clústeres de usuarios.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    Sustituye CLUSTER_FILE por el nombre del manifiesto que contiene tus objetos AWSCluster y AWSNodePool. Por ejemplo, cluster-0.yaml.

Eliminar todos los clústeres de usuarios

Para eliminar todos tus clústeres de usuarios, sigue estos pasos:

  1. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio de gestión.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Usa kubectl delete para eliminar tus AWSNodePools y AWSClusters de tu servicio de gestión.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

Para obtener más información, consulta el artículo sobre cómo desinstalar GKE on AWS.

Siguientes pasos