将集群配置为使用 OpenStack

Google Distributed Cloud 支持将 OpenStack 用作私有云平台。本指南介绍了如何配置 Google Distributed Cloud 集群以与外部云提供商搭配使用。在 OpenStack 上运行 Google Distributed Cloud 集群可让您使用以下 OpenStack 服务:

  • 基础架构即服务 (IaaS)

  • 负载均衡即服务 (LBaaS)

  • 存储

配置集群以使用 OpenStack 的步骤包括:

  • 创建集群时,请添加 baremetal.cluster.gke.io/external-cloud-provider 注解

  • 此注解会导致 Google Distributed Cloud 添加 kubelet 标志 cloud-provider=external

  • 然后,kubelet 将 node.cloudprovider.kubernetes.io/uninitialized:NoSchedule 污点添加到集群节点

此配置允许您和 OpenStack 拥有节点 init 进程。 例如,您可以在 OpenStack 上部署 Google Distributed Cloud,以自动预配 OpenStack 负载均衡即服务 (LBaaS) 资源或利用其他 OpenStack 功能。LBaaS 资源可以替换 MetalLB 资源,将 Google Distributed Cloud 集群上运行的 Service 公开给其他 OpenStack 租户或 OpenStack 网络外部。如需详细了解 OpenStack 的功能和优势,请参阅 OpenStack 文档

本文档仅介绍如何配置集群以与 OpenStack 搭配使用。以下指南将引导您完成部署示例:

  • 在 OpenStack 上部署 Google Distributed Cloud 集群介绍了在 OpenStack 虚拟机 (VM) 上部署 Google Distributed Cloud 混合集群的示例。该部署使用脚本来简化安装。本指南还介绍了一种启用负载均衡即服务 (LBaaS) 的方法。

  • 为 Kubernetes 配置 OpenStack Cloud Provider 介绍了如何在已部署在 OpenStack 上的 Google Distributed Cloud 集群上安装 OpenStack Cloud Provider。将 Google Distributed Cloud 与 OpenStack 搭配使用时,并非必须使用 OpenStack 云服务商。

准备工作

  • 决定哪些 GKE 集群需要使用 OpenStack LBaaS 资源。

    创建配置为使用 OpenStack LBaaS 资源的集群后,您便无法将配置更改为切换到 MetalLB 资源。请务必使用正确的云服务商配置来初始化集群。

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

如需详细了解如何运行 cloud-controller-manager,请参阅 Kubernetes 文档。

更改集群配置文件

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

cloud-provider: "external"

为确保您的 GKE 集群满足此要求,请在创建集群之前将 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。Google Distributed Cloud 会为每个节点机器生成格式为 baremetal://MACHINE_ADDRESSproviderID。如果您希望使用不同的 providerID,可以为每个节点指定一个不同的 providerID,并提供相应的 IP 地址。

以下示例集群配置文件展示了如何为集群节点指定 providerID

 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

创建您的集群

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

bmctl create cluster -c cluster1

如需详细了解如何创建集群,请参阅集群创建概览

节点配置

创建针对 OpenStack 配置的集群时,集群节点将发生以下更改:

  • cluster1 中的所有节点都使用必需的参数 cloud-provider: "external" 运行。

  • 所有节点还在其配置文件中添加了以下污点:

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

    您在此集群上初始化云服务提供商后,系统会移除这些污点。

  • kubelet 使用您在集群配置文件中指定的 providerID 运行。

后续步骤