Crea un clúster de administrador con Terraform

Usa Terraform para crear un clúster de administrador para el software de Google Distributed Cloud solo para VMware si ya usas Terraform para administrar tus Google Cloud recursos de VMware locales. También puedes crear un clúster de administrador con gkectl o la Google Cloud consola.

Antes de comenzar

  • Asegúrate de haber configurado tu estación de trabajo de administrador y de poder acceder a ella como se describe en Crea una estación de trabajo de administrador.

  • Asegúrate de que los archivos de claves JSON para las cuentas de servicio estén en tu estación de trabajo de administrador.

  • Revisa el documento de planificación de direcciones IP. Asegúrate de tener suficientes direcciones IP disponibles para los tres nodos del plano de control y una VIP del plano de control. Si planeas crear clústeres de usuario de kubeception, debes tener suficientes direcciones IP disponibles para los nodos del plano de control de esos clústeres de usuario.

  • Revisa la descripción general del balanceo de cargas y revisa la decisión sobre el tipo de balanceador de cargas que deseas usar. Para los balanceadores de cargas manuales, debes configurar el balanceador de cargas antes de crear tu clúster de administrador.

  • Si usas gkectl para crear el clúster de administrador, decide si deseas usar un registro público o privado para los componentes de Google Distributed Cloud. Para obtener información sobre el uso de un registro privado de Docker, consulta privateRegistry. Ni Terraform ni la Google Cloud consola admiten el uso de un registro privado de Docker para los componentes del sistema.

  • Decide qué tipo de sistema operativo deseas ejecutar en los nodos del clúster de administrador.

  • Si tu organización requiere que el tráfico saliente pase por un proxy server, asegúrate de incluir en la lista de entidades permitidas las APIs requeridas y la dirección de Artifact Registry.

  • En la versión 1.29 y versiones posteriores, las comprobaciones previas del servidor están habilitadas de forma predeterminada. Las comprobaciones previas del lado del servidor requieren reglas de firewall adicionales. En Reglas de firewall para clústeres de administrador, busca "Comprobaciones previas" y asegúrate de que todas las reglas de firewall requeridas estén configuradas. Las comprobaciones previas del lado del servidor se ejecutan en el clúster de arranque en lugar de forma local en la estación de trabajo de administrador.

Descripción general del procedimiento

Antes de crear el clúster de administrador, debes ejecutar el comando gkectl register bootstrap en la estación de trabajo de administrador. Este comando implementa un clúster de Kubernetes en Docker (kind) en la estación de trabajo del administrador. Este clúster de arranque aloja los controladores de Kubernetes necesarios para crear el clúster de administrador. Cuando crees el clúster de administrador, los controladores del clúster de arranque aprovisionarán nodos, ejecutarán verificaciones previas y registrarán el clúster de administrador en la flota. El clúster de arranque se borra automáticamente después de que se crea correctamente el clúster de administrador.

Estos son los pasos de alto nivel para crear un clúster de administrador con Terraform:

  1. Completa el archivo de configuración. Usa el google_gkeonprem_vmware_admin_cluster recurso y el ejemplo que sigue para crear el main.tf archivo de configuración.

  2. Crea un clúster bootstrap. Ejecuta gkectl register bootstrap para crear el clúster de arranque. Cuando el comando termine de crear el clúster de arranque, el resultado te informará que debes finalizar la configuración del clúster de administrador. El proceso continúa ejecutándose hasta que se crea el clúster de administrador.

  3. Crea un clúster de administrador. En otra ventana de la terminal o en otra computadora que tenga acceso a la API de GKE On-Prem, ejecuta comandos terraform para crear un clúster de administrador nuevo como se especifica en el archivo de configuración main.tf completado.

Completa el archivo de configuración

En el siguiente ejemplo, se muestra la creación de un clúster de administrador con alta disponibilidad (HA) con tres nodos del plano de control con MetalLB. En la versión 1.28 y versiones posteriores, los clústeres de administrador nuevos deben tener alta disponibilidad. Debido a este requisito, debes establecer control_plane_node.replicas en 3.

