Configura tus clústeres para usar OpenStack

GKE en Bare Metal es compatible con el proveedor de Kubernetes Cloud de OpenStack. Usa esta función para aprovisionar de forma automática los recursos de balanceo de cargas como servicio (LBaaS) de OpenStack. Esos recursos pueden reemplazar los recursos de MetalLB para exponer con facilidad los servicios que se ejecutan en tus clústeres de Anthos en equipos físicos a otros usuarios de OpenStack o fuera de la red de OpenStack.

Antes de comenzar

Decide cuáles son los clústeres de Anthos que necesitan usar los recursos de LBaaS de OpenStack.

Asegúrate de tener acceso a las máquinas que intentas configurar.

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

Cambia el archivo de configuración de tus clústeres

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

cloud-provider: "external"

Para asegurarte de que los clústeres de Anthos cumplan con este requisito fácilmente, agrega la anotación baremetal.cluster.gke.io/external-cloud-provider: "true" al archivo de configuración de los clústeres en la sección de metadatos antes de inicializarlos.

La entrada en el archivo de configuración debería verse como el ejemplo siguiente:

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 en otras plataformas de nube requieren un formato especial para providerID; GKE en Bare Metal generará un providerID para cada máquina. El formato es como baremetal://MACHINE_ADDRESS. Si quieres tener un providerID diferente, puedes especificar uno para cada nodo junto con la dirección IP. La configuración se verá de la siguiente manera:

 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-admin1
 spec:
   clusterName: admin1
   nodes:
   - address: 172.18.0.2
+    providerID: some-prefix3://unique-string3

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

bmctl create cluster -c cluster1

Ahora, todos los nodos de cluster1 se ejecutan con el argumento obligatorio: cloud-provider: "external"

Todos los nodos también tienen los siguientes campos agregados a sus archivos de configuración:

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

Estos campos se quitan después de inicializar el proveedor de servicios en la nube en este clúster.

kubelet se ejecutará con el providerID proporcionado si especificaste uno para este nodo.