En Google Distributed Cloud, tus cargas de trabajo se ejecutan en uno o más clústeres de usuario. En esta página, se muestra cómo crear un clúster de usuario para usarlo en los dominios de topología de Google Distributed Cloud. Se requiere la versión 1.31 o una posterior de Google Distributed Cloud para usar dominios de topología.
Para configurar un dominio de topología, debes habilitar el clúster avanzado. Ten en cuenta las siguientes limitaciones de la vista previa del clúster avanzado:
- Puedes habilitar el clúster avanzado en el momento de la creación del clúster solo para clústeres nuevos de 1.31.
- Una vez que se habilite el clúster avanzado, no podrás actualizarlo a la versión 1.32. Habilita solo el clúster avanzado en un entorno de prueba.
Esta página está destinada a administradores, arquitectos y operadores que configuran, supervisan y administran la infraestructura tecnológica. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Tareas y roles comunes de los usuarios de GKE Enterprise.
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. La estación de trabajo de administrador tiene las herramientas que necesitas para crear el clúster de usuario. Realiza todos los pasos de este documento en la estación de trabajo de administrador.
Si aún no lo hiciste, configura tus recursos de Google Cloud como se describe en estos documentos:
Antes de crear un clúster de usuario, debes tener un clúster de administrador para administrarlo. Si aún no lo hiciste, crea una estación de trabajo de administrador y un clúster de administrador para usarlo con dominios de topología.
Determina la versión del clúster de usuarios que deseas instalar. Cuando creas un clúster de usuario, por lo general, instalas la versión que coincide con la del clúster de administrador. Si deseas instalar una versión diferente en un clúster de usuario, consulta Reglas de versión.
Revisa el documento de planificación de direcciones IP y asegúrate de tener suficientes direcciones IP disponibles.
Configura el balanceador de cargas para el balanceo de cargas manual. Debes configurar el balanceador de cargas antes de crear el clúster de usuario.
Piensa en la cantidad de grupos de nodos que necesitas y en qué sistema operativo deseas ejecutar cada uno de ellos.
Recopila la información que necesitas para acceder a cada instancia de vCenter Server. Necesitas esta información para completar las secciones
Secret
yVSphereInfraConfig.credentials.vCenters
del archivo de configuración de la infraestructura de vSphere. Consulta la siguiente información para obtener la información necesaria:
Descripción general del procedimiento
Los siguientes pasos principales se utilizan para usar gkectl
y crear un clúster de usuarios:
- Completa el archivo de configuración del clúster de usuario
- Especifica los detalles de tu clúster nuevo en el archivo de configuración del clúster de usuario.
- Completa el archivo de bloqueo de IP
- Especifica las direcciones IP de la puerta de enlace, la máscara de red, los nodos del plano de control y, de manera opcional, los nodos trabajadores en un archivo de bloque de IP.
- Crea un clúster de usuario
- Ejecuta
gkectl create cluster
para crear un clúster como se especifica en los archivos de configuración.
- Verifica que el clúster de usuario esté en ejecución
- Usa
kubectl
para ver los nodos del clúster.
Al final de este procedimiento, tendrás un clúster de usuario en ejecución en el que podrás implementar las cargas de trabajo.
Completa el archivo de configuración del clúster de usuario
Si usaste gkeadm
para crear tu estación de trabajo de administrador, gkeadm
generó una plantilla para tu archivo de configuración de clústeres de usuarios llamada user-cluster.yaml
.
Además, gkeadm
completó algunos de los campos por ti.
Si no usaste gkeadm
para crear tu estación de trabajo de administrador, puedes usar gkectl
para generar una plantilla para el archivo de configuración de clústeres de usuarios.
Si deseas generar una plantilla para el archivo de configuración de clústeres de usuarios, haz lo siguiente:
gkectl create-config cluster --config=OUTPUT_FILENAME --gke-on-prem-version=VERSION
Reemplaza lo siguiente:
OUTPUT_FILENAME
: una ruta de acceso que elijas para la plantilla generada. Si omites esta marca, gkectl
asigna un nombre al archivo user-cluster.yaml
y lo coloca en el directorio actual.
VERSION
: El número de versión deseado. Por ejemplo: gkectl create-config cluster --gke-on-prem-version=1.31.0-gke.889
Familiarízate con el archivo de configuración mediante el análisis del documento del archivo de configuración del clúster de usuario. Se recomienda mantener este documento abierto en una pestaña o ventana separada, ya que harás referencia a él a medida que completes los siguientes pasos.
name
Configura el campo name
con el nombre que desees para el clúster de usuarios.
gkeOnPremVersion
Ya se completó este campo. Especifica la versión de Google Distributed Cloud. Por ejemplo, 1.31.0-gke.889
.
enableAdvancedCluster
Establece enableAdvancedCluster
como true
.
enableControlplaneV2
Controlplane V2 es obligatorio para todos los clústeres de usuarios de la versión 1.30 y versiones posteriores. Configura enableControlplaneV2
como true
.
Cuando Controlplane V2 está habilitado, el plano de control del clúster de usuario se ejecuta en los nodos del propio clúster de usuario.
enableDataplaneV2
Establece enableDataplaneV2 en true
.
vCenter
Quita toda esta sección. En su lugar, configuras la información de vCenter en el archivo de configuración de la infraestructura de vSphere por dominio de topología.
network
Quita lo siguiente del archivo de configuración:
- Toda la sección
network.hostConfig
. Esta información se configura en el archivo de configuración de la infraestructura de vSphere por dominio de topología. - El campo
network.vCenter.networkName
Este campo se configura en el archivo de configuración de la infraestructura de vSphere por dominio de topología. - Toda la sección
network.controlPlaneIPBlock
. Las direcciones IP de la puerta de enlace, la máscara de red y los nodos del plano de control se configuran en un archivo de bloque de IP.
- Toda la sección
Establece
network.ipMode.ipBlockFilePath
en la ruta de acceso al archivo de bloque de IP.Decide cómo quieres que los nodos trabajadores obtengan sus direcciones IP. Las opciones son las siguientes:
Desde un servidor DHCP que configures con anticipación. Configura
network.ipMode.type
como"dhcp"
.De una lista de direcciones IP estáticas que proporciones en el archivo de bloqueo de IP. Establece
network.ipMode.type
en"static"
.
Los nodos del plano de control de tu clúster de usuarios deben obtener sus direcciones IP de una lista de direcciones estáticas que proporciones en el archivo de bloque de IP. Este es el caso incluso si tus nodos trabajadores obtienen sus direcciones de un servidor DHCP.
Sin importar si dependes de un servidor DHCP o especificas una lista de direcciones IP estáticas, debes tener suficientes direcciones IP disponibles para el clúster de usuario. Para obtener una explicación de cuántas direcciones IP necesitas, consulta Planifica tus direcciones IP.
network.podCIDR y network.serviceCIDR tienen valores prepropagados que puedes dejar sin modificar, a menos que entren en conflicto con direcciones que ya se usan en tu red. Kubernetes usa estos rangos para asignar direcciones IP a Pods y objetos Service en tu clúster.
loadBalancer
Reserva una VIP para el servidor de la API de Kubernetes del clúster de usuario. Proporciona tu VIP como el valor de
loadBalancer.vips.controlPlaneVIP
.Reserva otro VIP para el servicio de entrada de tu clúster de usuario. Proporciona tu VIP como el valor de
loadBalancer.vips.ingressVIP
.Configura
loadBalancer.kind
como"ManualLB"
y completa la secciónmanualLB
. Para obtener más información, consulta Balanceo de cargas manual.
advancedNetworking
Si planeas crear una puerta de enlace NAT de salida, configura advancedNetworking como true
.
multipleNetworkInterfaces
Configura multipleNetworkInterfaces en false
. Las interfaces de red múltiples para Pods no son compatibles con los dominios de topología.
storage
Establece storage.vSphereCSIDisabled como true
para inhabilitar la implementación de los componentes de CSI de vSphere.
masterNode
Si deseas especificar la CPU y la memoria para los nodos del plano de control del clúster de usuario, completa los campos
cpus
ymemoryMB
en la secciónmasterNode
.Solo se admiten clústeres de alta disponibilidad (HA). Establece el campo
replicas
como3
para especificar que el clúster tendrá tres nodos de plano de control.Para habilitar el cambio de tamaño automático de los nodos del plano de control, establece
autoResize.enabled
entrue
.Quita toda la sección
masterNode.vsphere
.Completa el campo
masterNode.topologyDomains
con el nombre del dominio de topología en el que deseas que se encuentren los nodos del plano de control.
nodePools
Un grupo de nodos es un conjunto de nodos trabajadores dentro de un clúster que tienen la misma configuración. Por ejemplo, es posible que desees configurar un dominio de topología independiente para cada grupo de nodos. Debes especificar al menos un grupo de nodos mediante la sección nodePools
.
Para cada grupo de nodos que especifiques, haz lo siguiente:
Completa el campo
nodePools[i].topologyDomains
con el nombre del dominio de topología en el que deseas que se encuentre el grupo de nodos.Quita todos los campos de la sección
nodePools[i].vsphere
, exceptonodePools[i].vsphere.tags
. Especificas esta información en el archivo de configuración de la infraestructura de vSphere por dominio de topología.
# advanced-cluster-change #
Establece nodePools[i].osImageType
como ubuntu_cgroupv2
o
ubuntu_containerd
.
Para obtener información más general sobre los grupos de nodos, consulta Grupos de nodos y Crea y administra grupos de nodos.
antiAffinityGroups
Configura antiAffinityGroups.enabled
como false
.
Las reglas de antiafinidad de Distributed Resource Scheduler (DRS) no son compatibles con los dominios de topología.
stackdriver
Completa la sección
stackdriver
para habilitar
Cloud Logging y Cloud Monitoring
para tu clúster.
Ten en cuenta los siguientes requisitos:
El ID en
stackdriver.projectID
debe ser el mismo que el degkeConnect.projectID
ycloudAuditLogging.projectID
.La región Google Cloud configurada en
stackdriver.clusterLocation
debe ser la misma que la región configurada encloudAuditLogging.clusterLocation
ygkeConnect.location
. Además, sigkeOnPremAPI.enabled
estrue
, se debe configurar la misma región engkeOnPremAPI.location
.
Si los IDs y las regiones de los proyectos no son los mismos, la creación del clúster fallará.
gkeConnect
El clúster de usuario debe estar registrado en una flota de Google Cloud .
Completa la sección gkeConnect
para especificar un proyecto host de flota y una cuenta de servicio asociada. El ID en gkeConnect.projectID
debe ser el mismo que el ID establecido en stackdriver.projectID
y cloudAuditLogging.projectID
. Si los IDs de proyecto no son los mismos, la creación del clúster fallará.
De forma opcional, puedes especificar una región en la que se ejecutan los servicios de la flota y de conexión en gkeConnect.location
. Si no incluyes este campo, el clúster usará las instancias globales de estos servicios.
Si incluyes gkeConnect.location
en tu archivo de configuración, la región que especifiques debe ser la misma que la región configurada en cloudAuditLogging.clusterLocation
, stackdriver.clusterLocation
y gkeOnPremAPI.location
. Si las regiones no son las mismas, la creación del clúster fallará.
gkeOnPremAPI
En esta sección, se describe cómo se inscriben los clústeres en la API de GKE On-Prem.
La herramienta de línea de comandos de gkectl
es la única herramienta de administración del ciclo de vida del clúster disponible para los clústeres que usan dominios de topología. Aunque la consola de Google Cloud , Google Cloud CLI y Terraform no son compatibles con clústeres que usan dominios de topología, puedes inscribir el clúster en la API de GKE On-Prem de forma opcional cuando se crea.
Si la API de GKE On-Prem está habilitada en tu proyecto deGoogle Cloud , todos los clústeres del proyecto se inscriben en la API de GKE On-Prem automáticamente en la región configurada en stackdriver.clusterLocation
. La región gkeOnPremAPI.location
debe ser la misma que la región especificada en cloudAuditLogging.clusterLocation
, gkeConnect.location
y stackdriver.clusterLocation
.
Si deseas inscribir todos los clústeres del proyecto en la API de GKE On-Prem, asegúrate de seguir los pasos que se indican en Antes de comenzar para activar y usar la API de GKE On-Prem en el proyecto.
Si no deseas inscribir el clúster en la API de GKE On-Prem, incluye esta sección y configura
gkeOnPremAPI.enabled
comofalse
. Si no deseas inscribir ningún clúster en el proyecto, inhabilitagkeonprem.googleapis.com
(el nombre del servicio para la API de GKE On-Prem) en el proyecto. Para obtener instrucciones, consulta Inhabilita servicios.
cloudAuditLogging
Si deseas integrar los registros de auditoría del servidor de la API de Kubernetes del clúster a los Registros de auditoría de Cloud, completa la sección cloudAuditLogging
.
Ten en cuenta los siguientes requisitos:
# advanced-cluster-change #
Establece cloudAuditLogging.serviceAccountKeyPath
en la misma ruta que stackdriver.serviceAccountKeyPath
.
El ID en
cloudAuditLogging.projectID
debe ser el mismo que el degkeConnect.projectID
ystackdriver.projectID
.La región en
cloudAuditLogging.clusterLocation
debe ser la misma que la región configurada engkeConnect.location
(si el campo se incluye en el archivo de configuración) ystackdriver.clusterLocation
. Además, sigkeOnPremAPI.enabled
estrue
, se debe configurar la misma región engkeOnPremAPI.location
.
Si los IDs y las regiones de los proyectos no son los mismos, la creación del clúster fallará.
preparedSecrets
Quita el campo preparedSecrets
.
Las credenciales preparadas no se admiten cuando se habilitan los dominios de topología.
Ejemplo de archivos de configuración completados
Este es un ejemplo de un archivo de bloque de IP y un archivo de configuración de clúster de usuario.
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 hostname: worker-vm-1 - ip: 172.16.21.3 hostname: worker-vm-2 - ip: 172.16.21.4 hostname: worker-vm-3 - ip: 172.16.21.5 hostname: worker-vm-4 - netmask: 255.255.255.0 gateway: 100.115.223.254 ips: - ip: 100.115.222.205 hostname: cp-1 isControlPlane: true - ip: 100.115.222.206 hostname: cp-2 isControlPlane: true - ip: 100.115.222.207 hostname: cp-3 isControlPlane: true
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.31.0-gke.889 enableAdvancedCluster: true enableControlplaneV2: true enableDataplaneV2: true network: ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 loadBalancer: vips: controlPlaneVIP: "100.115.222.200" ingressVIP: "172.16.21.30" kind: "ManualLB" manualLB: ingressHTTPNodePort: 32527 ingressHTTPSNodePort: 30139 controlPlaneNodePort: 30968 masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool1" cpus: 4 memoryMB: 8192 replicas: 3 topologyDomains: - "domain1" antiAffinityGroups: enabled: false gkeConnect: projectID: "my-project-123" location: "us-central1" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" autoRepair: enabled: true
Estos son los puntos importantes que debes comprender en el ejemplo anterior:
El campo
nodePools.replicas
está configurado como3
, lo que significa que hay tres nodos de trabajo en"worker-node-pool"
. Todos los nodos de trabajo usan direcciones IP estáticas porquenetwork.ipMode.type
está configurado en"static"
.Las direcciones IP de los nodos del plano de control y de los nodos trabajadores se especifican en un archivo de bloque de IP. El archivo de bloque de IP tiene cuatro direcciones para los nodos trabajadores, aunque solo hay tres. La dirección IP del nodo trabajador adicional es necesaria durante las actualizaciones y la reparación automática del clúster. Las direcciones IP de los nodos del plano de control tienen la marca
isControlPlane: true
.Los clústeres avanzados, ControlPlane V2 y Dataplane V2 están habilitados.
El campo
masterNode.replicas
está configurado como3
, por lo que el clúster tendrá un plano de control de alta disponibilidad.La VIP del plano de control está en la misma VLAN que los nodos del plano de control, y la VIP de entrada está en la misma VLAN que los nodos de trabajo.
Completa el archivo de bloqueo de IP
Copia la plantilla del archivo de bloque de IP en el archivo del directorio que especificaste en el campo network.ipMode.ipBlockFilePath
del archivo de configuración del clúster de usuario. Crea archivos de bloque de IP separados para el clúster de administrador y para cada clúster de usuario.
Agrega las direcciones IP de la puerta de enlace, la máscara de red y los nodos del plano de control al archivo de bloqueo de IP. Para cada dirección IP del nodo del plano de control, agrega isControlPlane: true
como se muestra en el ejemplo anterior. Si deseas un clúster de usuario con alta disponibilidad (HA), especifica tres direcciones IP. De lo contrario, especifica una dirección IP. La cantidad de direcciones IP que especifiques para los nodos del plano de control debe coincidir con la cantidad que aparece en el campo masterNode.replicas
del archivo de configuración del clúster de usuarios.
Si network.ipMode.type
está configurado como "static"
, agrega las direcciones IP de los
nodos de trabajo al archivo de bloque de IP. Asegúrate de especificar una dirección IP adicional para usar durante las actualizaciones y la reparación automática del clúster.
Cada dirección de puerta de enlace en el archivo de bloqueo de IP debe coincidir con la dirección especificada en un campo topologyDomains[i].network.gateway
del archivo de configuración de la infraestructura de vSphere. Para obtener más información, consulta el ejemplo de dominios de topología.
Crea un clúster de usuario
Ejecuta el siguiente comando para crear un clúster de usuario:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Ubica el archivo kubeconfig del clúster de usuario
El comando gkectl create cluster
crea un archivo kubeconfig llamado USER_CLUSTER_NAME-kubeconfig
en el directorio actual. Necesitarás este archivo kubeconfig más adelante para interactuar con tu clúster de usuario.
El archivo kubeconfig contiene el nombre de tu clúster de usuario. Para ver el nombre del clúster, puedes ejecutar lo siguiente:
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
En el resultado, se muestra el nombre del clúster. Por ejemplo:
NAME my-user-cluster
Si lo deseas, puedes cambiar el nombre y la ubicación de tu archivo kubeconfig.
Verifica que el clúster de usuario esté en ejecución
Verifica que el clúster de usuario esté en ejecución:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
Reemplaza USER_CLUSTER_KUBECONFIG con la ruta de tu archivo kubeconfig del clúster de usuario.
En el resultado, se muestran los nodos del clúster de usuario. Por ejemplo:
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14s
Configura tu PodTemplate
La etiqueta de topología se propaga a las etiquetas de los nodos en el dominio de topología.
A menos que la configuración de tu dominio de topología haya usado la restricción predeterminada, "topology.kubernetes.io/zone"
como la clave de topología, debes configurar la clave de topología en la plantilla de pod de tu Deployment, StatefulSet o ReplicaSet, según corresponda.
Por ejemplo, supongamos que definiste la clave en la etiqueta de topología como "topology.examplepetstore.com/zone"
. En PodTemplate
, especificas la clave
como el valor del campo topologySpreadConstraints.topologyKey
. Esto permite que el programador de Kubernetes distribuya Pods en el dominio de topología para garantizar una alta disponibilidad y evitar la sobreconcentración en una sola área en caso de falla.
Soluciona problemas
Consulta Soluciona problemas de creación y actualización de clústeres.