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

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

次のステップ