Crear un clúster de usuario personalizado

En este tema, se describe cómo personalizar la configuración del clúster de usuario de clústeres de Anthos en AWS (GKE on AWS).

Te recomendamos crear un clúster de usuario personalizado por las siguientes razones:

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

Antes de comenzar

Antes de comenzar a usar clústeres de Anthos alojados en AWS, asegúrate de haber realizado las siguientes tareas:

  • Instalar un servicio de administración

  • Si deseas crear un clúster sin usar terraform output example_cluster, debes tener subredes de AWS privadas para tu plano de control. Cada subred debe pertenecer a una AZ diferente en 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 puerta de enlace NAT.

  • Ten tu ID de nube privada virtual (VPC) de AWS. El ID de la VPC es similar a este: vpc-012345678abcde. Puedes encontrarlo en AWS Console.

Para conectarte a tus clústeres de Anthos en recursos de AWS, sigue estos pasos. Selecciona si tienes una VPC de AWS existente (o conexión directa a tu VPC) o si creaste una VPC dedicada cuando creaste tu servicio de administración.

VPC existente

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

VPC dedicada

Cuando creas un servicio de administración en una VPC dedicada, clústeres de Anthos alojados en AWS incluye un host de bastión en una subred pública.

Para conectarte al servicio de administración, realiza los siguientes pasos:

  1. Cambia al directorio con tus clústeres de Anthos en la configuración de AWS. Creaste este directorio cuando instalaste el servicio de administració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 de bastión, ejecuta el siguiente comando:

    ./bastion-tunnel.sh -N
    

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

  3. Abre una terminal nueva y cambia a tu directorio de anthos-aws.

    cd anthos-aws
  4. Verifica que puedas conectarte al clúster con kubectl.

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

    El resultado incluye la URL para el servidor de API del servicio de administración.

Selecciona un tamaño de instancia de plano de control

Los clústeres de Anthos en AWS no admiten el cambio de tamaño de las instancias del plano de control. Antes de crear tu clúster de usuario, selecciona el tamaño de instancia de tus planos de control. Los tamaños del plano de control dependen de la cantidad de nodos en el clúster. La siguiente tabla contiene los tamaños de instancia del plano de control recomendados para varios tamaños de clúster.

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

Crea un clúster nuevo con una configuración personalizada

Puedes usar terraform output example_cluster a fin de crear la configuración para un clúster de usuarios por clúster de administración. Si deseas crear clústeres adicionales, debes aplicar una configuración personalizada.