Para obtener más información y otros ejemplos, consulta la google_gkeonprem_vmware_admin_cluster documentación de referencia. Para obtener información sobre el uso de un registro privado para imágenes del sistema, consulta Configura un registro de contenedores privado.

Completa las variables de marcador de posición en el siguiente ejemplo y, luego, cópialo y pégalo en main.tf. Si usaste gkeadm para crear tu estación de trabajo de administrador, abre el archivo de configuración de la estación de trabajo de administrador para poder copiar valores de la sección vCenter a las variables de marcador de posición correspondientes.

resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
  provider = google-beta
  name = "ADMIN_CLUSTER_NAME"
  project = "PROJECT_ID"
  location = "REGION"
  description = "DESCRIPTION"
  bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
  on_prem_version = "VERSION"
  image_type = "IMAGE_TYPE"
  vcenter {
    address = "VCENTER_ADDRESS"
    datacenter = "DATA_CENTER"
    cluster = "VCENTER_CLUSTER"
    resource_pool = "RESOURCE_POOL"
    datastore = "DATASTORE"
    ca_cert_data = "CA_CERT_DATA"
  }
  network_config {
    service_address_cidr_blocks = ["10.96.232.0/24"]
    pod_address_cidr_blocks = ["192.168.0.0/16"]
    vcenter_network = "NETWORK"
    dhcp_ip_config {
      enabled = true
    }
    host_config {
      dns_servers = ["DNS_SERVERS"]
      ntp_servers = ["NTP_SERVERS"]
    }
    ha_control_plane_config {
      control_plane_ip_block {
        gateway = "GATEWAY"
        netmask = "NETMASK"
        ips {
          hostname = "CONTROL_PLANE_HOST_1"
          ip       = "CONTROL_PLANE_NODE_IP_1"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_2"
          ip       = "CONTROL_PLANE_NODE_IP_2"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_3"
          ip       = "CONTROL_PLANE_NODE_IP_3"
        }
      }
    }
  }
  control_plane_node {
     cpus = NUM_CPUS
     memory = MEMORY
     replicas = 3
  }
  load_balancer {
    vip_config {
      control_plane_vip = "CONTROL_PLANE_VIP"
    }
    metal_lb_config {
      enabled = true
    }
  }
}

