Configurar seus clusters para usar o OpenStack

A execução do software do Distributed Cloud somente para Bare Metal no OpenStack permite integrar seus clusters com a infraestrutura como serviço (IaaS), o balanceamento de carga como serviço (LBaaS) e o armazenamento do OpenStack. Configurar os clusters para um provedor de nuvem externo delega o processo de inicialização do nó ao OpenStack.

É possível provisionar automaticamente recursos LBaaS do OpenStack em vez do MetalLB para expor serviços em execução nos clusters a outros locatários do OpenStack ou fora da rede do OpenStack. Para mais informações sobre os recursos e benefícios do OpenStack, consulte a documentação do OpenStack.

Este documento aborda apenas como configurar seu cluster para uso com o OpenStack. Os guias a seguir mostram um exemplo de implantação:

  • Implantar um cluster no OpenStack mostra um exemplo de implantação de um cluster híbrido em máquinas virtuais (VMs) do OpenStack. A implantação usa um script para simplificar a instalação. O guia também mostra uma maneira de ativar o balanceamento de carga como serviço (LBaaS).

  • Configurar o provedor de nuvem do OpenStack para Kubernetes mostra como instalar o provedor de nuvem do OpenStack em um cluster que foi implantado no OpenStack. O provedor de nuvem do OpenStack não precisa usar o software do Google Distributed Cloud com o OpenStack.

Antes de começar

  • Decida quais clusters precisam usar os recursos LBaaS do OpenStack.

    Depois de criar um cluster configurado para usar os recursos LBaaS do OpenStack, não é possível alterar a configuração para alternar para os recursos do MetalLB. Certifique-se de inicializar os clusters com a configuração de provedor de nuvem correta.

  • 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 do cluster

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 seu cluster atenda a esse requisito, adicione a anotação baremetal.cluster.gke.io/external-cloud-provider: "true" ao arquivo de configuração do cluster na seção de metadados antes de criar o cluster.

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: O Google Distributed Cloud gera um providerID com um formato como baremetal://MACHINE_ADDRESS para cada máquina de nó. Se quiser ter um providerID diferente, especifique um para cada nó junto com o endereço IP.

O exemplo de arquivo de configuração de cluster a seguir mostra como especificar providerID para os nós do cluster:

 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

Crie o cluster

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

bmctl create cluster -c cluster1

Para mais informações sobre como criar clusters, consulte Visão geral da criação de clusters.

Configuração de nós

Quando você cria um cluster configurado para o OpenStack, os nós do cluster têm as seguintes mudanças:

  • 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 taints adicionados aos arquivos de configuração:

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

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

  • kubelet é executado com o providerID especificado no arquivo de configuração do cluster.

A seguir