この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

Harvester Cloud Provider

ビルトインHarvesterノードドライバーを使用して、RancherでRKE2クラスターをプロビジョニングできます。Harvesterは、ゲストKubernetesクラスターに対してロードバランサーと Harvester cluster ストレージパススルーのサポートを提供します。

後方互換性のお知らせ

ハーベスター クラウド プロバイダー バージョン v0.2.2 以上を使用している場合、既知の後方互換性の問題にご注意ください。Harvesterバージョンが*v1.2.0*未満で、新しいRKE2バージョン(すなわち、>= v1.26.6+rke2r1, v1.25.11+rke2r1, v1.24.15+rke2r1)を使用する予定の場合は、ゲストKubernetesクラスターまたはHarvester Cloud Providerのアップグレードを進める前に、Harvesterクラスタをv1.2.0以上にアップグレードすることが必須です。

詳細なサポートマトリックスについては、公式の*Harvester CCM & CSI Driver with RKE2 Releases*セクション( website)を参照してください。

配備

前提条件

  • Kubernetesクラスターは、Harvester仮想マシンの上に構築されています。

  • Harvester仮想マシンは、ゲストKubernetesノードとして実行され、同じネームスペース内に配置されています。

  • Harvester仮想マシンゲストのホスト名は、対応するHarvester仮想マシン名と一致します。Harvester CSIドライバーを使用する場合、ゲストクラスター内の各Harvester VMは、対応するHarvester VM名と異なるホスト名を持つことができません。将来のHarvesterリリースで この制限を削除できることを期待しています。

各Harvester VMには、`macvlan`カーネルモジュールが必要で、これは`LoadBalancer`サービスの*DHCP* IPAMモードに必要です。

カーネルモジュールが利用可能かどうかを確認するには、VMにアクセスして次のコマンドを実行します:

lsmod | grep macvlan
sudo modprobe macvlan

次の事象が発生した場合、カーネルモジュールが欠落している可能性があります:

  • $ lsmod | grep macvlan は出力を生成しません。

  • $ sudo modprobe macvlanmodprobe: FATAL: Module macvlan not found in directory /lib/modules/5.14.21-150400.22-default に似たエラーメッセージを表示します。

デフォルトでは、macvlan`カーネルモジュールはSUSE Linux Enterprise 15 サービスパック 4/5/6の最小クラウドイメージには含まれていません(詳細は Issue #6418を参照)。これらのイメージには、基本モジュールのみを含む `kernel-default-baseパッケージが含まれています。ただし、macvlan カーネルドライバーは kernel-default パッケージをインストールすると利用可能になります。

ゲストクラスターがプロビジョニングされた後の手動介入の必要を排除するために、openSUSE Build Service (OBS) を使用して独自のクラウドイメージを構築してください。生成されるクラウドイメージに macvlan カーネルモジュールが含まれるようにするためには、kernel-default-base パッケージを削除し、kernel-default パッケージを Minimal.kiwi ファイルに追加する必要があります。詳細については、カスタム SUSE VM イメージ を参照してください。

Harvester ノードドライバーを使用して RKE2 クラスターにデプロイする

Harvester ノードドライバーを使用して RKE2 クラスターを立ち上げる際には、Harvester クラウドプロバイダーを選択してください。ノードドライバーは、CSI ドライバーと CCM の両方を自動的にデプロイすることを支援します。

rke2 cloud provider

Rancher v2.9.0 以降、データディレクトリ構成パス フィールドを使用してクラウド設定データの特定のフォルダーを構成できます。

rke2 cloud provider custom data dir

