Creación de un clúster de usuarios personalizado

Este tema describe cómo personalizar la configuración de un clúster de usuarios de GKE en AWS.

Es posible que desee crear un clúster de usuarios personalizado por los siguientes motivos:

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

Antes de empezar

Antes de comenzar a usar GKE en AWS, asegúrese de haber realizado las siguientes tareas:

  • Instalar un servicio de gestión .

  • Si desea crear un clúster sin usar terraform output example_cluster , disponga de subredes privadas de AWS para su plano de control. Cada subred debe pertenecer a una zona de disponibilidad (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.

  • Tenga su ID de nube virtual privada (VPC) de AWS. Un ID de VPC se parece vpc-012345678abcde . Puede encontrarlo en la consola de AWS .

Para conectarse a sus recursos de GKE en AWS, siga estos pasos. Seleccione si ya tiene una VPC de AWS (o una conexión directa a su VPC) o si creó una VPC dedicada al crear su servicio de administración.

VPC existente

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

VPC dedicada

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

Para conectarse a su servicio de administración, realice los siguientes pasos:

  1. Vaya al directorio con su configuración de GKE en AWS. Este directorio se creó al instalar el servicio de administración .

    cd anthos-aws

  2. Para abrir el túnel, ejecute el script bastion-tunnel.sh . El túnel redirecciona a localhost:8118 .

    Para abrir un túnel al host bastión, ejecute el siguiente comando:

    ./bastion-tunnel.sh -N
    

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

  3. Abra una nueva terminal y cámbiese a su 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 API del servicio de administración.

Seleccionar un tamaño de instancia del plano de control

GKE en AWS no permite redimensionar las instancias del plano de control. Antes de crear el clúster de usuarios, seleccione el tamaño de instancia de sus planos de control. El tamaño de los planos de control depende de la cantidad de nodos del clúster. La siguiente tabla contiene los tamaños de instancia recomendados para los distintos tamaños de clúster.

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

Creación de un nuevo clúster con una configuración personalizada

Puede usar terraform output example_cluster para configurar un clúster de usuario por cada clúster de administración. Si desea crear clústeres adicionales, debe aplicar una configuración personalizada.

En este ejemplo, se crea un clúster manualmente a partir de los CRD AWSCluster y AWSNodePool .

  1. Vaya al directorio con su configuración de GKE en AWS. Este directorio se creó al instalar el servicio de administración .

    cd anthos-aws

  2. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su servicio de administración.

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

  3. Abra un editor de texto y copie la siguiente definición 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
    

    Reemplace lo siguiente:

    • CLUSTER_NAME : el nombre de su clúster.
    • AWS_REGION : la región de AWS donde se ejecuta su clúster.

    • VPC_ID : el ID de la VPC donde se ejecuta su clúster.

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

    • SERVICE_ADDRESS_CIDR_BLOCKS : el rango de direcciones IPv4 que utilizan los servicios del clúster. Actualmente, solo se admite un rango. Este rango no debe solaparse con ninguna subred accesible desde su red. Es seguro usar el mismo rango en varios objetos de AWSCluster. Por ejemplo, 10.1.0.0/16 .

    • SERVICE_LOAD_BALANCER_SUBNETS : los ID de subred donde GKE en AWS puede crear balanceadores de carga públicos o privados.

    • CLUSTER_VERSION : una versión de Kubernetes compatible con GKE 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 AWS EC2 .

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

    • CONTROL_PLANE_SECURITY_GROUPS : ID de grupo de seguridad creado durante la instalación del servicio de administración. Puede personalizarlo añadiendo los ID de grupo de seguridad necesarios para conectarse al plano de control.

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

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

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

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

    • ROOT_VOLUME_KEY con el nombre de recurso de Amazon de la clave 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 utilizados por etcd.

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

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

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

    • ARN_OF_KMS_KEY : la clave AWS KMS utilizada para cifrar los secretos del clúster.

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

    • YOUR_PROJECT : su ID de proyecto.

    • GCP_REGION : el Google Cloud Región donde desea almacenar registros. Elija una región cercana a la región de AWS. Para obtener más información, consulte Ubicaciones globales - Regiones y zonas ; por ejemplo, us-central1 .

    • ENABLE_LOGGING : true o false , si el registro en la nube 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 bucket de Cloud Storage que contiene la información de descubrimiento de la identidad de la carga de trabajo . Este campo es opcional.

  4. Cree uno o más AWSNodePools para su clúster. Abra un editor de texto y copie 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 
    

    Reemplace lo siguiente:

    • NODE_POOL_NAME : un nombre único para su AWSNodePool.
    • AWSCLUSTER_NAME : el nombre de su clúster de AWS. Por ejemplo, staging-cluster .
    • CLUSTER_VERSION : una versión compatible de GKE en AWS Kubernetes.
    • AWS_REGION : la misma región de AWS que su AWSCluster.
    • AWS_SUBNET_ID : una subred de AWS en la misma región que su AWSCluster.
    • MINIMUM_NODE_COUNT : el número mínimo de nodos en el grupo de nodos. Consulte Escalado de clústeres de usuarios para obtener más información.
    • MAXIMUM_NODE_COUNT : el número máximo de nodos en el grupo de nodos.
    • MAXIMUM_PODS_PER_NODE_COUNT : la cantidad máxima 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 AWS KMS asignado a cada trabajador del grupo de nodos.
    • NODE_IAM_PROFILE : el nombre del perfil de 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 de su plano de control.
    • VOLUME_TYPE : tipo de volumen de AWS EBS del nodo. Por ejemplo, gp3 .
    • IOPS : cantidad de operaciones de E/S aprovisionadas por segundo (IOPS) para volúmenes. Solo válido cuando volumeType es gp3 .
    • NODE_VOLUME_KEY : ARN de la clave AWS KMS utilizada para cifrar el volumen. Para obtener más información, consulte "Uso de una CMK administrada por el cliente para cifrar volúmenes" .
  5. Aplique los manifiestos a su 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 kubeconfig

Mientras se inicia el clúster de usuarios, puede crear un contexto kubeconfig para el nuevo clúster. Este contexto se usa para autenticarse en un clúster de usuarios o de administración.

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

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

    Reemplace CLUSTER_NAME con el nombre de su clúster. Por ejemplo, cluster-0 .

  2. Utilice kubectl para autenticarse en su nuevo clúster de usuarios.

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

    Si su clúster está listo, la salida incluye las URL de los componentes de Kubernetes dentro de su clúster.

Visualización del estado de su clúster

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

  1. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su servicio de administración.

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

  2. Para enumerar sus clústeres, utilice kubectl get AWSClusters .

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

    La salida incluye el nombre, el estado, la edad, la versión y el punto final de cada clúster.

    Por ejemplo, la siguiente salida 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
    

Ver los eventos de su clúster

Para ver eventos recientes de Kubernetes de su clúster de usuarios, use kubectl get events .

  1. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su servicio de administración.

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

  2. Ejecute kubectl get events .

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

La salida incluye información, advertencias y errores relacionados con su servicio de administración.

Eliminar un clúster de usuarios

Para eliminar un clúster de usuarios, realice los siguientes pasos:

  1. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su servicio de administración.

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

  2. Utilice kubectl delete para eliminar el manifiesto que contiene sus clústeres de usuarios.

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

    Reemplace CLUSTER_FILE con el nombre del manifiesto que contiene los objetos AWScluster y AWSNodePool. Por ejemplo, cluster-0.yaml .

Eliminar todos los clústeres de usuarios

Para eliminar todos los clústeres de usuarios, realice los siguientes pasos:

  1. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su servicio de administración.

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

  2. Utilice kubectl delete para eliminar 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, consulte Desinstalación de GKE en AWS .

¿Qué sigue?