Configurar los clústeres para usar OpenStack

Google Distributed Cloud solo admite el uso de OpenStack como plataforma de nube privada. En esta guía se describe cómo configurar un clúster para que funcione con un proveedor de servicios en la nube externo. Si ejecutas una instalación de clústeres solo de software de Google Distributed Cloud en OpenStack, podrás usar los siguientes servicios de OpenStack:

  • Infraestructura como servicio (IaaS)

  • Balanceo de carga como servicio (LBaaS)

  • Almacenamiento

Para configurar un clúster de forma que funcione con OpenStack, debes hacer lo siguiente:

  • Cuando creas el clúster, añades una baremetal.cluster.gke.io/external-cloud-provider anotación

  • Esta anotación hace que Google Distributed Cloud añada una marca de kubelet. cloud-provider=external

  • A continuación, el kubelet añade taints node.cloudprovider.kubernetes.io/uninitialized:NoSchedule a los nodos del clúster.

Esta configuración permite que tanto tú como OpenStack seáis propietarios de los procesos de inicialización de nodos. Por ejemplo, puedes implementar software de Google Distributed Cloud en OpenStack para aprovisionar automáticamente recursos de balanceo de carga como servicio (LBaaS) de OpenStack o para usar otras funciones de OpenStack. Los recursos de LBaaS pueden sustituir a los recursos de MetalLB para exponer los servicios que se ejecutan en tus clústeres a otros arrendatarios de OpenStack o fuera de la red de OpenStack. Para obtener más información sobre las funciones y las ventajas de OpenStack, consulta la documentación de OpenStack.

En este documento solo se explica cómo configurar el clúster para usarlo con OpenStack. En las siguientes guías se explica un ejemplo de implementación:

  • En Desplegar un clúster en OpenStack, se explica cómo desplegar un clúster híbrido de ejemplo en máquinas virtuales de OpenStack. La implementación usa una secuencia de comandos para simplificar la instalación. En la guía también se muestra una forma de habilitar el balanceo de carga como servicio (LBaaS).

  • En el artículo Configurar el proveedor de servicios en la nube de OpenStack para Kubernetes, se explica cómo instalar el proveedor de servicios en la nube de OpenStack en un clúster que se ha desplegado en OpenStack. No es necesario que el proveedor de servicios en la nube de OpenStack use el software de Google Distributed Cloud con OpenStack.

Antes de empezar

  • Decide qué clústeres deben usar los recursos de LBaaS de OpenStack.

    Una vez que hayas creado un clúster configurado para usar recursos de LBaaS de OpenStack, no podrás cambiar la configuración para usar recursos de MetalLB. Asegúrate de inicializar los clústeres con la configuración correcta del proveedor de nube.

  • Asegúrate de que tienes acceso a los equipos que quieres configurar.

Consulta más información sobre cómo ejecutar cloud-controller-manager en la documentación de Kubernetes.

Cambiar el archivo de configuración del clúster

El proveedor de servicios en la nube de Kubernetes de OpenStack requiere que kubelet se ejecute en todos los nodos con el siguiente argumento:

cloud-provider: "external"

Para asegurarte de que tu clúster cumple este requisito, añade la anotación baremetal.cluster.gke.io/external-cloud-provider: "true" al archivo de configuración del clúster en la sección de metadatos antes de crear el clúster.

La entrada de tu archivo de configuración debería tener un formato similar al del siguiente ejemplo:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/external-cloud-provider: "true"
spec:
  ...

Algunos proveedores de servicios en la nube de otras plataformas requieren un formato especial para providerID. Google Distributed Cloud genera un providerID con un formato como baremetal://MACHINE_ADDRESS para cada máquina de nodo. Si quieres tener un providerID diferente, puedes especificar uno para cada nodo junto con la dirección IP.

En el siguiente archivo de configuración de clúster de ejemplo se muestra cómo especificar providerID para los nodos del clúster:

 apiVersion: baremetal.cluster.gke.io/v1
 kind: Cluster
 metadata:
   name: cluster1
   namespace: cluster-cluster1
 spec:
   clusterNetwork:
     pods:
       cidrBlocks:
       - 192.168.0.0/16
     services:
       cidrBlocks:
       - 10.96.0.0/20
   controlPlane:
     nodePoolSpec:
       nodes:
       - address: 10.200.0.1
+        providerID: some-prefix://unique-string
       - address: 10.200.0.2
+        providerID: some-prefix2://unique-string2
  ...

---
 apiVersion: baremetal.cluster.gke.io/v1
 kind: NodePool
 metadata:
   name: nodepool1
   namespace: cluster-cluster1
 spec:
   clusterName: cluster1
   nodes:
   - address: 172.18.0.2
+    providerID: some-prefix3://unique-string3

Crear un clúster

Después de editar el archivo de configuración, utiliza el siguiente comando para inicializar el clúster:

bmctl create cluster -c cluster1

Para obtener más información sobre cómo crear clústeres, consulta la descripción general de la creación de clústeres.

Configuración de nodos

Cuando creas un clúster configurado para OpenStack, los nodos del clúster tienen los siguientes cambios:

  • Todos los nodos de cluster1 se ejecutan con el argumento necesario: cloud-provider: "external".

  • Todos los nodos también tienen el siguiente taint añadido a sus archivos de configuración:

    taints:
    - effect: NoSchedule
      key: node.cloudprovider.kubernetes.io/uninitialized
      value: "true"
    

    Estos taints se eliminan después de inicializar tu proveedor de nube en este clúster.

  • kubelet se ejecuta con el providerID que hayas especificado en el archivo de configuración del clúster.

Siguientes pasos