Configurar seus clusters para usar o OpenStack

Os clusters do Anthos em bare metal são compatíveis com o provedor de nuvem do OpenStack Kubernetes. Use esse recurso para provisionar automaticamente os recursos de balanceamento de carga como serviço (LBaaS, na sigla em inglês) do OpenStack. Eles podem substituir os recursos do MetaLBC para expor facilmente os serviços executados nos clusters do Anthos em bare metal para outros locatários do OpenStack ou fora da rede do OpenStack.

Antes de começar

Decida os clusters do Anthos que precisam usar recursos de LBaaS do OpenStack.

Verifique se você tem acesso às máquinas que está tentando configurar.

Saiba mais sobre como executar o cloud-controller-manager na documentação do Kubernetes.

Alterar o arquivo de configuração dos clusters

O provedor de nuvem do OpenStack Kubernetes requer que kubelet seja executado em todos os nós com o seguinte argumento:

cloud-provider: "external"

Para garantir que seus clusters do Anthos atendam facilmente a esse requisito, adicione a anotação baremetal.cluster.gke.io/external-cloud-provider: "true" ao arquivo de configuração dos clusters na seção de metadados antes de inicializá-los.

A entrada no seu arquivo de configuração deve ser como esta:

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

Alguns provedores de nuvem em outras plataformas de nuvem exigem um formato especial para providerID. Os clusters do Anthos em Bare Metal geram um providerID para cada máquina. O formato é como baremetal://MACHINE_ADDRESS. Se quiser ter um providerID diferente, especifique um para cada nó junto com o endereço IP. A configuração terá esta aparência:

 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

Depois de editar o arquivo de configuração, use o seguinte comando para inicializar o cluster:

bmctl create cluster -c cluster1

Agora, todos os nós em cluster1 são executados com o argumento obrigatório: cloud-provider: "external"

Todos os nós também têm os seguintes campos adicionados aos arquivos de configuração:

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

Esses campos são removidos depois que você inicializa o provedor de nuvem nesse cluster.

kubelet será executado com o providerID fornecido se você tiver especificado um para este nó.