Reemplaza lo siguiente:

  • ADMIN_CLUSTER_NAME: Es el nombre del clúster de administrador. El nombre tiene una longitud máxima de 20 caracteres.

  • PROJECT_ID: Es el Google Cloud ID del proyecto.

  • REGION: Es la Google Cloud región en la que se ejecutan la API de GKE On-Prem (gkeonprem.googleapis.com), el servicio de flota (gkehub.googleapis.com) y el servicio de Connect (gkeconnect.googleapis.com). Especifica us-west1 o cualquier otra región admitida.

    El campo location corresponde a la marca --location en el comando gkectl register bootstrap.

  • DESCRIPTION: Es una descripción del clúster de administrador.

  • VERSION: Es la versión de Google Distributed Cloud para el clúster. La creación de un clúster con Terraform solo se admite en las versiones 1.28 y posteriores. La versión que especifiques aquí debe coincidir con la versión del paquete que especifiques en la --bundle-path marca en el comando gkectl register bootstrap. Para obtener una lista de versiones, consulta Versiones de Google Distributed Cloud.

  • IMAGE_TYPE: Es el tipo de imagen de SO que se ejecutará en los nodos del clúster de administrador. Especifica una de las siguientes opciones: "ubuntu_containerd", "cos", "ubuntu_cgv2" o "cos_cgv2".

  • VCENTER_ADDRESS: la dirección de vCenter Server.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.credentials.address.

    • El campo vcenter.address corresponde a la marca --vcenter-address en el comando gkectl register bootstrap.

  • DATA_CENTER: Es el nombre de tu centro de datos de vCenter.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del vCenter.datacenter campo.

    • El campo vcenter.datacenter corresponde a la marca --vcenter-datacenter en el comando gkectl register bootstrap.

  • VCENTER_CLUSTER: Es el nombre de tu clúster de vCenter.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.cluster.

    • El campo vcenter.cluster corresponde a la marca --vcenter-cluster en el comando gkectl register bootstrap.

  • RESOURCE_POOL: Es el nombre o la ruta de acceso de tu grupo de recursos de vCenter.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.resourcePool.

    • El campo vcenter.resource_pool corresponde a la marca --vcenter-resource-pool en el comando gkectl register bootstrap.

  • DATASTORE: Es el nombre de tu almacén de datos de vCenter. El valor que especifiques debe ser un nombre, no una ruta de acceso. Si necesitas ingresar una ruta de acceso, agrega el siguiente campo: folder = "FOLDER"

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.datastore.

    • El campo vcenter.datastore corresponde a la marca --vcenter-datastore en el comando gkectl register bootstrap.

    Si deseas usar una política de almacenamiento de VM para los nodos del clúster, quita el campo vcenter.datastore y agrega vcenter.storage_policy_name en su lugar. Además, agrega la marca --vcenter-storage-policy al comando gkectl register bootstrap. Debes especificar un valor para vcenter.datastore o vcenter.storage_policy_name, pero no para ambos.

  • FOLDER: Es el nombre de la carpeta de vCenter en la que se ubicarán las VMs del clúster. Si no usas una carpeta, quita este campo.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.folder.

    • El campo vcenter.folder corresponde a la marca --vcenter-folder en el comando gkectl register bootstrap.

  • CA_CERT_DATA: Es el certificado de la AC de vCenter en formato PEM, pero con todos los saltos de línea reemplazados por la cadena \n.

    1. Ejecuta el siguiente comando para reemplazar los saltos de línea por \n:

      awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCAL
      

      Reemplaza CA_CERT_PATH_LOCAL por la ruta de acceso al certificado de la AC raíz de tu vCenter Server. Si usaste gkeadm para crear tu estación de trabajo de administrador, puedes usar el valor del campo caCertPath en el archivo de configuración de la estación de trabajo de administrador, que es la ruta de acceso en tu computadora local. gkeadm copió el archivo de certificado de la AC en tu estación de trabajo de administrador. Debes especificar la ruta de acceso de la estación de trabajo de administrador en la marca --vcenter-ca-cert-path en el comando gkectl register bootstrap.

    2. Copia el resultado del comando anterior y pégalo en la variable de marcador de posición CA_CERT_DATA.

  • NETWORK: Es el nombre de tu red de vCenter.

    • Archivo de configuración de la estación de trabajo de administrador: Usa el valor del campo vCenter.network.

    • El campo network_config.vcenter_network corresponde a la marca --vcenter-network en el comando gkectl register bootstrap.

  • GATEWAY: Es la dirección IP de la puerta de enlace predeterminada para la subred que tiene los nodos del clúster del plano de control.

  • NETMASK: Es la máscara de red para la subred que tiene los nodos del clúster del plano de control.

  • DNS_SERVERS: Es la dirección IP del servidor DNS.

  • NTP_SERVERS: Es la dirección IP del servidor de hora (NTP).

  • Ingresa las direcciones IP y, de forma opcional, el nombre de host para los tres nodos del plano de control en la sección control_plane_ip_block.ips. Si no ingresas un nombre de host, quita los campos hostname de la configuración.

  • NUM_CPUS : Es la cantidad de vCPUs para cada nodo del plano de control en el clúster de administrador. Debe ser un mínimo de 4.

  • MEMORY: Es la cantidad de mebibytes de memoria para cada nodo del plano de control en el clúster de administrador. Debe ser un mínimo de 8192, pero recomendamos 16384.

  • CONTROL_PLANE_VIP: Es la dirección IP que decidiste configurar en el balanceador de cargas para el servidor de la API de Kubernetes del clúster de administrador.

Opcional: Configura un registro privado

De forma predeterminada, durante la creación o actualización del clúster, Google Distributed Cloud extrae imágenes del sistema de gcr.io/gke-on-prem-release con la cuenta de servicio de acceso a componentes. De forma opcional, puedes proporcionar tu propio servidor de registro de contenedores para que las imágenes del sistema se extraigan de tu servidor de registro privado.

