目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Edgeドキュメント / Day 2操作 / ダウンストリームクラスタ

25 ダウンストリームクラスタ

このセクションでは、管理クラスタを使用して、ダウンストリームクラスタのさまざまな部分に対して、各種のDay 2操作を行う方法について説明します。

25.1 はじめに

このセクションは、Day 2操作に関するドキュメントの「出発点」となることを目的としています。次の情報を確認できます。

  1. 複数のダウンストリームクラスタでDay 2操作を実行するために使用するデフォルトコンポーネント(25.1.1項 「コンポーネント」)。

  2. 自身の特定のユースケース(25.1.2項 「ユースケースの決定」)にどのDay 2リソースを使用するかの判断。

  3. Day 2操作に推奨されるワークフローシーケンス(25.1.3項 「Day 2ワークフロー」)。

25.1.1 コンポーネント

以下に、Day 2操作を正常に実行できるように、管理クラスタまたはダウンストリームクラスタのいずれかでセットアップする必要があるデフォルトコンポーネントについて説明します。

25.1.1.1 Rancher

注記
注記

Rancherを使用せずにFleet (第6章 「Fleet)を利用するユースケースの場合は、Rancherコンポーネントはまとめてスキップできます。

ダウンストリームクラスタの管理を担当します。管理クラスタ上にデプロイする必要があります。

詳細については、第4章 「Rancherを参照してください。

25.1.1.2 Fleet

マルチクラスタリソースのデプロイメントを担当します。

通常は、Rancherコンポーネントによって提供されます。 Rancherを使用しないユースケースでは、スタンドアロンコンポーネントとしてデプロイできます。

Fleetをスタンドアロンコンポーネントとしてインストールする方法の詳細については、Fleetのインストールの詳細を参照してください。

Fleetコンポーネントに関する詳細については、第6章 「Fleetを参照してください。

重要
重要

このドキュメントは、GitOps方式でDay 2操作に関連するリソースのデプロイメントを自動化するために、Fleet、具体的にはGitRepoBundleリソース(この詳細は25.1.2項 「ユースケースの決定」で詳しく説明します)に大きく依存しています。

サードパーティのGitOpsツールの使用が必要なユースケースの場合は、以下を参照してください。

  1. OSパッケージの更新の場合 - 25.3.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」

  2. Kubernetesディストリビューションの更新の場合 - 25.4.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」

  3. Helmチャートのアップグレードの場合 - 33.1項 「要約」のページから目的のEdgeリリースでサポートされているチャートバージョンを取得して、そのチャートバージョンとURLをサードパーティのGitOpsツールに入力します

25.1.1.3 System-upgrade-controller (SUC)

system-upgrade-controller (SUC)は、 カスタムリソースを通じて提供される設定データ(Plan)に基づいて、指定したノード上でタスクを実行する役割を担います。SUCは、何らかのDay 2操作が必要な各ダウンストリームクラスタに配置する必要があります。

SUCに関する詳細については、アップストリームリポジトリを参照してください。

ダウンストリームクラスタにSUCをデプロイする方法については、まず、ユースケース(25.1.2項 「ユースケースの決定」)を決定してから、25.2.1.1項 「GitRepoリソースを使用したSUCのデプロイメント」または25.2.1.2項 「バンドルリソースを使用したSUCのデプロイメント」でSUCのデプロイメントに関する情報を参照してください。

25.1.2 ユースケースの決定

前述のように、Day 2操作に関連するリソースは、FleetのGitRepoリソースとBundleリソースを使用してダウンストリームクラスタに伝播されます。

以下に、これらのリソースの機能と、 Day 2操作に使用する必要があるユースケースに関する詳細を説明します。

25.1.2.1 GitRepo

GitRepoは、Fleetバンドルの作成元として使用できるGitリポジトリを表すFleet (第6章 「Fleet)リソースです。各バンドルは、GitRepoリソースの内部で定義された設定パスに基づいて作成されます。詳細については、GitRepoのドキュメントを参照してください。

Day 2操作の観点では、GitRepoリソースは通常、Fleet GitOpsアプローチを利用する非エアギャップ環境に SUCまたはSUC Planをデプロイするために使用されます。

または、リポジトリのセットアップをローカルGitサーバ経由でミラーリングするとGitRepoリソースを使用して、SUCまたはSUC Planエアギャップ環境にデプロイすることもできます。

25.1.2.2 Bundle

バンドルは、ターゲットクラスタにデプロイする 「生」のKubernetesリソースを保持します。バンドルは通常、GitRepoリソースから作成されますが、手動でデプロイできるユースケースもあります。詳細については、バンドルのドキュメントを参照してください。

Day 2操作の観点では、バンドルリソースは通常、 何らかの形態のローカルGitOps手法を使用しないエアギャップ環境(「ローカルGitサーバ」など )でSUCまたはSUC Planをデプロイするために使用されます。

または、ご自身のユースケースでGitOpsワークフローを使用できない場合は(Gitリポジトリを使用する場合など)、バンドルリソースを使用して、SUCまたはSUC Plan非エアギャップ環境にデプロイすることもできます。

25.1.3 Day 2ワークフロー

以下に、ダウンストリームクラスタを特定のEdgeリリースにアップグレードする際に従う必要があるDay 2ワークフローを示します。

  1. OSパッケージの更新(25.3項 「OSパッケージの更新」)

  2. Kubernetesバージョンアップグレード(25.4項 「Kubernetesバージョンアップグレード」)

  3. Helmチャートのアップグレード(25.5項 「Helmチャートのアップグレード」)

25.2 システムアップグレードコントローラのデプロイメントガイド

system-upgrade-controller (SUC)は、Planと呼ばれるカスタムリソースで定義された設定に基づいてクラスタの特定のノード上にリソースをデプロイする役割を担います。詳細については、アップストリームドキュメントを参照してください。

注記
注記

このセクションは、system-upgrade-controllerのデプロイにのみ焦点を当てています。Planリソースは次のドキュメントからデプロイする必要があります。

  1. OSパッケージの更新(25.3項 「OSパッケージの更新」)

  2. Kubernetesバージョンアップグレード(25.4項 「Kubernetesバージョンアップグレード」)

  3. Helmチャートのアップグレード(25.5項 「Helmチャートのアップグレード」)

25.2.1 デプロイメント

注記
注記

このセクションでは、 Fleet (第6章 「Fleet)を使用してSUCのデプロイメントを調整することを想定しています。サードパーティのGitOpsワークフローを使用しているユーザは、25.2.1.3項 「サードパーティのGitOpsワークフローの使用時におけるsystem-upgrade-controllerのデプロイ」で、そのワークフローでのセットアップに必要なリソースを参照してください。

使用するリソースを判断するには、25.1.2項 「ユースケースの決定」を参照してください。

25.2.1.1 GitRepoリソースを使用したSUCのデプロイメント

このセクションでは、SUCを正常にデプロイするために必要なSUC Planターゲットダウンストリームクラスタに配布するGitRepoリソースを作成する方法について説明します。

Edgeチームは、suse-edge/fleet-examplesの各リリースにおいて、SUCに対してすぐに使えるGitRepoリソースをgitrepos/day2/system-upgrade-controller-gitrepo.yamlで維持しています。

重要
重要

suse-edge/fleet-examplesリポジトリを使用している場合は、必ず、専用のリリースタグのリソースを使用してください。

GitRepoは、次の方法のいずれかで作成できます。

作成されると、Fleetは、リソースを取得し、SUCリソースをすべてのターゲットクラスタにデプロイする役割を担います。デプロイメントプロセスを追跡する方法については、25.2.2.1項 「SUCデプロイメントの監視」を参照してください。

