Configurare i cluster per l'utilizzo di OpenStack

Cluster Anthos on bare metal supporta il provider OpenStack Kubernetes Cloud. Utilizza questa funzionalità per eseguire automaticamente il provisioning delle risorse LBaaS (Open Load Load Balancing as a Service). Queste risorse possono sostituire le risorse MetalLB per esporre facilmente i servizi in esecuzione sui tuoi cluster Anthos su Bare Metal ad altri tenant OpenStack o all'esterno della rete OpenStack.

Prima di iniziare

Decidi i cluster Anthos che devono utilizzare le risorse LBaaS di OpenStack.

Assicurati di avere accesso alle macchine che stai tentando di configurare.

Scopri di più sull'esecuzione di cloud-controller-manager nella documentazione di Kubernetes.

Modifica il file di configurazione dei tuoi cluster

Il cloud provider Kubernetes OpenStack richiede che kubelet venga eseguito su tutti i nodi con il seguente argomento:

cloud-provider: "external"

Per garantire che i tuoi cluster Anthos soddisfino facilmente questo requisito, aggiungi l'annotazione baremetal.cluster.gke.io/external-cloud-provider: "true" al file di configurazione dei tuoi cluster nella sezione dei metadati prima di inizializzarli.

La voce nel file di configurazione dovrebbe essere simile all'esempio seguente:

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

Alcuni provider cloud su altre piattaforme cloud richiedono un formato speciale per providerID. Cluster Anthos su Bare Metal genererà un providerID per ogni macchina. Il formato è baremetal://MACHINE_ADDRESS. Se vuoi avere un providerID diverso, puoi specificarne uno per ciascun nodo insieme all'indirizzo IP. La configurazione sarà simile a questa:

 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

Dopo aver modificato il file di configurazione, utilizza il comando seguente per inizializzare il cluster:

bmctl create cluster -c cluster1

Ora, tutti i nodi in cluster1 vengono eseguiti con l'argomento richiesto: cloud-provider: "external"

A tutti i nodi sono stati aggiunti anche i seguenti campi ai file di configurazione:

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

Questi campi vengono rimossi dopo aver inizializzato il cloud provider su questo cluster.

kubelet verrà eseguito con il providerID fornito se ne hai specificato uno per questo nodo.