RKE2 クラスターへの手動デプロイ

  1. スクリプト generate_addon.sh を使用してクラウド設定データを生成し、その後、すべてのカスタムノードにデータを配置してください(ディレクトリ: /etc/kubernetes/cloud-config)。

        curl -sfL https://raw.githubusercontent.com/harvester/cloud-provider-harvester/master/deploy/generate_addon.sh | bash -s <serviceaccount name> <namespace>

    このスクリプトは、Harvester クラスターを操作する際に kubectljq に依存し、Harvester Cluster kubeconfig ファイルへのアクセスが与えられたときのみ機能します。

    kubeconfig ファイルは /etc/rancher/rke2/rke2.yaml パスの Harvester 管理ノードのいずれかにあります。サーバーの IP は VIP アドレスに置き換える必要があります。

    コンテンツの例:

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <redacted>
        server: https://127.0.0.1:6443
      name: default
    # ...

    ゲストクラスターが作成される名前空間を指定する必要があります。

    出力の例:

    ########## cloud config ############
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <CACERT>
        server: https://HARVESTER-ENDPOINT/k8s/clusters/local
      name: local
    contexts:
    - context:
        cluster: local
        namespace: default
        user: harvester-cloud-provider-default-local
      name: harvester-cloud-provider-default-local
    current-context: harvester-cloud-provider-default-local
    kind: Config
    preferences: {}
    users:
    - name: harvester-cloud-provider-default-local
      user:
        token: <TOKEN>
    
    ########## cloud-init user data ############
    write_files:
    - encoding: b64
      content: <CONTENT>
      owner: root:root
      path: /etc/kubernetes/cloud-config
      permissions: '0644'
  2. RKE2 クラスター作成ページで、クラスター構成 画面に移動し、クラウドプロバイダー の値を 外部 に設定してください。

    external harvester cloud provider
  3. cloud-init user data コンテンツを マシンプール > 詳細を表示 > ユーザーデータ にコピーして貼り付けてください。

    cloud config userdata
  4. 次の HelmChart CRD を harvester-cloud-provider に追加し、クラスター構成 > アドオン構成 > *追加のマニフェスト*に反映させてください。

    <cluster-name> をクラスターの名前に置き換える必要があります。

     apiVersion: helm.cattle.io/v1
     kind: HelmChart
     metadata:
       name: harvester-cloud-provider
       namespace: kube-system
     spec:
       targetNamespace: kube-system
       bootstrap: true
       repo: https://raw.githubusercontent.com/rancher/charts/dev-v2.9
       chart: harvester-cloud-provider
       version:  104.0.2+up0.2.6
       helmVersion: v3
       valuesContent: |-
         global:
           cattle:
             clusterName: <cluster-name>
    external cloud provider addon
  5. ロードバランサーを作成するには、アノテーション cloudprovider.harvesterhci.io/ipam: <dhcp|pool> を追加してください。

    harvester cloud provider loadbalancer annotation

RKE2 カスタムクラスターへのデプロイ (実験的)

custom
  1. スクリプト generate_addon.sh を使用してクラウド構成データを生成し、その後、すべてのカスタムノードにデータを配置してください(ディレクトリ: /etc/kubernetes/cloud-config)。

     curl -sfL https://raw.githubusercontent.com/harvester/cloud-provider-harvester/master/deploy/generate_addon.sh | bash -s <serviceaccount name> <namespace>

    このスクリプトは、Harvester クラスターを操作する際に kubectljq に依存し、Harvester Cluster kubeconfig ファイルへのアクセスが与えられたときのみ機能します。

    kubeconfig ファイルは /etc/rancher/rke2/rke2.yaml パスの Harvester 管理ノードのいずれかにあります。サーバーの IP は VIP アドレスに置き換える必要があります。

    コンテンツの例:

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <redacted>
        server: https://127.0.0.1:6443
      name: default
    # ...

    ゲストクラスターが作成される名前空間を指定する必要があります。

    出力の例:

    ########## cloud config ############
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <CACERT>
        server: https://HARVESTER-ENDPOINT/k8s/clusters/local
      name: local
    contexts:
    - context:
        cluster: local
        namespace: default
        user: harvester-cloud-provider-default-local
      name: harvester-cloud-provider-default-local
    current-context: harvester-cloud-provider-default-local
    kind: Config
    preferences: {}
    users:
    - name: harvester-cloud-provider-default-local
      user:
        token: <TOKEN>
    
    ########## cloud-init user data ############
    write_files:
    - encoding: b64
      content: <CONTENT>
      owner: root:root
      path: /etc/kubernetes/cloud-config
      permissions: '0644'
  2. 次の設定でハーベスター クラスターに VM を作成します:

    • 基本 タブ:最小要件は 2 CPU と 4 GiB の RAM です。必要なディスク容量は VM イメージによって異なります。

      custom cluster vm cpu and ram
    • ネットワーク タブ:フォーマット nic-<number> のネットワーク名を指定してください。

      custom cluster vm network
    • 詳細オプション タブ:*クラウド設定ユーザーデータ* 画面の内容をコピーして貼り付けます。

      custom cluster vm user data
  3. クラスター構成画面の*基本*タブで、*クラウドプロバイダー*として*ハーベスター*を選択し、次に*作成*を選択してクラスターを立ち上げます。

    create custom rke2
  4. 登録 タブで、VM 上で RKE2 登録コマンドを実行するために必要な手順を実行します。

    custom cluster registration

