Google Distributed Cloud は、プライベート クラウド プラットフォームとして OpenStack の使用をサポートしています。このガイドでは、外部クラウド プロバイダと連携するように Google Distributed Cloud クラスタを構成する方法について説明します。OpenStack で Google Distributed Cloud クラスタを実行すると、次の OpenStack サービスを使用できます。
Infrastructure as a Service(IaaS)
サービスとしてのロード バランシング(LBaaS)
ストレージ
OpenStack と連携するようにクラスタを構成するには、次の操作を行います。
クラスタを作成するときに、
baremetal.cluster.gke.io/external-cloud-provider
アノテーションを追加します。このアノテーションにより、Google Distributed Cloud は kubelet フラグ
cloud-provider=external
を追加します。その後、kubelet はクラスタノードに
node.cloudprovider.kubernetes.io/uninitialized:NoSchedule
taint を追加します。
この構成を使用すると、OpenStack がノードの init プロセスを所有できます。たとえば、Google Distributed Cloud を OpenStack にデプロイすると、OpenStack Load Balancing as a Service(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 プロバイダを構成する。OpenStack にデプロイされた Google Distributed Cloud クラスタに OpenStack Cloud プロバイダをインストールする方法について説明します。OpenStack クラウド プロバイダは、OpenStack で Google Distributed Cloud を使用する必要はありません。
始める前に
OpenStack LBaaS リソースを使用する必要がある GKE クラスタを特定します。
OpenStack LBaaS リソースを使用するように構成されたクラスタを作成すると、その構成を変更して MetalLB リソースに切り替えることはできません。クラスタは、正しいクラウド プロバイダ構成で初期化してください。
構成しようとしているマシンにアクセスできることを確認します。
詳細については、Kubernetes のドキュメントで cloud-controller-manager の実行をご覧ください。
クラスタ構成ファイルを変更する
OpenStack Kubernetes クラウド プロバイダでは、次の引数を使用して、すべてのノードで kubelet
を実行する必要があります。
cloud-provider: "external"
GKE クラスタがこの要件を満たすようにするには、クラスタを作成する前に、クラスタ構成ファイルの metadata セクションの下に 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_ADDRESS
のような形式の 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"
で実行されます。また、すべてのノードの構成ファイルに次の taint が追加されます。
taints: - effect: NoSchedule key: node.cloudprovider.kubernetes.io/uninitialized value: "true"
これらの taint は、このクラスタでクラウド プロバイダを初期化すると削除されます。
kubelet
は、クラスタ構成ファイルで指定したproviderID
で実行されます。