25.2.1.1.1 GitRepoのデプロイメント - Rancher UI
  1. 左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。

  2. [Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。

suse-edge/fleet-examplesリポジトリを使用する場合:

  1. Repository URL (リポジトリのURL) - https://github.com/suse-edge/fleet-examples.git

  2. [Watch (ウォッチ)]→[Revision (リビジョン)] - 使用するsuse-edge/fleet-examplesリポジトリのリリースタグを選択します(release-3.0.1など)。

  3. [Paths (パス)]の下に、system-upgrade-controllerへのパスを、リリースタグ - fleets/day2/system-upgrade-controllerのとおりに追加します。

  4. [Next (次へ)]を選択して、ターゲットの設定セクションに移動します。

  5. system-upgrade-controllerをデプロイするクラスタのみを選択します。 設定に問題がなければ、[Create (作成)]をクリックします。

または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。

25.2.1.1.2 GitRepoの作成 - 手動
  1. SUC GitRepoのデプロイ元にする、目的のEdgeリリース タグを選択します(以下では${REVISION}として参照)。

  2. GitRepoリソースをプルします。

    curl -o system-upgrade-controller-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/{REVISION}/gitrepos/day2/system-upgrade-controller-gitrepo.yaml
  3. GitRepoの設定を編集し、spec.targetsに目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesGitRepoリソースはダウンストリームクラスタにマップ「されません」

  4. GitRepoリソースを管理クラスタに適用します。

    kubectl apply -f system-upgrade-controller-gitrepo.yaml
  5. fleet-defaultネームスペースで、作成した GitRepoリソースを表示します。

    kubectl get gitrepo system-upgrade-controller -n fleet-default
    
    # Example output
    NAME                        REPO                                               COMMIT       BUNDLEDEPLOYMENTS-READY   STATUS
    system-upgrade-controller   https://github.com/suse-edge/fleet-examples.git   release-3.0.1   0/0

25.2.1.2 バンドルリソースを使用したSUCのデプロイメント

このセクションでは、SUCを正常にデプロイするために必要なSUC Planターゲットのダウンストリームクラスタに配布するバンドルリソースを作成する方法について説明します。

Edgeチームは、suse-edge/fleet-examplesの各リリースにおいて、SUCに対してすぐに使えるバンドルリソースをbundles/day2/system-upgrade-controller/controller-bundle.yamlで維持しています。

重要
重要

suse-edge/fleet-examplesリポジトリを使用している場合は、必ず、専用のリリースタグのリソースを使用してください。

バンドルは次のいずれかの方法で作成できます。

作成されると、Fleetは、リソースを取得し、 SUCリソースをすべてのターゲットクラスタにデプロイする役割を担います。デプロイメントプロセスを追跡する方法については、25.2.2.1項 「SUCデプロイメントの監視」を参照してください。

25.2.1.2.1 バンドルの作成 - Rancher UI
  1. 左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。

  2. [Advanced (詳細)]>[Bundles (バンドル)] に移動します。

  3. [Create from YAML (YAMLから作成)]を選択します。

  4. ここから次のいずれかの方法でバンドルを作成できます。

    • ファイルコンテンツを[Create from YAML (YAMLから作成)]ページに手動でコピーする。ファイルコンテンツは、https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller/controller-bundle.yamlから取得できます。ここで、${REVISION}は、目的のEdge リリースタグです(release-3.0.1など)。

    • suse-edge/fleet-examplesリポジトリを目的のリリースタグに複製し、[Create from YAML (YAMLから作成)]ページの[Read from File (ファイルから読み取り)]オプションを選択する。そこからbundles/day2/system-upgrade-controllerディレクトリに移動し、controller-bundle.yamlを選択します。[Create from YAML (YAMLから作成)]ページにバンドルコンテンツが自動的に入力されます。

  5. バンドルターゲットクラスタを次のように変更します。

  6. 作成します

25.2.1.2.2 バンドルの作成 - 手動
  1. SUCバンドルのデプロイ元にするEdgeリリースタグを選択します(以下では${REVISION}として参照)。

  2. バンドルリソースをプルします。

    curl -o controller-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller/controller-bundle.yaml
  3. バンドルターゲット設定を編集し、spec.targetsに目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesバンドルリソースは、どのダウンストリームクラスタにもマップ「されません」

  4. バンドルリソースを管理クラスタに適用します。

    kubectl apply -f controller-bundle.yaml
  5. fleet-defaultネームスペースで、作成したバンドルリソースを表示します。

    kubectl get bundles system-upgrade-controller -n fleet-default
    
    # Example output
    NAME                        BUNDLEDEPLOYMENTS-READY   STATUS
    system-upgrade-controller   0/0

25.2.1.3 サードパーティのGitOpsワークフローの使用時におけるsystem-upgrade-controllerのデプロイ

サードパーティのGitOpsツールを使用してsystem-upgrade-controllerをデプロイする場合、ツールによっては、system-upgrade-controller HelmチャートまたはKubernetesリソース、あるいはその両方の情報が必要な場合があります。

SUCを使用するための特定のEdgeリリースを選択します。

そこから、SUCのHelmチャートデータをファイルfleets/day2/system-upgrade-controller/fleet.ymalhelm設定セクションで見つけることができます。

SUCのKubernetesリソースは、.spec.resources.contentSUCバンドル設定にあります。バンドルの場所はbundles/day2/system-upgrade-controller/controller-bundle.yamlです。

上記のリソースを使用して、SUCをデプロイするためにサードパーティのGitOpsワークフローで必要なデータを入力します。

25.2.2 Rancherを使用したSUCリソースの監視

このセクションでは、Rancher UIを使用してSUCデプロイメントのライフサイクルおよびデプロイしたSUC Planを監視する方法を説明します。

25.2.2.1 SUCデプロイメントの監視

特定のクラスタのSUC Podのログを確認するには、次の手順を実行します。

  1. 左上隅で、☰ → <クラスタ名>を選択します。

  2. [Workloads (ワークロード)] → [Pods]を選択します。

  3. ネームスペースのドロップダウンメニューで、cattle-systemネームスペースを選択します。

    day2 sucデプロイメントの監視1
  4. [Pods]フィルタバーに、SUCの名前 - system-upgrade-controllerと入力します。

  5. Podの右側で⋮ → [View Logs (ログの表示)]を選択します。

    day2 sucデプロイメントの監視2
  6. SUCのログは次のようになります。

    day2 sucデプロイメントの監視3

25.2.2.2 SUC Planの監視

重要
重要

SUC PlanのPodの存続時間は15分です。この時間を過ぎると、Podを作成した該当するジョブにより削除されます。SUC PlanのPodのログにアクセスするには、クラスタのログを有効にする必要があります。Rancherでログを有効にする方法については、「Rancher Integration with Logging Services (Rancherとログサービスの統合)」を参照してください。

特定のSUC PlanのPodのログを確認するには、次の手順を実行します。

  1. 左上隅で、☰ → <クラスタ名>を選択します。

  2. [Workloads (ワークロード)] → [Pods]を選択します。

  3. ネームスペースのドロップダウンメニューで、cattle-systemネームスペースを選択します。

    day2 sucデプロイメントの監視1
  4. [Pods]フィルタバーにSUC Plan Podの名前を入力します。名前はapply-<plan_name>-on-<node_name>のテンプレート形式に従います。

    day2 k8s planの監視
    図 25.1: KubernetesアップグレードPlanのPodの例

    図1に注目してください。一方のPodが[Completed (完了)]、他方が[Unknown (不明)]になっています。これは想定内であり、ノードのKubernetesバージョンアップグレードによるものです。

    day2 osパッケージplanの監視
    図 25.2: OSパッケージ更新PlanのPodの例
    day2チャートアップグレードPlanの監視
    図 25.3: EIBによってHAクラスタにデプロイされるHelmチャートのアップグレードPlanのPodの例
  5. ログを確認するPodを選択し、⋮ → [View Logs (ログの表示)]に移動します。

25.3 OSパッケージの更新

25.3.1 コンポーネント

このセクションでは、OSパッケージの更新プロセスがデフォルトのDay 2コンポーネント(25.1.1項 「コンポーネント」)よりも優先して使用するカスタムコンポーネントについて説明します。

25.3.1.1 edge-update.service

OSパッケージの更新を実行するSystemdサービスです。transactional-updateコマンドを使用してディストリビューションのアップグレード(dup)を実行します。

注記
注記

通常アップグレードの方法を使用する場合、各ノードの/etc/edge/にファイルedge-update.confを作成します。このファイル内に、UPDATE_METHOD=up変数を追加します。

SUC Planによって配布されます。OSパッケージの更新が必要な各ダウンストリームクラスタに配置する必要があります。

25.3.2 要件

全般:

  1. SCC登録マシン - すべてのダウンストリームクラスタノードは、https://scc.suse.com/に登録する必要があります。これは、edge-update.serviceを必要なOS RPMリポジトリに正しく接続するために必要です。

  2. SUC PlanのTolerationがノードのTolerationと一致すること - KubernetesクラスタノードにカスタムのTaintが設定されている場合は、SUC PlanにそのTaintに対するTolerationを追加してください。デフォルトでは、SUC Planには、control-planeノードのTolerationのみが含まれます。デフォルトのTolerationは次のとおりです。

    • CriticalAddonsOnly=true:NoExecute

    • node-role.kubernetes.io/control-plane:NoSchedule

    • node-role.kubernetes.io/etcd:NoExecute

      注記
      注記

      追加のTolerationは、各Planの.spec.tolerationsセクションに追加する必要があります。OSパッケージの更新に関連するSUC Planは、fleets/day2/system-upgrade-controller-plans/os-pkg-updateの下のsuse-edge/fleet-examplesリポジトリにあります。有効なリポジトリリリースタグからのPlanを使用してください。

      control-plane SUC Planに対してカスタムのTolerationを定義する例は次のようになります。

      apiVersion: upgrade.cattle.io/v1
      kind: Plan
      metadata:
        name: os-pkg-plan-control-plane
      spec:
        ...
        tolerations:
        # default tolerations
        - key: "CriticalAddonsOnly"
          operator: "Equal"
          value: "true"
          effect: "NoExecute"
        - key: "node-role.kubernetes.io/control-plane"
          operator: "Equal"
          effect: "NoSchedule"
        - key: "node-role.kubernetes.io/etcd"
          operator: "Equal"
          effect: "NoExecute"
        # custom toleration
        - key: "foo"
          operator: "Equal"
          value: "bar"
          effect: "NoSchedule"
      ...

エアギャップ:

  1. SUSE RPMリポジトリのミラーリング - OS RPMリポジトリをローカルにミラーリングし、edge-update.serviceがそのリポジトリにアクセスできるようにする必要があります。このためには、RMTを使用します。

25.3.3 更新手順

注記
注記

このセクションでは、Fleet (第6章 「Fleet)を使用してOSパッケージの更新SUC Planをデプロイすることを想定しています。異なる方法でSUC Planをデプロイする場合は、25.3.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」を参照してください。

OSパッケージの更新手順は、SUC Planをダウンストリームクラスタにデプロイする手順が中心になります。その後、これらのPlanには、edge-update.service systemd.serviceをどのような方法でどのノードにデプロイするかに関する情報が保持されます。SUC Planの構造の詳細については、アップストリームドキュメントを参照してください。

OSパッケージの更新 SUC Planは次の方法で配布されます。

どのリソースを使用すべきかを判断するには、25.1.2項 「ユースケースの決定」を参照してください。

更新手順中の処理の概要については、25.3.3.1項 「概要」のセクションを参照してください。

25.3.3.1 概要

このセクションは、OSパッケージの更新プロセスが開始から終了までに経由するワークフロー全体について説明することを目的としています。

day2 osパッケージ更新の図
図 25.4: OSパッケージの更新ワークフロー

OSパッケージの更新手順:

  1. ユーザは、OSパッケージの更新SUC Planを目的のダウンストリームクラスタにデプロイするために、GitRepoリソースを使用するか、それともバンドルリソースを使用するかをそのユースケースに基づいて判断します。GitRepo/バンドルを特定のダウンストリームクラスタセットにマップする方法の詳細については、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。

    1. SUC PlanのデプロイメントにGitRepoリソースまたはバンドルリソースのどちらを使用すべきかわからない場合は、25.1.2項 「ユースケースの決定」を参照してください。

    2. GitRepo/バンドルの設定オプションについては、25.3.4.1項 「SUC Planのデプロイメント - GitRepoリソース」または25.3.4.2項 「SUC Planのデプロイメント - バンドルリソース」を参照してください。

  2. ユーザは、設定したGitRepo/バンドルリソースを管理クラスタfleet-defaultのネームスペースにデプロイします。これは、手動で実行するか、Rancher UI (利用可能な場合)を使用して実行します。

  3. Fleet (第6章 「Fleet)は、fleet-defaultネームスペースを絶えず監視し、新しくデプロイされたGitRepo/バンドルリソースをすぐに検出します。Fleetが監視するネームスペースの詳細については、Fleetの「Namespaces (ネームスペース)」のドキュメントを参照してください。

  4. ユーザがGitRepoリソースをデプロイした場合、Fleetは、GitRepoを調整し、そのパスfleet.yamlの設定に基づいて、バンドルリソースをfleet-defaultネームスペースにデプロイします。詳細については、Fleetの「Git Repository Contents (Gitリポジトリの内容)」のドキュメントを参照してください。

  5. Fleetは続いて、Kubernetesリソースをこのバンドルから、ターゲットとするすべてのダウンストリームクラスタにデプロイします。OSパッケージの更新のコンテキストでは、Fleetは、次のリソースをバンドルからデプロイします。

    1. os-pkg-plan-agent SUC Plan - クラスタのエージェントノード上でパッケージの更新を行う方法をSUCに指示します。 クラスタがcontrol-planeノードのみで構成されている場合は、解釈「されません」

    2. os-pkg-plan-control-plane SUC Plan - クラスタのcontrol-planeノードに対してパッケージの更新を実行する方法をSUCに指示します。

    3. os-pkg-update シークレット - 各SUC Planで参照され、実際にパッケージの更新を実行するedge-update.service sustemd.serviceを作成するupdate.shスクリプトを配布します。

      注記
      注記

      上記のリソースは、各ダウンストリームクラスタのcattle-systemネームスペースにデプロイされます。

  6. ダウンストリームクラスタで、SUCは、新しくデプロイされたSUC Planを検出し、 SUC Planで定義されたノードセレクタと一致する各ノードに更新Podをデプロイします。SUC Plan Podを監視する方法については、25.2.2.2項 「SUC Planの監視」を参照してください。

  7. 更新Pod (各ノードにデプロイ)は、os-pkg-updateシークレットをマウントし、シークレットによって配布されるupdate.shスクリプトを実行します。

  8. update.shは、処理を進めて以下を実行します。

    1. edge-update.serviceの作成 - 作成されるサービスはワンショットのタイプで、次のワークフローを採用します。

      1. 以下を実行して、ノードのOS上のすべてのパッケージバージョンを更新します。

        transactional-update cleanup dup
      2. transactional-updateが正常に実行されたら、システムの再起動をスケジュールして、パッケージバージョンの更新を有効にできるようにします。

        注記
        注記

        システムの再起動は、transactional-updateが正常に実行されてから1分の間にスケジュールされます。

    2. edge-update.serviceを起動し、完了するまで待機します。

    3. edge-update.serviceのクリーンアップ - systemd.serviceは、ジョブの完了後にシステムから削除されます。これは今後、誤って実行/再起動されないようにするためです。

OSパッケージの更新手順は、システムの再起動で完了します。再起動後、すべてのOSパッケージバージョンを、利用可能なOS RPMリポジトリに表示されている対応する最新バージョンに更新する必要があります。

25.3.4 OSパッケージの更新 - SUC Planのデプロイメント

このセクションでは、FleetのGitRepoリソースおよびバンドルリソースを使用して、SUC Planに関連するOSパッケージの更新のデプロイメントを調整する方法について説明します。

25.3.4.1 SUC Planのデプロイメント - GitRepoリソース

必要なOSパッケージの更新 SUC Planを配布するGitRepoリソースは、次のいずれかの方法でデプロイできます。

  1. Rancher UIを使用する - 25.3.4.1.1項 「GitRepoの作成 - Rancher UI」 (Rancherが利用可能な場合)。

  2. リソースを管理クラスタに手動でデプロイする(25.3.4.1.2項 「GitRepoの作成 - 手動」)。

デプロイ後に、ターゲットクラスタのノードのOSパッケージの更新プロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。

25.3.4.1.1 GitRepoの作成 - Rancher UI
  1. 左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。

  2. [Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。

suse-edge/fleet-examplesリポジトリを使用する場合:

  1. Repository URL (リポジトリのURL) - https://github.com/suse-edge/fleet-examples.git

  2. [Watch (ウォッチ)] → [Revision (リビジョン)] - 使用するsuse-edge/fleet-examplesリポジトリのリリースタグを選択します。

  3. [Paths (パス)]に、使用するOSパッケージ更新用のFleetのパスfleets/day2/system-upgrade-controller-plans/os-pkg-updateを追加します。

  4. [Next (次へ)]を選択してターゲットの設定セクションに移動します。アップグレードするノードのパッケージを含むクラスタのみを選択してください。

  5. 作成します

または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。

25.3.4.1.2 GitRepoの作成 - 手動
  1. OSのSUC更新Planの適用元にするEdgeリリースタグを選択します(以下では${REVISION}として参照)。

  2. GitRepoリソースをプルします。

    curl -o os-pkg-update-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/gitrepos/day2/os-pkg-update-gitrepo.yaml
  3. GitRepo設定を編集し、spec.targetsで目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesGitRepoリソースはどのダウンストリームクラスタにもマップ「されません」

  4. GitRepoリソースを管理クラスタに適用します。

    kubectl apply -f os-pkg-update-gitrepo.yaml
  5. fleet-defaultネームスペースで、作成した GitRepoリソースを表示します。

    kubectl get gitrepo os-pkg-update -n fleet-default
    
    # Example output
    NAME            REPO                                              COMMIT         BUNDLEDEPLOYMENTS-READY   STATUS
    os-pkg-update   https://github.com/suse-edge/fleet-examples.git   release-3.0.1  0/0

25.3.4.2 SUC Planのデプロイメント - バンドルリソース

必要なOSパッケージの更新SUC Planを配布するバンドルリソースは、次のいずれかの方法でデプロイできます。

  1. Rancher UIを使用する - 25.3.4.2.1項 「バンドルの作成 - Rancher UI」 (Rancherが利用可能な場合)。

  2. リソースを管理クラスタに手動でデプロイする(25.3.4.2.2項 「バンドルの作成 - 手動」)。

デプロイ後に、ターゲットクラスタのノードのOSパッケージの更新プロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。

25.3.4.2.1 バンドルの作成 - Rancher UI
  1. 左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。

  2. [Advanced (詳細)]>[Bundles (バンドル)] に移動します。

  3. [Create from YAML (YAMLから作成)]を選択します。

  4. ここから次のいずれかの方法でバンドルを作成できます。

    1. バンドルコンテンツを[Create from YAML (YAMLから作成)]ページに手動コピーする。コンテンツは、https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller-plans/os-pkg-update/pkg-update-bundle.yamlから取得できます。ここで、${REVISION}は、使用しているEdgeのリリースです。

    2. suse-edge/fleet-examplesリポジトリを目的のリリースタグに複製し、[Create from YAML (YAMLから作成)]ページで[Read from File (ファイルから読み取り)]オプションを選択する。そこから、bundles/day2/system-upgrade-controller-plans/os-pkg-updateディレクトリに移動し、pkg-update-bundle.yamlを選択します。[Create from YAML (YAMLから作成)]ページにバンドルコンテンツが自動的に入力されます。

  5. バンドルターゲットクラスタを次のように変更します。

  6. [Create (作成)]を選択します。

25.3.4.2.2 バンドルの作成 - 手動
  1. OSパッケージの更新SUC Planの適用元にするEdgeのリリースタグを選択します(以下では${REVISION}として参照)。

  2. バンドルリソースをプルします。

    curl -o pkg-update-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller-plans/os-pkg-update/pkg-update-bundle.yaml
  3. バンドルターゲット設定を編集し、spec.targetsに目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesバンドルリソースは、どのダウンストリームクラスタにもマップ「されません」

  4. バンドルリソースを管理クラスタに適用します。

    kubectl apply -f pkg-update-bundle.yaml
  5. fleet-defaultネームスペースで、作成したバンドルリソースを表示します。

    kubectl get bundles os-pkg-update -n fleet-default
    
    # Example output
    NAME            BUNDLEDEPLOYMENTS-READY   STATUS
    os-pkg-update   0/0

25.3.4.3 SUC Planのデプロイメント - サードパーティのGitOpsワークフロー

ユーザがOSパッケージの更新SUC Planを独自のサードパーティGitOpsワークフロー(Fluxなど)に統合したいユースケースが存在する場合があります。

必要なOSパッケージの更新リソースを取得するには、まず、使用するsuse-edge/fleet-examplesリポジトリのEdgeリリースタグを特定します。

その後、リソースをfleets/day2/system-upgrade-controller-plans/os-pkg-updateで特定できます。

  • plan-control-plane.yaml - control-planeノードのsystem-upgrade-controllerのPlanリソース

  • plan-agent.yaml - system-upgrade-controller agentノードのPlanリソース

  • secret.yaml - edge-update.service systemd.serviceを作成するスクリプトを配布するシークレット

重要
重要

これらのPlanリソースは、system-upgrade-controllerによって解釈され、アップグレードする各ダウンストリームクラスタにデプロイする必要があります。system-upgrade-controllerをデプロイする方法については、25.2.1.3項 「サードパーティのGitOpsワークフローの使用時におけるsystem-upgrade-controllerのデプロイ」を参照してください。

GitOpsワークフローを使用してOSパッケージの更新用のSUC Planをデプロイする方法について理解を深めるには、Fleetを使用した更新手順の概要(25.3.3.1項 「概要」)を確認すると役に立ちます。

25.4 Kubernetesバージョンアップグレード

重要
重要

このセクションでは、Rancher (第4章 「Rancher)インスタンスを使用して作成されて「いない」ダウンストリームクラスタのアップグレードについて説明します。Rancherで作成したクラスタのKubernetesバージョンをアップグレードする方法については、「Upgrading and Rolling Back Kubernetes (Kubernetesのアップグレードとロールバック)」を参照してください。

25.4.1 コンポーネント

このセクションでは、KubernetesアップグレードプロセスがデフォルトのDay 2コンポーネント(25.1.1項 「コンポーネント」)よりも優先して使用するカスタムコンポーネントについて説明します。

25.4.1.1 rke2-upgrade

特定ノードのRKE2バージョンのアップグレードを行うイメージです。

SUC Planに基づいてSUCによって作成されたPodを通じて配布されます。このPlanは、RKE2のアップグレードが必要な各ダウンストリームクラスタに配置する必要があります。

rke2-upgradeイメージによるアップグレードの実行方法の詳細については、アップストリームドキュメントを参照してください。

25.4.1.2 k3s-upgrade

特定のノードのK3sバージョンをアップグレードするイメージです。

SUC Planに基づいてSUCによって作成されたPodを通じて配布されます。このPlanは、K3sのアップグレードが必要な各ダウンストリームクラスタに配置する必要があります。

k3s-upgradeイメージによるアップグレードの実行方法の詳細については、アップストリームドキュメントを参照してください。

25.4.2 要件

  1. Kubernetesディストリビューションをバックアップします。

    1. インポートしたRKE2クラスタについては、RKE2のバックアップと復元に関するドキュメントを参照してください。

    2. インポートしたK3sクラスタについては、K3sのバックアップと復元に関するドキュメントを参照してください。

  2. SUC PlanのTolerationがノードのTolerationと一致すること - KubernetesクラスタノードにカスタムのTaintが設定されている場合は、SUC PlanにそのTaintに対するTolerationを追加してください。デフォルトでは、SUC Planには、control-planeノードのTolerationのみが含まれます。デフォルトのTolerationは次のとおりです。

    • CriticalAddonsOnly=true:NoExecute

    • node-role.kubernetes.io/control-plane:NoSchedule

    • node-role.kubernetes.io/etcd:NoExecute

      注記
      注記

      追加のTolerationは、各Planの.spec.tolerationsセクションに追加する必要があります。Kubernetesバージョンアップグレードに関するSUC Planは、次の場所のsuse-edge/fleet-examplesリポジトリにあります。

      • RKE2 - fleets/day2/system-upgrade-controller-plans/rke2-upgrade

      • K3s - fleets/day2/system-upgrade-controller-plans/k3s-upgrade

      必ず、有効なリポジトリリリースタグからのPlanを使用してください。

      RKE2 control-plane SUC PlanのカスタムTolerationの定義例は次のようになります。

      apiVersion: upgrade.cattle.io/v1
      kind: Plan
      metadata:
        name: rke2-plan-control-plane
      spec:
        ...
        tolerations:
        # default tolerations
        - key: "CriticalAddonsOnly"
          operator: "Equal"
          value: "true"
          effect: "NoExecute"
        - key: "node-role.kubernetes.io/control-plane"
          operator: "Equal"
          effect: "NoSchedule"
        - key: "node-role.kubernetes.io/etcd"
          operator: "Equal"
          effect: "NoExecute"
        # custom toleration
        - key: "foo"
          operator: "Equal"
          value: "bar"
          effect: "NoSchedule"
      ...

25.4.3 アップグレード手順

注記
注記

このセクションでは、SUC PlanをFleet (第6章 「Fleet)を使用してデプロイすることを想定しています。別の方法でSUC Planをデプロイする場合は、25.4.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」を参照してください。

Kubernetesバージョンアップグレード手順は、SUC Planをダウンストリームクラスタにデプロイする手順が中心になります。その後、これらのPlanには、SUCに対し、rke2/k3s-upgradeイメージを実行するPodをどのノード上に作成するかを指示する情報が保持されます。SUC Planの構造については、アップストリームドキュメントを参照してください。

KubernetesアップグレードPlanは次のように配布されます。

どのリソースを使用すべきかを判断するには、25.1.2項 「ユースケースの決定」を参照してください。

更新手順中の処理の概要については、25.4.3.1項 「概要」のセクションを参照してください。

25.4.3.1 概要

このセクションは、Kubernetesバージョンアップグレードプロセスが開始から終了までに経由するワークフロー全体について説明することを目的としています。

day2 k8sバージョンアップグレードの図
図 25.5: Kubernetesバージョンアップグレードのワークフロー

Kubernetesバージョンアップグレードの手順:

  1. ユーザは、KubernetesアップグレードSUC Planを目的のダウンストリームクラスタにデプロイするために、GitRepoリソースを使用するか、それともバンドルリソースを使用するかをそのユースケースに基づいて判断します。GitRepo/バンドルを特定のダウンストリームクラスタセットにマップする方法の詳細については、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください。

    1. SUC PlanのデプロイメントにGitRepoリソースまたはバンドルリソースのどちらを使用すべきかわからない場合は、25.1.2項 「ユースケースの決定」を参照してください。

    2. GitRepo/バンドルの設定オプションについては、25.4.4.1項 「SUC Planのデプロイメント - GitRepoリソース」または25.4.4.2項 「SUC Planのデプロイメント - バンドルリソース」を参照してください。

  2. ユーザは、設定したGitRepo/バンドルリソースを管理クラスタfleet-defaultのネームスペースにデプロイします。これは、手動で実行するか、Rancher UI (利用可能な場合)を使用して実行します。

  3. Fleet (第6章 「Fleet)は、fleet-defaultネームスペースを絶えず監視し、新しくデプロイされたGitRepo/バンドルリソースをすぐに検出します。Fleetが監視するネームスペースの詳細については、Fleetの「Namespaces (ネームスペース)」のドキュメントを参照してください。

  4. ユーザがGitRepoリソースをデプロイした場合、Fleetは、GitRepoを調整し、そのパスfleet.yamlの設定に基づいて、バンドルリソースをfleet-defaultネームスペースにデプロイします。詳細については、Fleetの「Git Repository Contents (Gitリポジトリの内容)」のドキュメントを参照してください。

  5. Fleetは続いて、Kubernetesリソースをこのバンドルから、ターゲットとするすべてのダウンストリームクラスタにデプロイします。Kubernetesバージョンアップグレードのコンテキストでは、Fleetは、次のリソースをバンドルからデプロイします(Kubernetesディストリビューションによって異なる)。

    1. rke2-plan-agent/k3s-plan-agent - クラスタエージェントノードでKubernetesをアップグレードする方法をSUCに指示します。クラスタがcontrol-planeノードのみで構成されている場合は、解釈「されません」

    2. rke2-plan-control-plane/k3s-plan-control-plane - クラスタのcontrol-planeノードでKubernetesをアップグレードする方法をSUCに指示します。

      注記
      注記

      上記のSUC Planは、各ダウンストリームクラスタのcattle-systemネームスペースにデプロイされます。

  6. ダウンストリームクラスタで、SUCは、新しくデプロイされたSUC Planを検出し、 SUC Planで定義されたノードセレクタと一致する各ノードに更新Podをデプロイします。SUC Plan Podを監視する方法については、25.2.2.2項 「SUC Planの監視」を参照してください。

  7. デプロイしたSUC Planに応じて、更新Podは、rke2-upgradeイメージまたはk3s-upgradeイメージのいずれかを実行して、それぞれのクラスタノードで次のワークフローを実行します。

    1. Cordonクラスタノード - ノードのアップグレード時にこのノードにPodが誤ってスケジュールされないようにするために、このノードをunschedulableとマークします。

    2. ノードOSにインストールされているrke2/k3sバイナリを、Podが現在実行しているrke2-upgrade/k3s-upgradeイメージによって配布されるバイナリに置き換えます。

    3. ノードOSで実行されているrke2/k3sプロセスを強制終了します - これにより、新しいバージョンを使用してrke2/k3sプロセスを自動的に再起動するようにスーパーバイザに指示します。

    4. Uncordonクラスタノード - Kubernetesディストリビューションが正常にアップグレードされると、このノードは再びscheduableとマークされます。

      注記
      注記

      rke2-upgradeイメージおよびk3s-upgradeイメージの機能の詳細については、rke2-upgradeおよびk3s-upgradeのアップストリームプロジェクトを参照してください。

上記の手順を実行すると、各クラスタノードのKubernetesバージョンが目的のEdge互換リリースにアップグレードされているはずです。

25.4.4 Kubernetesバージョンアップグレード - SUC Planのデプロイメント

25.4.4.1 SUC Planのデプロイメント - GitRepoリソース

必要なKubernetesアップグレードSUC Planを配布するGitRepoリソースは、次のいずれかの方法でデプロイできます。

  1. Rancher UIを使用する - 25.4.4.1.1項 「GitRepoの作成 - Rancher UI」 (Rancherが利用可能な場合)。

  2. リソースを管理クラスタに手動でデプロイする(25.4.4.1.2項 「GitRepoの作成 - 手動」)。

デプロイ後に、ターゲットクラスタのノードのKubernetesのアップグレードプロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。

25.4.4.1.1 GitRepoの作成 - Rancher UI
  1. 左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。

  2. [Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。

suse-edge/fleet-examplesリポジトリを使用する場合:

  1. Repository URL (リポジトリのURL) - https://github.com/suse-edge/fleet-examples.git

  2. [Watch (ウォッチ)] → [Revision (リビジョン)] - 使用するsuse-edge/fleet-examplesリポジトリのリリースタグを選択します。

  3. [Paths (パス)]の下に、KubernetesディストリビューションのアップグレードFleetへのパスを、リリースタグに表示されているとおりに追加します。

    1. RKE2の場合 - fleets/day2/system-upgrade-controller-plans/rke2-upgrade

    2. K3sの場合 - fleets/day2/system-upgrade-controller-plans/k3s-upgrade

  4. [Next (次へ)]を選択し、ターゲットの設定セクションに移動します。目的のKubernetesディストリビューションをアップグレードするクラスタのみを選択します

  5. 作成します

または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。

25.4.4.1.2 GitRepoの作成 - 手動
  1. Kubernetes SUCアップグレードPlanを適用する目的のEdgeリリースタグを選択します(以下では${REVISION}として参照)。

  2. GitRepoリソースをプルします。

    • RKE2クラスタの場合:

      curl -o rke2-upgrade-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/gitrepos/day2/rke2-upgrade-gitrepo.yaml
    • K3sクラスタの場合:

      curl -o k3s-upgrade-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/gitrepos/day2/k3s-upgrade-gitrepo.yaml
  3. GitRepo設定を編集し、spec.targetsで目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesGitRepoリソースはどのダウンストリームクラスタにもマップ「されません」

  4. GitRepoリソースを管理クラスタに適用します。

    # RKE2
    kubectl apply -f rke2-upgrade-gitrepo.yaml
    
    # K3s
    kubectl apply -f k3s-upgrade-gitrepo.yaml
  5. fleet-defaultネームスペースで、作成した GitRepoリソースを表示します。

    # RKE2
    kubectl get gitrepo rke2-upgrade -n fleet-default
    
    # K3s
    kubectl get gitrepo k3s-upgrade -n fleet-default
    
    # Example output
    NAME           REPO                                              COMMIT          BUNDLEDEPLOYMENTS-READY   STATUS
    k3s-upgrade    https://github.com/suse-edge/fleet-examples.git   release-3.0.1   0/0
    rke2-upgrade   https://github.com/suse-edge/fleet-examples.git   release-3.0.1   0/0

25.4.4.2 SUC Planのデプロイメント - バンドルリソース

必要なKubernetesアップグレードSUC Planを配布するバンドルリソースは、次のいずれかの方法でデプロイできます。

  1. Rancher UIを使用する - 25.4.4.2.1項 「バンドルの作成 - Rancher UI」 (Rancherが利用可能な場合)。

  2. リソースを管理クラスタに手動でデプロイする(25.4.4.2.2項 「バンドルの作成 - 手動」)。

デプロイ後に、ターゲットクラスタのノードのKubernetesのアップグレードプロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。

25.4.4.2.1 バンドルの作成 - Rancher UI
  1. 左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。

  2. [Advanced (詳細)]>[Bundles (バンドル)] に移動します。

  3. [Create from YAML (YAMLから作成)]を選択します。

  4. ここから次のいずれかの方法でバンドルを作成できます。

    1. バンドルコンテンツを[Create from YAML (YAMLから作成)]ページに手動でコピーする。コンテンツは次の場所から取得できます。

    2. suse-edge/fleet-examplesリポジトリを目的のリリースタグに複製し、[Create from YAML (YAMLから作成)]ページの[Read from File (ファイルから読み取り)]オプションを選択します。そこから、必要なバンドルに移動します(RKE2の場合は/bundles/day2/system-upgrade-controller-plans/rke2-upgrade/plan-bundle.yaml、K3sの場合は/bundles/day2/system-upgrade-controller-plans/k3s-upgrade/plan-bundle.yaml)。[Create from YAML (YAMLから作成)]ページにバンドルコンテンツが自動的に入力されます。

  5. バンドルターゲットクラスタを次のように変更します。

  6. 作成します

25.4.4.2.2 バンドルの作成 - 手動
  1. Kubernetes SUCアップグレードPlanを適用する目的のEdgeリリースタグを選択します(以下では${REVISION}として参照)。

  2. バンドルリソースをプルします。

    • RKE2クラスタの場合:

      curl -o rke2-plan-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller-plans/rke2-upgrade/plan-bundle.yaml
    • K3sクラスタの場合:

      curl -o k3s-plan-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller-plans/k3s-upgrade/plan-bundle.yaml
  3. バンドルターゲット設定を編集し、spec.targetsに目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examplesバンドルリソースは、どのダウンストリームクラスタにもマップ「されません」

  4. バンドルリソースを管理クラスタに適用します。

    # For RKE2
    kubectl apply -f rke2-plan-bundle.yaml
    
    # For K3s
    kubectl apply -f k3s-plan-bundle.yaml
  5. fleet-defaultネームスペースで、作成したバンドルリソースを表示します。

    # For RKE2
    kubectl get bundles rke2-upgrade -n fleet-default
    
    # For K3s
    kubectl get bundles k3s-upgrade -n fleet-default
    
    # Example output
    NAME           BUNDLEDEPLOYMENTS-READY   STATUS
    k3s-upgrade    0/0
    rke2-upgrade   0/0

25.4.4.3 SUC Planのデプロイメント - サードパーティのGitOpsワークフロー

ユーザがKubernetesアップグレードリソースを独自のサードパーティGitOpsワークフロー(Fluxなど)に統合したいユースケースが存在する場合があります。

必要なアップグレードリソースを取得するには、まず、使用するsuse-edge/fleet-examplesリポジトリのEdgeリリースタグを特定します。

その後、次の場所でリソースを確認できます。

  • RKE2クラスタのアップグレードの場合:

    • control-planeノード用 - fleets/day2/system-upgrade-controller-plans/rke2-upgrade/plan-control-plane.yaml

    • エージェントノード用 - fleets/day2/system-upgrade-controller-plans/rke2-upgrade/plan-agent.yaml

  • K3sクラスタのアップグレードの場合:

    • control-planeノード用 - fleets/day2/system-upgrade-controller-plans/k3s-upgrade/plan-control-plane.yaml

    • agentノード用 - fleets/day2/system-upgrade-controller-plans/k3s-upgrade/plan-agent.yaml

重要
重要

これらのPlanリソースは、system-upgrade-controllerによって解釈され、アップグレードする各ダウンストリームクラスタにデプロイする必要があります。system-upgrade-controllerをデプロイする方法については、25.2.1.3項 「サードパーティのGitOpsワークフローの使用時におけるsystem-upgrade-controllerのデプロイ」を参照してください。

GitOpsワークフローを使用してKubernetesバージョンアップグレード用のSUC Planをデプロイする方法について理解を深めるには、Fleetを使用した更新手順の概要(25.4.3.1項 「概要」)を確認すると役に立ちます。

25.5 Helmチャートのアップグレード

注記
注記

以下の各セクションでは、Fleetの機能を使用してHelmチャートの更新を実現する方法を中心に説明します。

サードパーティのGitOpsワークフローを採用するユーザは、fleets/day2/chart-templates/<chart-name>にあるfleet.yamlから目的のHelmチャートの設定を取得する必要があります。有効な「Day 2」Edgeリリースからチャートデータを取得してください。

25.5.1 コンポーネント

この操作には、デフォルトのDay 2コンポーネント(25.1.1項 「コンポーネント」)以外のカスタムコンポーネントは不要です。

25.5.2 エアギャップ環境の準備

25.5.2.1 Helmチャートのアップグレードfleet.yamlファイルにアクセスできることの確認

必要なリソースを管理クラスタがアクセスできるローカルGitサーバにホストします。

25.5.2.2 Edgeリリースバージョンに必要なアセットの検索

  1. Day 2リリースのページに移動し、チャートのアップグレード先のEdge 3.X.Yリリースを見つけ、[Assets (アセット)]をクリックします。

  2. そのリリースの[Assets (アセット)]セクションから、次のファイルをダウンロードします。これは、SUSEがサポートするHelmチャートのエアギャップアップグレードに必要です。

    リリースファイル

    説明

    edge-save-images.sh

    このスクリプトは、ファイルedge-release-images.txtに記載されたイメージをプルし、エアギャップ環境で使用できる「.tar.gz」アーカイブに保存します。

    edge-save-oci-artefacts.sh

    このスクリプトは、ファイルedge-release-helm-oci-artefacts.txtに記載されたSUSE OCIチャートアーティファクトを取得し、その他すべてのチャートOCIアーカイブを含むディレクトリの「.tar.gz」アーカイブを作成します。

    edge-load-images.sh

    このスクリプトは、edge-save-images.shによって生成された「.tar.gz」アーカイブのイメージを読み込み、そのイメージに再度タグを付けて、プライベートレジストリにプッシュします。

    edge-load-oci-artefacts.sh

    このスクリプトは、「.tgz」SUSE OCIチャートを含むディレクトリを取得し、すべてのOCIチャートをプライベートレジストリに読み込みます。ディレクトリは、edge-save-oci-artefacts.shスクリプトによって生成された「.tar.gz」アーカイブから取得されます。

    edge-release-helm-oci-artefacts.txt

    このファイルには、SUSE EdgeリリースHelmチャートのOCIアーティファクトが含まれています。

    edge-release-images.txt

    このファイルには、EdgeリリースHelmチャートに必要なイメージのリストが含まれています。

25.5.2.3 SUSE Edgeリリースイメージのアーカイブの作成

インターネットにアクセスできるマシンで次の手順を実行します。

  1. edge-save-images.shを実行可能にします。

    chmod +x edge-save-images.sh
  2. edge-save-images.shスクリプトを使用して、Dockerのインポート可能な「.tar.gz」アーカイブを作成します。

    ./edge-save-images.sh --source-registry registry.suse.com
  3. -i|--imagesオプションを指定していない場合、すぐに読み込めるedge-images.tar.gzアーカイブが必要なイメージとともに作成されます。

  4. このアーカイブをエアギャップマシンにコピーします

    scp edge-images.tar.gz <user>@<machine_ip>:/path

25.5.2.4 SUSE Edge HelmチャートOCIイメージのアーカイブの作成

インターネットにアクセスできるマシンで次の手順を実行します。

  1. edge-save-oci-artefacts.shを実行可能にします。

    chmod +x edge-save-oci-artefacts.sh
  2. edge-save-oci-artefacts.shスクリプトを使用して、すべてのSUSE Edge HelmチャートOCIイメージの「.tar.gz」アーカイブを作成します。

    ./edge-save-oci-artefacts.sh --source-registry registry.suse.com
  3. すべてのSUSE Edge HelmチャートOCIイメージを含むoci-artefacts.tar.gzアーカイブが作成されます。

  4. このアーカイブをエアギャップマシンにコピーします

    scp oci-artefacts.tar.gz <user>@<machine_ip>:/path

25.5.2.5 エアギャップマシンへのSUSE Edgeリリースイメージの読み込み

エアギャップマシンで次の手順を実行します。

  1. プライベートレジストリにログインします(必要な場合)。

    podman login <REGISTRY.YOURDOMAIN.COM:PORT>
  2. edge-load-images.shを実行可能にします。

    chmod +x edge-load-images.sh
  3. edge-load-images.shを使用して、コピーした edge-images.tar.gzアーカイブからイメージを読み込み、そのイメージに再度タグを付けて、プライベートレジストリにプッシュします。

    ./edge-load-images.sh --source-registry registry.suse.com --registry <REGISTRY.YOURDOMAIN.COM:PORT> --images edge-images.tar.gz

25.5.2.6 エアギャップマシンへのSUSE Edge HelmチャートOCIイメージの読み込み

エアギャップマシンで次の手順を実行します。

  1. プライベートレジストリにログインします(必要な場合)。

    podman login <REGISTRY.YOURDOMAIN.COM:PORT>
  2. edge-load-oci-artefacts.shを実行可能にします。

    chmod +x edge-load-oci-artefacts.sh
  3. コピーしたoci-artefacts.tar.gzアーカイブをuntarします。

    tar -xvf oci-artefacts.tar.gz
  4. 命名テンプレートedge-release-oci-tgz-<date>を含むディレクトリが生成されます。

  5. このディレクトリをedge-load-oci-artefacts.shスクリプトに渡し、SUSE Edge HelmチャートOCIイメージをプライベートレジストリに読み込みます。

    注記
    注記

    このスクリプトは、Helm CLIが環境にプリインストールされていることを想定しています。Helmのインストール手順については、「Helmのインストール」を参照してください。

    ./edge-load-oci-artefacts.sh --archive-directory edge-release-oci-tgz-<date> --registry <REGISTRY.YOURDOMAIN.COM:PORT> --source-registry registry.suse.com

25.5.2.7 Kubernetesディストリビューションのプライベートレジストリを指すレジストリミラーの作成

RKE2の場合は、「Containerd Registry Configuration (Containerdレジストリの設定)」を参照してください。

K3sの場合は、「埋め込みレジストリミラー」を参照してください。

25.5.3 アップグレード手順

注記
注記

以下のアップグレード手順は、RancherのFleet (第6章 「Fleet)機能を利用します。サードパーティのGitOpsワークフローを使用するユーザは、33.1項 「要約」から各Edgeリリースでサポートされるチャートバージョンを取得し、そのバージョンをサードパーティのGitOpsワークフローに入力する必要があります。

このセクションでは、Helmアップグレード手順の次のユースケースを中心に説明します。

  1. 新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい(25.5.3.1項 「新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい場合」)

  2. Fleetで管理されているHelmチャートをアップグレードしたい(25.5.3.2項 「Fleetで管理されているHelmチャートをアップグレードしたい場合」)

  3. EIBで作成されたHelmチャートをアップグレードしたい(25.5.3.3項 「EIBで作成されたHelmチャートをアップグレードしたい場合」)

重要
重要

手動でデプロイしたHelmチャートを確実にアップグレードすることはできません。25.5.3.1項 「新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい場合」で説明する方法を使用してHelmチャートを再デプロイすることをお勧めします。

25.5.3.1 新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい場合

Fleetを使用してHelmチャートのライフサイクルを管理したいユーザが対象です。

25.5.3.1.1 Fleetリソースの準備
  1. チャートのFleetリソースを、使用するEdgeリリースタグから取得します。

    1. 選択したEdgeリリースタグのリビジョンから、HelmチャートのFleet (fleets/day2/chart-templates/<chart>)に移動します。

    2. チャートのFleetディレクトリを、GitOpsワークフローで使用するGitリポジトリにコピーします。

    3. (任意) Helmチャートでを設定する必要がある場合は、コピーしたディレクトリのfleet.yamlファイルに含まれる設定.helm.valuesを編集します。

    4. (任意) 環境に合わせて、チャートのFleetにリソースを追加しなければならないユースケースがあります。Fleetディレクトリを拡張する方法については、「Git Repository Contents (Gitリポジトリのコンテンツ)」を参照してください。

longhorn Helmチャートのは次のようになります。

  • ユーザのGitリポジトリの構造:

    <user_repository_root>
    └── longhorn
        └── fleet.yaml
  • ユーザのlonghornデータが入力されたfleet.yaml の内容:

    defaultNamespace: longhorn-system
    
    helm:
      releaseName: "longhorn"
      chart: "longhorn"
      repo: "https://charts.longhorn.io"
      version: "1.6.1"
      takeOwnership: true
      # custom chart value overrides
      values:
        # Example for user provided custom values content
        defaultSettings:
          deletingConfirmationFlag: true
    
    # https://fleet.rancher.io/bundle-diffs
    diff:
      comparePatches:
      - apiVersion: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        name: engineimages.longhorn.io
        operations:
        - {"op":"remove", "path":"/status/conditions"}
        - {"op":"remove", "path":"/status/storedVersions"}
        - {"op":"remove", "path":"/status/acceptedNames"}
      - apiVersion: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        name: nodes.longhorn.io
        operations:
        - {"op":"remove", "path":"/status/conditions"}
        - {"op":"remove", "path":"/status/storedVersions"}
        - {"op":"remove", "path":"/status/acceptedNames"}
      - apiVersion: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        name: volumes.longhorn.io
        operations:
        - {"op":"remove", "path":"/status/conditions"}
        - {"op":"remove", "path":"/status/storedVersions"}
        - {"op":"remove", "path":"/status/acceptedNames"}
    注記
    注記

    これらは値の例であり、longhornチャートのカスタム設定を示すために使用しているだけです。longhornチャートのデプロイメントのガイドラインと「みなさない」でください。

25.5.3.1.2 GitRepoの作成

リポジトリにチャートのFleetリソースを入力した後、GitRepoリソースを作成する必要があります。このリソースは、チャートのFleetリソースへのアクセス方法と、これらのリソースを適用する必要があるクラスタに関する情報を保持します。

GitRepoリソースは、Rancher UIを使用するか、リソースを管理クラスタに手動でデプロイすることによって作成できます。

GitRepoリソースを手動で作成してデプロイする方法については、「Creating a Deployment (デプロイメントの作成)」を参照してください。

Rancher UIを使用してGitRepoリソースを作成するには、「Accessing Fleet in the Rancher UI (Rancher UIでのFleetへのアクセス)」を参照してください。

手動デプロイメントのLonghorn GitRepoリソースの例

apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
  name: longhorn-git-repo
  namespace: fleet-default
spec:
  # If using a tag
  # revision: <user_repository_tag>
  #
  # If using a branch
  # branch: <user_repository_branch>
  paths:
  # As seen in the 'Prepare your Fleet resources' example
  - longhorn
  repo: <user_repository_url>
  targets:
  # Match all clusters
  - clusterSelector: {}
25.5.3.1.3 デプロイされたHelmチャートの管理

Fleetでデプロイした後のHelmチャートのアップグレードについては、25.5.3.2項 「Fleetで管理されているHelmチャートをアップグレードしたい場合」を参照してください。

25.5.3.2 Fleetで管理されているHelmチャートをアップグレードしたい場合

  1. チャートのアップグレード後のバージョンを確認し、Edge 3.X.Yリリースとの互換性を確保します。各Edgeリリースに対応するHelmチャートのバージョンは、33.1項 「要約」で確認できます。

  2. Fleetで監視されているGitリポジトリで、Helmチャートのfleet.yamlファイルを、33.1項 「要約」から取得した正しいチャートバージョンリポジトリで編集します。

  3. リポジトリの変更をコミットしてプッシュすると、目的のHelmチャートのアップグレードがトリガされます。

25.5.3.3 EIBで作成されたHelmチャートをアップグレードしたい場合

注記
注記

このセクションでは、system-upgrade-controller (SUC)を事前にデプロイ済みであることを想定しています。まだデプロイしていないか、SUCが必要な理由がわからない場合は、デフォルトのDay 2コンポーネント(25.1.1項 「コンポーネント」)のリストを参照してください。

EIBでは、Helmチャートをデプロイするために、rke2/k3sのマニフェストの自動デプロイ機能を利用します。具体的には、Helmチャートのリソース定義マニフェストを初期化ノードの/var/lib/rancher/<rke2/k3s>/server/manifestsに作成し、rke2/k3sがこれを検出してクラスタ内に自動デプロイします。

Day 2の観点から見ると、これは、特定のチャートのHelmChartマニフェストファイルを編集してHelmチャートをアップグレードする必要があることを意味します。このプロセスを複数のクラスタで自動化するために、このセクションではSUC Planを使用します。

以下に関する情報が提供されています。

25.5.3.3.1 概要

このセクションは、1つまたは複数のHelmチャートをアップグレードするためにユーザが行うワークフローの概要を説明することを意図しています。Helmチャートのアップグレードに必要な手順の詳細な説明については、25.5.3.3.2項 「アップグレード手順」を参照してください。

day2 helmチャートアップグレードの図
図 25.6: Helmチャートのアップグレードワークフロー
  1. このワークフローでは最初に、チャートのアップグレード先にする新しいHelmチャートアーカイブをユーザがプルします。

  2. 続いて、アーカイブをエンコードし、関連するSUC PlanのFleetディレクトリにあるeib-chart-upgrade-user-data.yamlファイルに設定として渡す必要があります。これは、アップグレード手順(25.5.3.3.2項 「アップグレード手順」)のセクションで詳しく説明しています。

  3. ユーザは次の操作に進み、必要なすべてのリソース(SUC Plan、シークレットなど)をダウンストリームクラスタに配布するGitRepoリソースを設定してデプロイします。

    1. リソースはfleet-defaultネームスペースの管理クラスタにデプロイされます。

  4. Fleet (第6章 「Fleet)はデプロイされたリソースを検出し、設定されているすべてのリソースを指定のダウンストリームクラスタにデプロイします。デプロイされたリソースには次のようなものがあります。

    1. eib-chart-upgrade SUC Plan。各ノードにアップグレードPodを作成するためにSUCで使用されます。

    2. eib-chart-upgrade-scriptシークレット。アップグレードPodが初期化ノードでHelmChartマニフェストをアップグレードするために使用するアップグレードスクリプトを配布します。

    3. eib-chart-upgrade-user-dataシークレット。アップグレードする必要があるチャートマニフェストを理解するためにアップグレードスクリプトで使用するチャートデータを配布します。

  5. eib-chart-upgrade SUC Planがデプロイされると、SUCは、アップグレードPodをデプロイするジョブを選択して作成します。

  6. デプロイされると、アップグレードPodは、eib-chart-upgrade-scriptシークレットとeib-chart-upgrade-user-dataシークレットをマウントし、eib-chart-upgrade-scriptシークレットによって配布されるアップグレードスクリプトを実行します。

  7. アップグレードスクリプトは以下を実行します。

    1. スクリプトが実行されているPodが初期化ノードにデプロイされているかどうかを判断します。初期化ノードは、HelmChartマニフェストをホストしているノードです。シングルノードクラスタの場合は、単一のコントロールプレーンノードです。HAクラスタの場合は、EIBでクラスタを作成したときにinitializerとマークされたノードです。initializerプロパティを指定しなかった場合は、nodesリストの最初のノードがinitializerとマークされます。詳細については、EIBのアップストリームドキュメントを参照してください。

      注記
      注記

      アップグレードスクリプトが初期化ノード以外で動作している場合、スクリプトは直ちに実行を停止し、以下の手順には進みません。

    2. 編集するマニフェストをバックアップし、障害復旧を確実に行えるようにします。

      注記
      注記

      デフォルトでは、マニフェストのバックアップは、/tmp/eib-helm-chart-upgrade-<date>ディレクトリに保存されます。カスタムの場所を使用する場合、MANIFEST_BACKUP_DIR環境変数をHelmチャートアップグレードSUC Planに渡すことができます(Planの例)。

    3. HelmChartマニフェストを編集します。このバージョンの時点で、チャートアップグレードをトリガするために、次のプロパティが変更されます。

      1. chartContentプロパティの内容は、eib-chart-upgrade-user-dataシークレットで指定されているエンコードされたアーカイブに置き換えられます。

      2. versionプロパティの値は、eib-chart-upgrade-user-dataシークレットで指定されているバージョンに置き換えられます。

  8. アップグレードスクリプトが正常に実行されると、RKE2/K3sのHelm統合が変更を検出し、Helmチャートのアップグレードを自動的にトリガします。

25.5.3.3.2 アップグレード手順
  1. Helmチャートアップグレードのロジックのコピー元のEdge リリースタグを特定します。

  2. fleets/day2/system-upgrade-controller-plans/eib-chart-upgrade Fleetを、FleetでGitOpsを行うために使用するリポジトリにコピーします。

  3. アップグレード先のHelmチャートアーカイブをプルします。

    helm pull [chart URL | repo/chartname]
    
    # Alternatively if you want to pull a specific version:
    # helm pull [chart URL | repo/chartname] --version 0.0.0
  4. プルしたチャートアーカイブをエンコードします。

    # Encode the archive and disable line wrapping
    base64 -w 0 <chart-archive>.tgz
  5. 手順2でコピーしたeib-chart-upgrade Fleetにあるeib-chart-upgrade-user-data.yamlシークレットを設定します。

    1. このシークレットは、chart_upgrade_data.txtというファイルを配布します。このファイルにはチャートアップグレードのデータが保持されており、アップグレードスクリプトではこのデータを使用して、アップグレードする必要があるチャートを把握します。このファイルではチャートエントリにつき1行が必要で、形式は「<name>|<version>|<base64_encoded_archive>」です。

      1. name - EIB定義ファイルのkubernetes.helm.charts.name[]プロパティに表示される、Helmチャートの名前です。

      2. version - Helmチャートの新しいバージョンを保持する必要があります。アップグレード時に、この値を使用してHelmChartマニフェストの古いversionを置き換えます。

      3. base64_encoded_archive - ここでbase64 -w 0 <chart-archive>.tgzの出力を渡します。アップグレード時に、この値を使用してHelmChartマニフェストの古いchartContent値を置き換えます。

        注記
        注記

        <name>|<version>|<base64_encoded_archive>の行は、データの追加を始める前にファイルから削除する必要があります。この行は、チャートデータをどこで、どのように設定する必要があるかの例を示すためのものです。

  6. チャートアップグレードのfleetを配布するGitRepoリソースを設定します。GitRepoの詳細については、「GitRepo Resource (GitRepoリソース)」を参照してください。

    1. Rancher UIを使用してGitRepoを設定します。

      1. 左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。

      2. [Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。

      3. ここで、リポジトリデータパスをチャートのアップグレードFleetに渡します。

      4. [Next (次へ)]を選択し、設定されたチャートをアップグレードするターゲットクラスタを指定します。

      5. 作成します

    2. お使いのセットアップでRancherを使用できない場合は、管理クラスタGitRepoを手動で設定できます。

      1. 次のテンプレートにデータを入力します。

        apiVersion: fleet.cattle.io/v1alpha1
        kind: GitRepo
        metadata:
          name: CHANGE_ME
          namespace: fleet-default
        spec:
          # if running from a tag
          # revision: CHANGE_ME
          # if running from a branch
          # branch: CHANGE_ME
          paths:
          # path to your chart upgrade fleet relative to your repository
          - CHANGE_ME
          # your repository URL
          repo: CHANGE_ME
          targets:
          # Select target clusters
          - clusterSelector: CHANGE_ME
          # To match all clusters:
          # - clusterSelector: {}

        GitRepoリソースのセットアップとデプロイの方法の詳細については、「GitRepo Resource (GitRepoリソース)」および「Create a GitRepo Resource (GitRepoリソースの作成)」を参照してください。

        より細かいレベルでターゲットクラスタに一致させる方法については、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。

      2. 設定したGitRepoリソースを管理クラスタfleet-defaultネームスペースにデプロイします。

この手順を実行すると、GitRepoリソースが正常に作成されるはずです。続いてこのリソースがFleetによって検出されて、バンドルが作成されます。このバンドルには、GitRepoがFleetディレクトリの下に設定した「生」のKubernetesリソースが保持されます。

次にFleetは、すべてのKubernetesリソースをバンドルから指定のダウンストリームクラスタにデプロイします。このリソースの1つは、チャートのアップグレードをトリガするSUC Planです。デプロイされるリソースのリストとアップグレードプロセスのワークフローについては、「概要」(25.5.3.3.1項 「概要」)のセクションを参照してください。

アップグレードプロセス自体を追跡するには、「SUC Planの監視」(25.2.2.2項 「SUC Planの監視」)のセクションを参照してください。

25.5.3.3.3

次のセクションは、25.5.3.3.2項 「アップグレード手順」セクションに実際の例を提供することを目的としています。

EIBでデプロイされた次の2つのクラスタがあります。

  • longhorn-single-k3s - シングルノードK3sクラスタ

  • longhorn-ha-rke2 - HA RKE2クラスタ

どちらのクラスタでもLonghornが実行されており、次のイメージ定義スニペットを使用してEIBによってデプロイされています。

kubernetes:
  # HA RKE2 cluster specific snippet
  # nodes:
  # - hostname: cp1rke2.example.com
  #   initializer: true
  #   type: server
  # - hostname: cp2rke2.example.com
  #   type: server
  # - hostname: cp3rke2.example.com
  #   type: server
  # - hostname: agent1rke2.example.com
  #   type: agent
  # - hostname: agent2rke2.example.com
  #   type: agent
  # version depending on the distribution
  version: v1.28.9+k3s1/v1.28.9+rke2r1
  helm:
    charts:
    - name: longhorn
      repositoryName: longhorn
      targetNamespace: longhorn-system
      createNamespace: true
      version: 1.5.5
    repositories:
    - name: longhorn
      url: https://charts.longhorn.io
...
day2 helmチャートアップグレード例 k3s 古い
図 25.7: longhorn-single-k3sにインストールされているLonghornバージョン
day2 helmチャートアップグレード例rke2古い
図 25.8: longhorn-ha-rke2にインストールされているLonghornバージョン

ここでの問題は、現在のところlonghorn-single-k3slonghorn-ha-rke2がどのEdgeリリースとも互換性のないLonghornバージョンで実行されていることです。

両方のクラスタのチャートをEdgeでサポートされるLonghornバージョンにアップグレードする必要があります。

これを実行するには、次の手順を実行します。

  1. アップグレードロジックを取得するEdgeリリースタグを特定します。たとえば、この例では、サポートされているLonghornバージョンが1.6.1であるrelease-3.0.1リリースタグを使用します。

  2. release-3.0.1リリースタグのクローンを作成し、fleets/day2/system-upgrade-controller-plans/eib-chart-upgradeディレクトリを自身のリポジトリにコピーします。

    単純化するために、このセクションではsuse-edge/fleet-examplesリポジトリのブランチから作業します。したがって、ディレクトリ構造は同じですが、eib-chart-upgrade Fleetはリポジトリ内の任意の場所に配置できます。

    ディレクトリ構造の例. 

    .
    ...
    |-- fleets
    |   `-- day2
    |       `-- system-upgrade-controller-plans
    |           `-- eib-chart-upgrade
    |               |-- eib-chart-upgrade-script.yaml
    |               |-- eib-chart-upgrade-user-data.yaml
    |               |-- fleet.yaml
    |               `-- plan.yaml
    ...

  3. Longhornチャートリポジトリを追加します。

    helm repo add longhorn https://charts.longhorn.io
  4. Longhornチャートバージョン1.6.1をプルします。

    helm pull longhorn/longhorn --version 1.6.1

    Longhornがlonghorn-1.6.1.tgzという名前のアーカイブとしてプルされます。

  5. Longhornアーカイブをエンコードします。

    base64 -w 0 longhorn-1.6.1.tgz

    アーカイブがbase64でエンコードされた長い1行の文字列で出力されます。

  6. eib-chart-upgrade-user-data.yamlファイルを設定するために必要なデータがすべて揃いました。ファイル設定は次のようになります。

    apiVersion: v1
    kind: Secret
    metadata:
      name: eib-chart-upgrade-user-data
    type: Opaque
    stringData:
      # <name>|<version>|<base64_encoded_archive>
      chart_upgrade_data.txt: |
        longhorn|1.6.1|H4sIFAAAAAAA/ykAK2FIUjBjSE02THk5NWIzV...
    1. longhornは、EIB定義ファイルにあるチャートの名前です。

    2. 1.6.1は、Longhorn HelmChartマニフェストのversionプロパティのアップグレード先のバージョンです。

    3. H4sIFAAAAAAA/ykAK2FIUjBjSE02THk5NWIzV…​は、エンコードされたLonghorn 1.6.1アーカイブのスニペットです。スニペットがここに追加されているのは読みやすくするためです。ここには必ず、base64エンコードアーカイブの文字列全体を追加してください。

      注記
      注記

      この例は、1つのチャートのアップグレードの設定を示していますが、複数のクラスタで複数のチャートをアップグレードする必要がある場合、以下に示すように追加のチャートデータを付加できます。

      apiVersion: v1
      kind: Secret
      metadata:
        name: eib-chart-upgrade-user-data
      type: Opaque
      stringData:
        # <name>|<version>|<base64_encoded_archive>
        chart_upgrade_data.txt: |
          chartA|0.0.0|<chartA_base64_archive>
          chartB|0.0.0|<chartB_base64_archive>
          chartC|0.0.0|<chartC_base64_archive>
          ...
  7. また、マニフェストのバックアップを/tmpに保持しないことにしたため、次の設定がplan.yamlファイルに追加されました。

    apiVersion: upgrade.cattle.io/v1
    kind: Plan
    metadata:
      name: eib-chart-upgrade
    spec:
      ...
      upgrade:
        ...
        # For when you want to backup your chart
        # manifest data under a specific directory
        #
        envs:
        - name: MANIFEST_BACKUP_DIR
          value: "/root"

    これにより、マニフェストのバックアップは、/tmpではなく/rootディレクトリに保存されます。

  8. これで必要な設定はすべて完了したので、後はGitRepoリソースを作成するだけです。この例では、Rancher UIを使用してGitRepoリソースを作成します。

  9. アップグレード手順(25.5.3.3.2項 「アップグレード手順」)で説明されている手順に従い、次の項目を実行しました。

    1. GitRepoに「longhorn-upgrade」という名前を付けました。

    2. 使用するリポジトリにURLを渡しました - https://github.com/suse-edge/fleet-examples.git

    3. リポジトリのブランチを渡しました - 「doc-example」。

    4. リポジトリのとおりにeib-chart-upgradeフリートへのパスを渡しました - fleets/day2/system-upgrade-controller-plans/eib-chart-upgrade

    5. ターゲットクラスタを選択し、リソースを作成しました。

      day2 helmチャートアップグレード例gitrepo
      図 25.9: 正常にデプロイされたSUCとlonghorn GitRepo

続いてクラスタでアップグレード手順を監視する必要があります。

  1. 「SUC Planの監視」(25.2.2.2項 「SUC Planの監視」)のセクションの指示に従い、アップグレードPodのステータスを確認します。

    1. 初期化ノードで動作している、正常に完了したアップグレードPodには、次のようなログが保持されているはずです。

      day2 helmチャートアップグレード例の初期化ノードログ
      図 25.10: 初期化ノードで実行されているアップグレードPod
    2. 非初期化ノードで動作している、正常に完了したアップグレードPodには、次のようなログが保持されているはずです。

      day2 helmチャートアップグレード例の非初期化ノードログ
      図 25.11: 非初期化ノードで実行されているアップグレードPod
  2. アップグレードPodが正常に完了した後は、Helmコントローラによって作成されるPodについても待機して監視する必要があります。これらのPodは、アップグレードPodHelmChartマニフェストファイルに加えたファイルの変更に基づいて、実際のアップグレードを行います。

    1. クラスタ内で[Workloads (ワークロード)] → [Pods]にアクセスし、文字列longhornを含むPodをdefaultネームスペース内で検索します。これにより、命名テンプレートhelm-install-longhorn-*を使用してPodが生成されます。このPodのログを確認します。

      day2 helmチャートアップグレード例のhelmインストール
      図 25.12: 正常に完了したhelm-install Pod
    2. ログは次のようになります。

      day2 helmチャートアップグレード例の正常にアップグレードされたPod
      図 25.13: 正常に完了したhelm-install Podのログ

すべてが正常に完了したことを確認したので、次にバージョン変更を検証する必要があります。

  1. クラスタ上で、[More Resources (追加のリソース)] → [Helm] → [HelmCharts]に移動し、longhorn HelmChartリソースをdefaultネームスペース内で検索する必要があります。

    day2 helmチャートアップグレード例のk3s longhornアップグレード
    図 25.14: longhorn-single-k3のアップグレードされたLonghornバージョン
    day2 helmチャートアップグレード例のrke2 longhornアップグレード
    図 25.15: longhorn-ha-rke2のアップグレードされたLonghornバージョン

これにより、Longhorn helmチャートが正常にアップグレードされたことを確認します。以上でこの例は完了です。

何かの理由でLonghornの以前のチャートバージョンに戻す必要がある場合、以前のLonghornマニフェストは、初期化ノードの/root/longhorn.yamlに保存されています。これは、SUC PlanでMANIFEST_BACKUP_DIRを指定したためです。

25.5.3.3.4 サードパーティのGitOpsツールを使用したHelmチャートのアップグレード

ユーザがこのアップグレード手順をFleet以外のGitOpsワークフロー(Fluxなど)で実行したいユースケースが存在する場合があります。

EIBでデプロイされたHelmチャートのアップグレードに関連するリソースを取得するには、まず、使用するsuse-edge/fleet-examplesリポジトリのEdgeリリースタグを特定する必要があります。

その後、fleets/day2/system-upgrade-controller-plans/eib-chart-upgradeでリソースを見つけることができます。

  • plan.yaml - アップグレード手順に関連するsystem-upgrade-controller Plan。

  • eib-chart-upgrade-script.yaml - HelmChartマニフェストファイルを編集してアップグレードするアップグレードスクリプトを保持しているシークレット。

  • eib-chart-upgrade-user-data.yaml - アップグレードスクリプトが利用するファイルを保持しているシークレット。関連するチャートアップグレードデータがあらかじめユーザによって入力されています。

重要
重要

これらのPlanリソースはsystem-upgrade-controllerによって解釈され、アップグレードが必要なチャートを保持する各ダウンストリームクラスタにデプロイする必要があります。system-upgrade-controllerをデプロイする方法については、25.2.1.3項 「サードパーティのGitOpsワークフローの使用時におけるsystem-upgrade-controllerのデプロイ」を参照してください。

GitOpsワークフローを使用してアップグレードプロセス用のSUC Planをデプロイする方法の理解を深めるには、 Fleetを使用したプロセスの概要(25.5.3.3.1項 「概要」)を確認すると役に立ちます。