En este ejemplo, se crea un clúster de forma manual de las CRD de AWSCluster y AWSNodePool.

  1. Cambia al directorio con la configuración de los clústeres de Anthos en AWS. Creaste este directorio cuando instalaste el servicio de administración.

    cd anthos-aws

  2. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

    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
    

    Reemplaza lo siguiente:

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

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

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

    • SERVICE_ADDRESS_CIDR_BLOCKS: El rango de direcciones IPv4 que usan los servicios del clúster. Por el momento, se admite un solo rango. Este rango no debe superponerse con ninguna subred accesible desde tu red. Es seguro usar el mismo rango en diferentes objetos de AWSCluster. Por ejemplo, 10.1.0.0/16

    • SERVICE_LOAD_BALANCER_SUBNETS: los ID de la subred en la que los clústeres de Anthos en AWS pueden crear balanceadores de cargas públicos o privados.

    • CLUSTER_VERSION: una versión de Kubernetes compatible con los clústeres de Anthos en AWS. La versión más reciente es 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: Un tipo de instancia EC2 compatible.

    • SSH_KEY_NAME: Un par de claves de EC2 de AWS.

    • CONTROL_PLANE_SUBNET_IDS: Los ID de subred de los AZ en los que se ejecutan las instancias del plano de control.

    • CONTROL_PLANE_SECURITY_GROUPS: Es un securityGroupID creado durante la instalación del servicio de administración. Si deseas personalizar esto, agrega cualquier securityGroupID requerido para conectarte al plano de control.

    • CONTROL_PLANE_IAM_PROFILE: El nombre del perfil de la instancia de EC2 de AWS asignado para controlar las réplicas del plano.

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

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

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

    • ROOT_VOLUME_KEY por el nombre de recurso de Amazon de la clave de AWS KMS que encripta 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 por el tipo de volumen de EBS. Por ejemplo, gp3

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

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

    • ARN_OF_KMS_KEY: La clave de KMS de AWS que se usa para encriptar los Secrets del clúster.

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

    • YOUR_PROJECT: el ID de tu proyecto

    • GCP_REGION: Es la región de Google Cloud en la que deseas almacenar los registros. Elige una región ubicada cerca de la región de AWS. Para obtener más información, consulta Ubicaciones globales: Regiones y zonas, por ejemplo, us-central1.

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

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

    • WORKLOAD_IDENTITY_BUCKET: El nombre del bucket de Cloud Storage que contiene la información de descubrimiento de Workload Identity. Este campo es opcional.

  4. Crea uno o más 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
    

    Reemplaza lo siguiente:

    • NODE_POOL_NAME: Un nombre único para tu AWSNodePool.
    • AWSCLUSTER_NAME: Es el nombre de tu AWSCluster. Por ejemplo, staging-cluster
    • CLUSTER_VERSION: es una versión compatible de Kubernetes de los clústeres de Anthos 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: Es la cantidad mínima de trabajadores en el grupo de nodos. Consulta Escala clústeres de usuario para obtener más información.
    • MAXIMUM_NODE_COUNT: La cantidad máxima de nodos en el grupo de nodos.
    • MAXIMUM_PODS_PER_NODE_COUNT: la cantidad máxima de pods que los clústeres de Anthos en AWS pueden asignar a un nodo.
    • AWS_NODE_TYPE: Es un tipo de instancia de EC2 en AWS.
    • KMS_KEY_PAIR_NAME: Es el par de claves de AWS KMS asignado a cada trabajador del grupo de nodos.
    • NODE_IAM_PROFILE: Es el nombre del perfil de la instancia de AWS EC2 asignado a los nodos del grupo.
    • ROOT_VOLUME_SIZE: El 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 E/S aprovisionadas por segundo (IOPS) para el volumen Solo es válido cuando volumeType es gp3.
    • NODE_VOLUME_KEY: el ARN de la clave de AWS KMS que se usa para encriptar el volumen. Si deseas obtener más información, consulta Usa una CMK administrada por el cliente para encriptar volúmenes.
  5. Aplica los manifiestos a tu servicio de administració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
    

Crea un kubeconfig

Mientras se inicia el clúster de usuario, puedes crear un contexto kubeconfig para el clúster de usuario nuevo. Usas el contexto para autenticarte en un usuario o clúster de administración.

  1. Usa anthos-gke aws clusters get-credentials a fin de generar un kubeconfig para el clúster de usuario en ~/.kube/config.

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

    Reemplaza CLUSTER_NAME por el nombre del clúster. Por ejemplo, cluster-0

  2. Usa kubectl para autenticarte en el clúster de usuario nuevo.

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

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

Visualiza el estado del clúster

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

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

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

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

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

    El resultado incluye el nombre, el estado, la antigüedad, la versión y el extremo de cada clúster.

    Por ejemplo, el siguiente resultado incluye solo 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
    

Consulta los eventos de tu clúster

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

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

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

  2. Ejecuta kubectl get events.

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

El resultado incluye información, advertencias y errores relacionados con el servicio de administración.

Borra un clúster de usuario

Para borrar un clúster de usuario, realiza los siguientes pasos:

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

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

  2. Usa kubectl delete para borrar el manifiesto que contiene los clústeres de usuario.

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

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

Borra todos los clústeres de usuario

Para borrar todos tus clústeres de usuario, realiza los siguientes pasos:

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

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

  2. Use kubectl delete para borrar sus AWSNodePools y AWSClusters de su servicio de administració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 Desinstala clústeres de Anthos en AWS.

¿Qué sigue?