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

GKE on Bare Metal は、OpenStack Kubernetes Cloud プロバイダをサポートしています。この機能を使用して、OpenStack 負荷分散を Service(LBaaS)リソースとして自動的にプロビジョニングします。これらのリソースで、MetalLB リソースを置き換え、ベアメタル版 Anthos クラスタで実行されているサービスを他の OpenStack テナント内または OpenStack ネットワーク外に容易に公開できます。

始める前に

OpenStack LBaaS リソースを使用する必要がある Anthos クラスタを決めます。

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

Kubernetes ドキュメントで cloud-controller-manager の実行について詳細を確認します。

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

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

cloud-provider: "external"

Anthos クラスタがこの要件を簡単に満たすには、クラスタを初期化する前に、メタデータ セクションの下にあるクラスタの構成ファイルに 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 では、マシンごとに providerID が生成されます。形式は baremetal://MACHINE_ADDRESS のようなものです。異なる providerID を持つ場合は、IP アドレスとともにノードごとに 1 つを指定できます。構成は以下のようになります。

 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-admin1
 spec:
   clusterName: admin1
   nodes:
   - address: 172.18.0.2
+    providerID: some-prefix3://unique-string3

構成ファイルを編集した後、次のコマンドを使用してクラスタを初期化します。

bmctl create cluster -c cluster1

これで、cluster1 内のすべてのノードが必要な引数 cloud-provider: "external" を使用して実行されます。

また、すべてのノードの構成ファイルには、次のフィールドも追加されます。

taints:
- effect: NoSchedule
  key: node.cloudprovider.kubernetes.io/uninitialized
  value: "true"

これらのフィールドは、このクラスタでクラウド プロバイダを初期化すると削除されます。

このノードに指定した場合、kubelet は提供された providerID で実行されます。