在 OpenStack 上執行 Distributed Cloud 軟體 (僅限裸機),即可將叢集與 OpenStack 基礎架構即服務 (IaaS)、負載平衡即服務 (LBaaS) 和儲存空間整合。為外部雲端服務供應商設定叢集,會將節點初始化程序委派給 OpenStack。
您可以自動佈建 OpenStack LBaaS 資源,而非 MetalLB,將叢集上執行的 Service 公開給其他 OpenStack 租戶或 OpenStack 網路外部。如要進一步瞭解 OpenStack 的功能和優點,請參閱 OpenStack 說明文件。
相關範例
本文僅說明如何設定叢集,以便與 OpenStack 搭配使用。下列指南將逐步引導您完成部署範例:
在 OpenStack 上部署叢集:逐步引導您在 OpenStack 虛擬機器 (VM) 上部署混合式叢集範例。部署作業會使用指令碼簡化安裝程序。本指南也說明如何啟用負載平衡即服務 (LBaaS)。
為 Kubernetes 設定 OpenStack 雲端服務供應商:說明如何在部署於 OpenStack 的叢集上安裝 OpenStack 雲端服務供應商。您不一定要使用 OpenStack 雲端服務供應商,才能搭配 OpenStack 使用 Google Distributed Cloud 軟體。
事前準備
決定哪些叢集需要使用 OpenStack LBaaS 資源。
建立叢集並設為使用 OpenStack LBaaS 資源後,就無法變更設定來改用 MetalLB 資源。請務必使用正確的雲端服務供應商設定,初始化叢集。
確認您有權存取要設定的機器。
如要進一步瞭解如何執行 cloud-controller-manager,請參閱 Kubernetes 說明文件。
變更叢集設定檔
OpenStack Kubernetes 雲端服務供應商要求 kubelet 必須在所有節點上執行,並使用下列引數:
cloud-provider: "external"
為確保叢集符合這項要求,請在建立叢集前,將 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 會為每個節點機器產生 providerID,格式類似 baremetal://MACHINE_ADDRESS。如要使用不同的 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執行。