El 3 de febrero, se lanzó una nueva versión de los clústeres de Anthos en AWS (GKE en AWS). Para obtener más información, consulta las notas de la versión.

Crea un clúster de usuario de alta disponibilidad

En este tema, se describe cómo distribuir tus grupos de nodos y réplicas del plano de control de GKE on AWS en varias subredes de AWS.

GKE on AWS admite la creación de recursos AWSCluster con el plano de control distribuidos en varias zonas de disponibilidad. Luego, puedes implementar recursos AWSNodePool en varias zonas de disponibilidad. Para obtener más información, consulta Arquitectura de GKE on AWS.

Antes de comenzar

Antes de comenzar a usar GKE on AWS, completa las siguientes tareas:

  • Instala un servicio de administración.
    Importante: Si usas una VPC dedicada creada por GKE on AWS, incluye más de una zona en spec.dedicatedVPC.availabilityZones en tu anthos-gke.yaml.

  • Ten tres subredes privadas para tu plano de control. Cada subred debe pertenecer a una zona de disponibilidad de AWS diferente en la misma región de AWS. Las tablas de enrutamiento deben configurarse para permitir el tráfico entre subredes privadas y tener acceso a una puerta de enlace NAT.

  • Ten el ID de la VPC de AWS. El ID de una VPC es similar a este: vpc-012345678abcde. Puedes encontrarlo en AWS Console.

Para conectarte a tus recursos de GKE on AWS, sigue las instrucciones que se indican a continuación si tienes una VPC de AWS existente (o conexión directa a tu VPC) o si creaste una VPC dedicada cuando creaste el 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, GKE on AWS incluye un host de bastión en una subred pública.

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

  1. Ejecuta la secuencia de comandos bastion-tunnel.sh para abrir el túnel. 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 CTRL-C o cierra la ventana.

  2. Abre una terminal nueva y cambia el directorio por el directorio que tiene la configuración de GKE on AWS.

  3. Verifica que puedas conectarte al clúster con kubectl.

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

    El resultado incluye la URL de la instancia principal.

Etiqueta las subredes con el nombre de tu clúster

Para iniciar un clúster de alta disponibilidad, debes etiquetar la VPC y las subredes con el ID de tu servicio de administración. Si ya etiquetaste las subredes, ve a Crea un clúster de alta disponibilidad nuevo.

Para etiquetar las subredes, sigue estos pasos:

  1. Exporta el ID del clúster como la variable de entorno $CLUSTER-ID.

      export CLUSTER_ID=$(terraform output cluster_id)
    
  2. Exporta el ID de la VPC de AWS como la variable de entorno $VPC_ID.

      export VPC_ID=vpc-id
    
  3. Obtén los ID de tu subred privada mediante la herramienta de la CLI de aws.

      aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
      --query "Subnets[*].SubnetId" \
      --output text
    
  4. Etiqueta las subredes con el ID de tu clúster. Ejecuta el siguiente comando por cada una de tus subredes.

      aws ec2 create-tags \
      --resources subnet-ids \
      --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
    

    Reemplaza subnet-ids por la lista de ID de subredes, separados por espacios. Por ejemplo:subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef

Crea un clúster de alta disponibilidad nuevo

En este ejemplo, debes usar terraform para generar una configuración con el fin de crear un manifiesto de AWSCluster. Luego, debes agregar tus subredes al manifiesto y aplicar la configuración mediante kubectl apply.

Para crear un clúster de alta disponibilidad, sigue estos pasos:

  1. Usa anthos-gke para cambiar el contexto a tu servicio de administración.

    anthos-gke aws management get-credentials

  2. Abre la terminal y conéctate al host de bastión.

  3. Cambia el directorio a la carpeta que creaste cuando instalaste el servicio de administración.

  4. Usa Terraform para generar un manifiesto que configure un clúster de ejemplo y guárdalo en un archivo YAML.

    terraform output cluster_example > cluster-0.yaml
    
  5. Abre cluster-0.yaml en un editor de texto.

  6. Agrega los ID de las subredes adicionales a la sección de AWSCluster en spec.controlPlane.subnetIDs. GKE on AWS crea un plano de control en cada subred que especificas.

    Por ejemplo, si los ID de tus subredes son subnet-012345678abcdef, subnet-abcdef123456789 y subnet-123456789abcdef, la configuración será la siguiente:

    subnetIDs:
    - subnet-012345678abcdef
    - subnet-abcdef123456789
    - subnet-123456789abcdef
    
  7. Agrega un recurso AWSNodePool adicional por subred al archivo.

    Para hacerlo, copia todo el contenido del AWSNodePool existente, con --- al comienzo. Sigue el esquema del recurso AWSNodePool.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: node-pool-name
    spec:
      clusterName: AWSCluster-name
      version: gke-version # latest version is 1.16.9-gke.15
      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
      rootVolume:
        sizeGiB: root-volume-size
      labels:
        label-name: label-value
      taints:
      - key: key1
        value: value1
        effect: PreferNoSchedule
      - key: key2
        effect: NoSchedule
      tags:
        tag-name: tag-value
    

    Luego, edita lo siguiente:

    • El metadata.name o AWSNodePool. El nombre debe ser único dentro de tu clúster de GKE on AWS. Por ejemplo, dado que el nombre del grupo de nodos predeterminado es pool-0, los grupos adicionales pueden llamarse pool-1 y pool-2.
    • El campo spec.subnetID de cada grupo de nodos. Reemplaza cada valor por el ID de una subred diferente.
  8. Guarda el archivo.

  9. Aplica el archivo a tu servicio de administración mediante kubectl.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl apply -f cluster-0.yaml
    
  10. Genera un kubeconfig para tu clúster de usuario en ~/.kube/.

    env HTTP_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials cluster-0
    
  11. Usa kubectl para autenticarte en el clúster de usuario nuevo.

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

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

Soluciona problemas

No se puede establecer una conexión con el servidor

Si recibes el error Unable to connect to the server cuando intentas ejecutar un comando kubectl en tu clúster de usuario, que se cumplan estos aspectos:

  • Todas las subredes privadas tienen rutas entre ellas.
  • Tus subredes privadas tienen acceso a una puerta de enlace NAT de AWS.

Próximos pasos