ハーベスター ノード ドライバーを使用して K3s クラスターにデプロイ (実験的)

ハーベスター ノード ドライバーを使用して K3s クラスターを立ち上げる際に、ハーベスター クラウド プロバイダーをデプロイするために次の手順を実行できます:

  1. generate_addon.sh を使用してクラウド設定を生成します。

     curl -sfL https://raw.githubusercontent.com/harvester/cloud-provider-harvester/master/deploy/generate_addon.sh | bash -s <serviceaccount name> <namespace>

    出力は次のようになります:

     ########## cloud config ############
     apiVersion: v1
     clusters:
     - cluster:
         certificate-authority-data: <CACERT>
         server: https://HARVESTER-ENDPOINT/k8s/clusters/local
       name: local
     contexts:
     - context:
         cluster: local
         namespace: default
         user: harvester-cloud-provider-default-local
       name: harvester-cloud-provider-default-local
     current-context: harvester-cloud-provider-default-local
     kind: Config
     preferences: {}
     users:
     - name: harvester-cloud-provider-default-local
       user:
         token: <TOKEN>
    
    
     ########## cloud-init user data ############
     write_files:
     - encoding: b64
       content: <CONTENT>
       owner: root:root
       path: /etc/kubernetes/cloud-config
       permissions: '0644'
  2. cloud-init user data の内容を マシンプール > 詳細表示 > ユーザーデータ にコピーして貼り付けます。 cloud config userdata

  3. 次の HelmChart の yaml harvester-cloud-providerクラスター構成 > Add-On 設定 > 追加マニフェスト に追加します。

     apiVersion: helm.cattle.io/v1
     kind: HelmChart
     metadata:
       name: harvester-cloud-provider
       namespace: kube-system
     spec:
       targetNamespace: kube-system
       bootstrap: true
       repo: https://charts.harvesterhci.io/
       chart: harvester-cloud-provider
       version: 0.2.2
       helmVersion: v3
    external cloud provider addon
  4. 次の方法で in-tree クラウドプロバイダーを無効にします:

    • `Edit as YAML`ボタンをクリックします。

      edit k3s cluster yaml
    • servicelb を無効にし、デフォルトの K3s クラウドコントローラーを無効にするために disable-cloud-controller: true を設定します。

        machineGlobalConfig:
          disable:
            - servicelb
          disable-cloud-controller: true
    • `cloud-provider=external`を追加して Harvester クラウドプロバイダーを使用します。

        machineSelectorConfig:
          - config:
              kubelet-arg:
              - cloud-provider=external
              protect-kernel-defaults: false
    k3s cluster yaml content for harvester cloud provider

これらの設定が整った状態で、外部クラウドプロバイダーを使用して K3s クラスターが正常にプロビジョニングされるはずです。

クラウドプロバイダーのアップグレード

