Crear clústeres híbridos

En Google Distributed Cloud, los clústeres híbridos desempeñan el doble papel de clúster de administrador y de clúster de usuario. Ejecutan cargas de trabajo y, al mismo tiempo, gestionan otros clústeres y a sí mismos.

Los clústeres híbridos eliminan la necesidad de ejecutar un clúster de administrador independiente en escenarios con recursos limitados y pueden proporcionar una fiabilidad de alta disponibilidad. En un clúster híbrido de alta disponibilidad, si falla un nodo, otros ocuparán su lugar.

Los clústeres híbridos se diferencian de los clústeres independientes en que también pueden gestionar otros clústeres. Los clústeres independientes no pueden crear ni gestionar otros clústeres.

Sin embargo, al crear clústeres híbridos, hay un equilibrio entre la flexibilidad y la seguridad. Como los clústeres híbridos se gestionan solos, ejecutar cargas de trabajo en el mismo clúster aumenta el riesgo de que se expongan datos administrativos sensibles, como las claves SSH.

Puedes crear un clúster híbrido con un plano de control de alta disponibilidad (HA) mediante el comando bmctl. El comando bmctl se puede ejecutar en una estación de trabajo independiente o en uno de los nodos del clúster híbrido.

Requisitos previos

  • Se descarga la versión más reciente de bmctl (gs://anthos-baremetal-release/bmctl/1.33.100-gke.89/linux-amd64/bmctl) de Cloud Storage.
  • La estación de trabajo que ejecuta bmctl tiene conectividad de red con todos los nodos del clúster híbrido de destino.
  • La estación de trabajo que ejecuta bmctl tiene conectividad de red con el VIP del plano de control del clúster híbrido de destino.
  • La clave SSH utilizada para crear el clúster híbrido está disponible para el usuario root o hay acceso de usuario SUDO en todos los nodos del clúster híbrido de destino.
  • La cuenta de servicio de registro de Connect se ha configurado para usarla con Connect.

Consulta la guía de inicio rápido de Google Distributed Cloud para ver instrucciones detalladas sobre cómo crear un clúster híbrido.

Habilitar SELinux

Si quieres habilitar SELinux para proteger tus contenedores, debes asegurarte de que SELinux esté habilitado en modo Enforced en todas tus máquinas host. A partir de la versión 1.9.0 de Google Distributed Cloud, puedes habilitar o inhabilitar SELinux antes o después de crear o actualizar un clúster. SELinux está habilitado de forma predeterminada en Red Hat Enterprise Linux (RHEL). Si SELinux está inhabilitado en tus máquinas host o no lo tienes claro, consulta el artículo Protege tus contenedores mediante SELinux para obtener instrucciones sobre cómo habilitarlo.

Google Distributed Cloud solo admite SELinux en sistemas RHEL.

Inicia sesión en gcloud y crea un archivo de configuración de clúster

  1. Inicia sesión en gcloud CLI como usuario con gcloud auth application-default login:

    gcloud auth application-default login
    

    Para usar las funciones de habilitación automática de APIs y de creación de cuentas de servicio, que se describen en las siguientes secciones, debes tener el rol de propietario o editor de un proyecto.

    También puedes añadir los siguientes roles de gestión de identidades y accesos al usuario:

    • Administrador de cuentas de servicio
    • Administrador de claves de cuentas de servicio
    • Administrador de gestión de identidades y accesos de proyectos
    • Lector de Compute
    • Administrador del uso del servicio

    Si ya tienes una cuenta de servicio con esos roles, ejecuta el siguiente comando:

    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    

    Sustituye JSON_KEY_FILE por la ruta del archivo de clave JSON de tu cuenta de servicio.

  2. Obtén el ID de tu proyecto Google Cloud para usarlo al crear un clúster:

    export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

Crea el archivo de configuración del clúster con bmctl.

Una vez que hayas iniciado sesión en la CLI de gcloud y hayas configurado tu proyecto, puedes crear el archivo de configuración del clúster con el comando bmctl.

Para crear un archivo de configuración de clúster, sigue estos pasos:

  1. Ejecuta el siguiente comando para crear el archivo de configuración del clúster, todas las cuentas de servicio necesarias y todas las APIs obligatorias:

    bmctl create config -c CLUSTER_NAME</var> --enable-apis \
        --create-service-accounts --project-id=CLOUD_PROJECT_ID
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre del clúster que vas a crear.
    • CLOUD_PROJECT_ID: el ID de tu proyecto de Google Cloud .

    De forma predeterminada, el archivo de configuración se escribe en bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml.

    Si ya has habilitado las APIs y creado cuentas de servicio, puedes crear archivos de configuración sin habilitar las APIs ni crear cuentas de servicio. Tampoco es obligatorio usar la marca --project-id. Sin embargo, tendrás que especificar las credenciales en el archivo de configuración manualmente.

    Para obtener más información sobre las opciones de comandos, consulta create config.

Editar el archivo de configuración del clúster

Ahora que tienes un archivo de configuración de clúster, edítalo para hacer los siguientes cambios:

  1. Proporciona la clave privada SSH para acceder a los nodos del clúster híbrido:

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/hybrid cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. Registra tus clústeres en una flota. El ID de proyecto que has especificado en el comando bmctl create config se añade automáticamente al campo gkeConnect.projectID del archivo de configuración del clúster. Este proyecto se denomina proyecto del host de la flota.

    • Si has creado el archivo de configuración mediante las funciones de habilitación automática de APIs y de creación de cuentas de servicio, puedes saltarte este paso.
    • Si has creado el archivo de configuración sin usar las funciones de habilitación automática de la API y de creación de cuentas de servicio, haz referencia a las claves JSON de la cuenta de servicio descargada en los campos gkeConnectAgentServiceAccountKeyPath y gkeConnectRegisterServiceAccountKeyPath correspondientes del archivo de configuración del clúster.
  3. Cambia la configuración para especificar el tipo de clúster hybrid en lugar de admin:

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: hybrid
    
  4. Cambia la configuración para especificar un plano de control de alta disponibilidad con varios nodos. Quieres especificar un número impar de nodos para poder tener un quórum mayoritario para la alta disponibilidad:

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  5. Especifica la densidad de pods de los nodos del clúster:

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    En el caso de los clústeres híbridos, los valores permitidos para maxPodsPerNode son 32-250 para los clústeres de alta disponibilidad y 64-250 para los que no lo son. Si no se especifica, el valor predeterminado de maxPodsPerNode es 110. Una vez creado el clúster, no se puede actualizar este valor.

    La densidad de pods también está limitada por los recursos de IP disponibles de tu clúster. Para obtener más información, consulta Redes de pods.

Crea el clúster híbrido con la configuración del clúster

Usa el comando bmctl para crear el clúster:

bmctl create cluster -c CLUSTER_NAME

Sustituye CLUSTER_NAME por el nombre que usaste cuando creaste el archivo de configuración del clúster en la sección anterior.

A continuación, se muestra un ejemplo del comando para crear un clúster llamado hybrid1:

bmctl create cluster -c hybrid1

Ejemplos de configuraciones de clústeres híbridos

Para ver ejemplos de configuraciones de clústeres híbridos, consulta Clústeres híbridos en la sección Ejemplos de configuración de clústeres.