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

Google Distributed Cloud ソフトウェアのみは、プライベート クラウド プラットフォームとして OpenStack の使用をサポートしています。このガイドでは、外部クラウド プロバイダと連携するようにクラスタを構成する方法について説明します。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 リソースを置き換えて、クラスタで実行されている Service を他の OpenStack テナントや OpenStack ネットワーク外に公開できます。OpenStack の機能とメリットの詳細については、OpenStack のドキュメントをご覧ください。

このドキュメントでは、OpenStack で使用するようにクラスタを構成する方法についてのみ説明します。デプロイの例については、次のガイドをご覧ください。

  • OpenStack にクラスタをデプロイする。OpenStack 仮想マシン(VM)にハイブリッド クラスタをデプロイする例について説明します。このデプロイでは、スクリプトを使用してインストールを簡素化します。また、サービスとしてのロード バランシング(LBaaS)を有効にする方法の一つについても説明します。

  • Kubernetes 用の OpenStack Cloud プロバイダを構成する。OpenStack にデプロイされたクラスタに OpenStack Cloud プロバイダをインストールする方法について説明します。OpenStack クラウド プロバイダは、OpenStack で Google Distributed Cloud ソフトウェアを使用する必要はありません。

始める前に

  • OpenStack LBaaS リソースを使用する必要があるクラスタを特定します。

    OpenStack LBaaS リソースを使用するように構成されたクラスタを作成すると、その構成を変更して MetalLB リソースに切り替えることはできません。クラスタは、正しいクラウド プロバイダ構成で初期化してください。

  • 構成しようとしているマシンにアクセスできることを確認します。

詳細については、Kubernetes のドキュメントで cloud-controller-manager の実行をご覧ください。

クラスタ構成ファイルを変更する

OpenStack Kubernetes クラウド プロバイダでは、次の引数を使用して、すべてのノードで kubelet を実行する必要があります。

cloud-provider: "external"

クラスタがこの要件を満たすようにするには、クラスタを作成する前に、クラスタ構成ファイルの 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 で実行されます。

次のステップ