GKE on Bare Metal は、プライベート クラウド プラットフォームとしての OpenStack の使用をサポートしています。 このガイドでは、外部クラウド プロバイダと連携するように GKE on Bare Metal クラスタを構成する方法について説明します。OpenStack で GKE on Bare Metal クラスタを実行すると、次の OpenStack サービスを使用できます。
Infrastructure as a Service(IaaS)
サービスとしてのロード バランシング(LBaaS)
ストレージ
OpenStack と連携するようにクラスタを構成する手順は、次のとおりです。
クラスタを作成する際に、
baremetal.cluster.gke.io/external-cloud-provider
アノテーションを追加します。このアノテーションにより、GKE on Bare Metal で kubelet フラグ
cloud-provider=external
が追加されます。その後、kubelet は
node.cloudprovider.kubernetes.io/uninitialized:NoSchedule
taint をクラスタノードに追加します。
この構成を使用すると、OpenStack がノードの init プロセスを所有できます。たとえば、GKE on Bare Metal を OpenStack にデプロイすると、OpenStack Load Balancing as a Service(LBaaS)リソースとして自動的にプロビジョニングすることや、他の OpenStack 機能を使用することができます。LBaaS リソースは、MetalLB リソースを置き換えて、GKE on Bare Metal クラスタで実行されている Service を他の OpenStack テナントや OpenStack ネットワーク外に公開できます。OpenStack の機能とメリットの詳細については、OpenStack のドキュメントをご覧ください。
関連する例
このドキュメントでは、OpenStack で使用するクラスタを構成する方法についてのみ説明します。次のガイドでは、デプロイの例について説明しています。
OpenStack に GKE on Bare Metal クラスタをデプロイするでは、OpenStack 仮想マシン(VM)に GKE on Bare Metal ハイブリッド クラスタのサンプル デプロイの手順を説明します。デプロイではスクリプトを使用してインストールを簡素化します。また、サービスとしてのロード バランシング(LBaaS)を有効にする方法の一つについても説明します。
Kubernetes 用の OpenStack クラウド プロバイダを構成するでは、OpenStack にデプロイされた GKE on Bare Metal クラスタに OpenStack クラウド プロバイダをインストールする方法について説明します。OpenStack クラウド プロバイダでは、OpenStack で GKE on Bare Metal を使用する必要がありません。
準備
OpenStack LBaaS リソースを使用する必要がある GKE クラスタを特定します。
OpenStack LBaaS リソースを使用するように構成されたクラスタを作成すると、その構成を変更して MetalLB リソースに切り替えることはできません。クラスタは、正しいクラウド プロバイダ構成で初期化してください。
構成しようとしているマシンにアクセスできることを確認します。
詳細は、Kubernetes ドキュメントで cloud-controller-manager の実行をご覧ください。
クラスタ構成ファイルを変更する
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
に特別な形式が必要です。GKE on Bare Metal は、ノードマシンごとに 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
で実行されます。