RKE2のアップグレード

クラウドプロバイダーは、RKE2のバージョンをアップグレードすることでアップグレードできます。Rancher UIを介してRKE2クラスターを次のようにアップグレードできます:

  1. *☰ > クラスター管理*をクリックします。

  2. アップグレードしたいゲストクラスターを見つけて、⋮ *> 設定を編集*を選択します。

  3. *Kubernetesバージョン*を選択します。

  4. 保存]をクリックします。

K3sのアップグレード

Rancher UIを介してK3sクラウドプロバイダーを次のようにアップグレードします:

  1. *☰ > K3sクラスター > アプリ > インストール済みアプリ*をクリックします。

  2. クラウドプロバイダーのチャートを見つけて、⋮ *> 編集/アップグレード*を選択します。

  3. *バージョン*を選択します。

  4. *次へ > 更新*をクリックします。

シングルノードゲストクラスターのアップグレードプロセスは、新しい`harvester-cloud-provider`ポッドが_保留中_の状態でスタックする場合に停止することがあります。この問題は、ローリングアップデート戦略を説明する`harvester-cloud-provider`デプロイメントのセクションによって引き起こされます。具体的には、デフォルト値がシングルノードクラスターの`podAntiAffinity`設定と競合しています。

詳細については、 このGitHubの問題コメントを参照してください。この問題に対処するには、古い`harvester-cloud-provider`ポッドを手動で削除します。新しいポッドが正常にスケジュールされるまで、これを何度も行う必要があるかもしれません。

ロードバランサーサポート

ハーベスタークラウドプロバイダーをデプロイした後、Kubernetes LoadBalancer サービスを利用して、ゲストクラスター内のマイクロサービスを外部に公開することができます。Kubernetes LoadBalancer サービスを作成すると、サービスに専用のハーベスターロードバランサーが割り当てられ、Rancher UI内の Add-on Config を通じて調整を行うことができます。

lb svc

IPAM

ハーベスターのビルトインロードバランサーは、DHCPプール モードの両方を提供し、対応するサービスにアノテーション cloudprovider.harvesterhci.io/ipam: $mode を追加することで構成できます。ハーベスタークラウドプロバイダー >= v0.2.0 から、ユニークな IP共有 モードも導入されます。このモードでは、サービスがそのロードバランサーIPを他のサービスと共有します。

  • *DHCP:*DHCPサーバーが必要です。ハーベスターロードバランサーは、DHCPサーバーからIPアドレスを要求します。

  • *プール:*最初に IPプール を作成する必要があります。これは SUSE Virtualization UI または Rancher UI を使用して行うことができます(2つの方法の違いについては ベストプラクティス を参照してください)。SUSE Virtualization ロードバランサーコントローラーは、IPプール選択ポリシー に従って、ロードバランサーサービスのためにIPを割り当てます。

  • *IP共有:*新しいロードバランサーサービスを作成する際に、既存のロードバランサーサービスのIPを再利用することができます。新しいサービスはセカンダリーサービスと呼ばれ、現在選択されているサービスはプライマリーサービスです。セカンダリーサービスでプライマリーサービスを指定するには、アノテーション cloudprovider.harvesterhci.io/primary-service: $primary-service-name を追加できます。 ただし、2つの既知の制限があります:

    • 同じIPアドレスを共有するサービスは、同じポートを使用できません。

    • セカンダリーサービスは、追加のサービスとIPを共有することはできません。

`IPAM`モードの変更は許可されていません。`IPAM`モードを変更する場合は、新しいサービスを作成する必要があります。

ヘルスチェック

Harvesterクラウドプロバイダーv0.2.0以降、ゲストKubernetesクラスター内の`LoadBalancer`サービスの追加のヘルスチェックはもはや必要ありません。その代わりに、ワークロードのために ライブネスおよび readinessプローブを設定できます。その結果、利用できないポッドは自動的にロードバランサーのエンドポイントから削除され、同じ望ましい結果が得られます。