将集群配置为使用 OpenStack

GKE on Bare Metal 支持 OpenStack Kubernetes Cloud Provider。使用此功能可自动将 OpenStack 负载平衡预配为 Service (LBaaS) 资源。这些资源可以替换 MetaLB 资源,以便将在 Anthos on Bare Metal 集群上运行的服务轻松公开给其他 OpenStack 租户或 OpenStack 网络外部。

准备工作

确定需要使用 OpenStack LBaaS 资源的 Anthos 集群。

确保您有权访问要配置的机器。

在 Kubernetes 文档中详细了解如何运行 cloud-controller-manager

更改集群的配置文件

OpenStack Kubernetes 云提供商要求 kubelet 在所有具有以下参数的节点上运行:

cloud-provider: "external"

为确保您的 Anthos 集群轻松满足此要求,请在初始化集群内之前将 baremetal.cluster.gke.io/external-cloud-provider: "true" 注解添加到集群配置文件中的元数据部分下。

配置文件中的条目应类似于如下示例:

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

其他云平台上的一些云服务提供商要求使用特殊的 providerID 格式,因此 GKE on Bare Metal 会为每台机器生成一个 providerID。格式为 baremetal://MACHINE_ADDRESS。如果您想要使用其他 providerID,则可以为每个节点单独进行指定,并指定一个 IP 地址。配置将如下所示:

 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

修改配置文件后,使用以下命令初始化集群:

bmctl create cluster -c cluster1

现在,cluster1 中的所有节点均使用所需的参数 cloud-provider: "external" 运行

所有节点的配置文件中都添加了以下字段:

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

在此集群中初始化云服务商后,这些字段会被移除。

kubelet 将使用您提供的 providerID 运行(如果您为此节点指定了该项)。