Para configurar un registro privado, haz lo siguiente:

  1. Agrega lo siguiente al archivo de configuración del clúster de administrador:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Reemplaza lo siguiente:

    • ADDRESS: Es la dirección IP o FQDN (nombre de dominio completamente calificado) de la máquina que ejecuta tu registro privado.

    • CA_CERT: Son los datos del certificado de la AC de la clave pública, pero con todos los saltos de línea reemplazados por la cadena \n.

    1. Ejecuta el siguiente comando para reemplazar los saltos de línea por \n:

      awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH
      

      Reemplaza PUBLIC_KEY_PATH por la ruta de acceso a la clave pública.

    2. Copia el resultado del comando anterior y pégalo en la variable de marcador de posición CA_CERT.

  2. Si la red está detrás de un servidor proxy, agrega lo siguiente:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Reemplaza lo siguiente:

    • PROXY_SERVER_ADDRESS: Es la dirección HTTP de tu servidor proxy. Incluye el número de puerto incluso si es el mismo que el puerto predeterminado del esquema.

    • BYPASS_LIST: Es una lista separada por comas de direcciones IP, rangos de direcciones IP, nombres de host y nombres de dominio que no deben pasar por el servidor proxy.

    Ejemplo:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Cuando Google Distributed Cloud envía una solicitud a una de estas direcciones, hosts o dominios, la solicitud omite el servidor proxy y se envía directamente al destino.

Para obtener más información sobre el uso de un registro privado, incluidas las diferencias entre los clústeres normales y los clústeres avanzados, consulta Configura un registro de contenedores privado.

Verifica el archivo de configuración y el plan

En el directorio donde se encuentra main.tf, ejecuta los siguientes comandos:

  1. Inicializa Terraform mediante este comando:

    terraform init
    

    Terraform instala las bibliotecas necesarias, como el Google Cloud proveedor. Corrige los errores en maint.tf si es necesario.

  2. Crea el plan de Terraform:

    terraform plan -out tfplan
    

    Revisa la configuración y realiza cambios si es necesario.

Antes de aplicar el plan, primero debes crear el clúster de arranque como se describe en la siguiente sección.

Crea el clúster de arranque

