OpenStack を使用するようにクラスタを構成する

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 で実行されます。

次のステップ