Cuando ejecutas el comando gkectl register bootstrap, se te solicita el nombre de usuario y la contraseña de la cuenta de vCenter. Asegúrate de tener las credenciales disponibles. Si usaste gkeadm para crear la estación de trabajo de administrador, el nombre de usuario y la contraseña se encuentran en el archivo credential.yaml.

  1. Accede a tu estación de trabajo de administrador con SSH.

  2. Autentica con Google Cloud CLI

    gcloud auth login
    
  3. Ejecuta el siguiente comando para crear el clúster de arranque. Muchos de los valores de las marcas son los mismos que en los campos main.tf. Sin embargo, ten en cuenta que el comando toma valores adicionales que debes especificar en las variables de marcador de posición proporcionadas.

    gkectl register bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --vcenter-address=VCENTER_ADDRESS \
        --vcenter-datacenter=DATA_CENTER \
        --vcenter-cluster=VCENTER_CLUSTER \
        --vcenter-resource-pool=RESOURCE_POOL \
        --vcenter-datastore=DATASTORE \
        --vcenter-network=NETWORK \
        --vcenter-ca-cert-path=CA_CERT_PATH \
        --bundle-path=BUNDLE_PATH \
        --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
        --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
        --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \
        --admin-kubeconfig-out=KUBECONFIG_NAME
    

    Reemplaza lo siguiente por las rutas de acceso de la estación de trabajo de administrador:

    • CA_CERT_PATH: Es la ruta de acceso al certificado de la AC raíz de vCenter Server.
    • BUNDLE_PATH: Es la ruta de acceso al archivo del paquete. Si usaste gkeadm para crear la estación de trabajo de administrador, el archivo del paquete se encuentra en /var/lib/gke/bundles/. El nombre del archivo depende de la versión de Google Distributed Cloud, por ejemplo, gke-onprem-vsphere-1.31.0-gke.889-full.tgz.
    • COMPONENT_ACCESS_SA_PATH: Es la ruta de acceso al archivo de claves de la cuenta de servicio de acceso a componentes.
    • CONNECT_REGISTER_SA_PATH: Es la ruta de acceso al archivo de claves de la cuenta de servicio de registro de conexión.
    • LOG_MON_SA_PATH: Es la ruta de acceso al archivo de claves de la cuenta de servicio de supervisión de registros.
    • CLOUD_AUDIT_SA_PATH: Es la ruta de acceso a la cuenta de servicio de registro de auditoría. Si no creaste una cuenta de servicio de registro de auditoría, especifica la ruta de acceso al archivo de claves de la cuenta de servicio de supervisión de registros.
    • KUBECONFIG_NAME: Es el nombre del archivo kubeconfig que crea el comando gkectl register bootstrap. Si no especificas esta marca, el comando crea el archivo con el nombre kubeconfig en el directorio de trabajo actual. Si hay un archivo existente llamado kubeconfig, el comando lo reemplaza.

    Modifica el comando según sea necesario para las siguientes marcas:

    • Si especificaste una carpeta en main.tf, agrega la siguiente marca: --vcenter-folder=FOLDER
    • Si especificaste una política de almacenamiento de VM en main.tf, quita --vcenter-datastore y agrega la siguiente marca: --vcenter-storage-policy-name=STORAGE_POLICY_NAME
    • Si tu estación de trabajo de administrador estará en una red que se encuentra detrás de un servidor proxy, agrega las siguientes marcas:

      • --proxy-url=PROXY_URL
      • --no-proxy=NO_PROXY

      Reemplaza lo siguiente:

      • PROXY_URL: Es la URL del servidor proxy.
      • NO_PROXY: Es el valor de los dominios y las direcciones IP excluidos del proxy, separados por comas.

    Si agregas una marca, asegúrate de agregar el carácter de barra invertida de continuación de la línea de comandos (\).

  4. Cuando se te solicite, ingresa (o copia y pega) el nombre de usuario de vCenter. El nombre de usuario no se muestra en la pantalla.

  5. Cuando se te solicite, ingresa (o copia y pega) la contraseña de vCenter. La contraseña no se muestra en la pantalla.

El comando ejecuta varias validaciones. Después de que gkectl cree correctamente el clúster de arranque, verás un resultado similar al siguiente, que se trunca para facilitar la lectura:

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

El proceso continúa ejecutándose hasta que se crea el clúster de administrador.

Si sales del comando gkectl register bootstrap antes de que se cree el clúster de administrador, la creación fallará y deberás borrar el clúster de arranque con el siguiente comando:

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

Crea el clúster de administrador:

Aplica el plan de Terraform para crear el clúster de administrador:

terraform apply "tfplan"

La creación del clúster de administrador toma 15 minutos o más. Puedes ver el clúster en la Google Cloud consola en la página Clústeres de GKE.

Conéctate al clúster de administrador

El comando gkectl register bootstrap crea un archivo kubeconfig para el clúster de administrador en tu estación de trabajo de administrador. Si no especificaste la --admin-kubeconfig-out marca cuando ejecutaste gkectl register bootstrap, el comando crea un archivo kubeconfig llamado kubeconfig en el directorio en el que ejecutaste el comando.

Debes restringir el acceso a este kubeconfig porque contiene credenciales de autenticación para el clúster.

Además, puedes ejecutar comandos kubectl de solo lectura a través de la puerta de enlace de conexión.

  1. Ejecuta el siguiente comando en una computadora que tenga gcloud CLI para obtener una entrada kubeconfig que pueda acceder al clúster a través de la puerta de enlace de conexión.

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID
    

    El resultado es similar a este:

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. Ahora puedes ejecutar comandos kubectl de solo lectura a través de la puerta de enlace de conexión, como los siguientes:

    kubectl get pods -A
    

    Si necesitas privilegios administrativos completos para el clúster de administrador, consulta Configura la puerta de enlace de conexión.