25 ダウンストリームクラスタ #
このセクションでは、管理クラスタ
を使用して、ダウンストリームクラスタのさまざまな部分に対して、各種のDay
2
操作を行う方法について説明します。
25.1 はじめに #
このセクションは、Day 2
操作に関するドキュメントの「出発点」となることを目的としています。次の情報を確認できます。
複数のダウンストリームクラスタで
Day 2
操作を実行するために使用するデフォルトコンポーネント(25.1.1項 「コンポーネント」)。自身の特定のユースケース(25.1.2項 「ユースケースの決定」)にどの
Day 2
リソースを使用するかの判断。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
、具体的にはGitRepo
とBundle
リソース(この詳細は25.1.2項 「ユースケースの決定」で詳しく説明します)に大きく依存しています。
サードパーティのGitOpsツールの使用が必要なユースケースの場合は、以下を参照してください。
OSパッケージの更新
の場合 - 25.3.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」Kubernetesディストリビューションの更新
の場合 - 25.4.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」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
ワークフローを示します。
OSパッケージの更新(25.3項 「OSパッケージの更新」)
Kubernetesバージョンアップグレード(25.4項 「Kubernetesバージョンアップグレード」)
Helmチャートのアップグレード(25.5項 「Helmチャートのアップグレード」)
25.2 システムアップグレードコントローラのデプロイメントガイド #
system-upgrade-controller (SUC)は、Planと呼ばれるカスタムリソースで定義された設定に基づいてクラスタの特定のノード上にリソースをデプロイする役割を担います。詳細については、アップストリームドキュメントを参照してください。
このセクションは、system-upgrade-controller
のデプロイにのみ焦点を当てています。Planリソースは次のドキュメントからデプロイする必要があります。
OSパッケージの更新(25.3項 「OSパッケージの更新」)
Kubernetesバージョンアップグレード(25.4項 「Kubernetesバージョンアップグレード」)
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
は、次の方法のいずれかで作成できます。
Rancher UI (25.2.1.1.1項 「GitRepoのデプロイメント - Rancher UI」)を使用する(
Rancher
が利用可能な場合)リソースを
管理クラスタ
に手動でデプロイする(25.2.1.1.2項 「GitRepoの作成 - 手動」)
作成されると、Fleet
は、リソースを取得し、SUCリソースをすべてのターゲットクラスタにデプロイする役割を担います。デプロイメントプロセスを追跡する方法については、25.2.2.1項 「SUCデプロイメントの監視」を参照してください。
25.2.1.1.1 GitRepoのデプロイメント - Rancher UI #
左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。
[Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。
suse-edge/fleet-examples
リポジトリを使用する場合:
Repository URL (リポジトリのURL) -
https://github.com/suse-edge/fleet-examples.git
[Watch (ウォッチ)]→[Revision (リビジョン)] - 使用する
suse-edge/fleet-examples
リポジトリのリリースタグを選択します(release-3.0.1
など)。[Paths (パス)]の下に、system-upgrade-controllerへのパスを、リリースタグ -
fleets/day2/system-upgrade-controller
のとおりに追加します。[Next (次へ)]を選択して、ターゲットの設定セクションに移動します。
system-upgrade-controller
をデプロイするクラスタのみを選択します。 設定に問題がなければ、[Create (作成)]をクリックします。
または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。
25.2.1.1.2 GitRepoの作成 - 手動 #
SUC
GitRepo
のデプロイ元にする、目的のEdgeリリース タグを選択します(以下では${REVISION}
として参照)。GitRepoリソースをプルします。
curl -o system-upgrade-controller-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/{REVISION}/gitrepos/day2/system-upgrade-controller-gitrepo.yaml
GitRepoの設定を編集し、
spec.targets
に目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のGitRepo
リソースはダウンストリームクラスタにマップ「されません」。すべてのクラスタに一致させるには、デフォルトの
GitRepo
ターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより詳細に選択する必要がある場合は、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。
GitRepoリソースを
管理クラスタ
に適用します。kubectl apply -f system-upgrade-controller-gitrepo.yaml
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
リポジトリを使用している場合は、必ず、専用のリリースタグのリソースを使用してください。
バンドル
は次のいずれかの方法で作成できます。
Rancher UI(25.2.1.2.1項 「バンドルの作成 - Rancher UI」)を使用する(
Rancher
が利用可能な場合)リソースを
管理クラスタ
に手動でデプロイする(25.2.1.2.2項 「バンドルの作成 - 手動」)
作成されると、Fleet
は、リソースを取得し、 SUCリソースをすべてのターゲットクラスタにデプロイする役割を担います。デプロイメントプロセスを追跡する方法については、25.2.2.1項 「SUCデプロイメントの監視」を参照してください。
25.2.1.2.1 バンドルの作成 - Rancher UI #
左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。
[Advanced (詳細)]>[Bundles (バンドル)] に移動します。
[Create from YAML (YAMLから作成)]を選択します。
ここから次のいずれかの方法でバンドルを作成できます。
ファイルコンテンツを[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から作成)]ページにバンドルコンテンツが自動的に入力されます。
バンドル
のターゲットクラスタを次のように変更します。すべてのダウンストリームクラスタに一致させるには、デフォルトのバンドル
.spec.targets
を次のように変更します。spec: targets: - clusterSelector: {}
より細かくダウンストリームクラスタにマッピングするには、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。
作成します
25.2.1.2.2 バンドルの作成 - 手動 #
SUC
バンドル
のデプロイ元にするEdgeリリースタグを選択します(以下では${REVISION}
として参照)。バンドルリソースをプルします。
curl -o controller-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/bundles/day2/system-upgrade-controller/controller-bundle.yaml
バンドル
のターゲット設定を編集し、spec.targets
に目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のバンドル
リソースは、どのダウンストリームクラスタにもマップ「されません」。すべてのクラスタに一致させるには、デフォルトの
バンドル
のターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより詳細に選択する必要がある場合は、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。
バンドルリソースを
管理クラスタ
に適用します。kubectl apply -f controller-bundle.yaml
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.ymal
のhelm
設定セクションで見つけることができます。
SUCのKubernetesリソースは、.spec.resources.content
のSUCバンドル
設定にあります。バンドルの場所は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のログを確認するには、次の手順を実行します。
25.2.2.2 SUC Planの監視 #
SUC PlanのPodの存続時間は15分です。この時間を過ぎると、Podを作成した該当するジョブにより削除されます。SUC PlanのPodのログにアクセスするには、クラスタのログを有効にする必要があります。Rancherでログを有効にする方法については、「Rancher Integration with Logging Services (Rancherとログサービスの統合)」を参照してください。
特定のSUC PlanのPodのログを確認するには、次の手順を実行します。
左上隅で、☰ → <クラスタ名>を選択します。
[Workloads (ワークロード)] → [Pods]を選択します。
ネームスペースのドロップダウンメニューで、
cattle-system
ネームスペースを選択します。[Pods]フィルタバーにSUC Plan Podの名前を入力します。名前は
apply-<plan_name>-on-<node_name>
のテンプレート形式に従います。図 25.1: KubernetesアップグレードPlanのPodの例 #図1に注目してください。一方のPodが[Completed (完了)]、他方が[Unknown (不明)]になっています。これは想定内であり、ノードのKubernetesバージョンアップグレードによるものです。
図 25.2: OSパッケージ更新PlanのPodの例 #図 25.3: EIBによってHAクラスタにデプロイされるHelmチャートのアップグレードPlanのPodの例 #ログを確認する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 要件 #
全般:
SCC登録マシン - すべてのダウンストリームクラスタノードは、
https://scc.suse.com/
に登録する必要があります。これは、edge-update.service
を必要なOS RPMリポジトリに正しく接続するために必要です。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" ...
エアギャップ:
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は次の方法で配布されます。
GitRepo
リソースを使用する - 25.3.4.1項 「SUC Planのデプロイメント - GitRepoリソース」バンドル
リソースを使用する - 25.3.4.2項 「SUC Planのデプロイメント - バンドルリソース」
どのリソースを使用すべきかを判断するには、25.1.2項 「ユースケースの決定」を参照してください。
更新手順中の処理の概要については、25.3.3.1項 「概要」のセクションを参照してください。
25.3.3.1 概要 #
このセクションは、OSパッケージの更新プロセスが開始から終了までに経由するワークフロー全体について説明することを目的としています。
OSパッケージの更新手順:
ユーザは、
OSパッケージの更新SUC Plan
を目的のダウンストリームクラスタにデプロイするために、GitRepoリソースを使用するか、それともバンドルリソースを使用するかをそのユースケースに基づいて判断します。GitRepo/バンドルを特定のダウンストリームクラスタセットにマップする方法の詳細については、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。SUC PlanのデプロイメントにGitRepoリソースまたはバンドルリソースのどちらを使用すべきかわからない場合は、25.1.2項 「ユースケースの決定」を参照してください。
GitRepo/バンドルの設定オプションについては、25.3.4.1項 「SUC Planのデプロイメント - GitRepoリソース」または25.3.4.2項 「SUC Planのデプロイメント - バンドルリソース」を参照してください。
ユーザは、設定したGitRepo/バンドルリソースを
管理クラスタ
のfleet-default
のネームスペースにデプロイします。これは、手動で実行するか、Rancher UI (利用可能な場合)を使用して実行します。Fleet (第6章 「Fleet」)は、
fleet-default
ネームスペースを絶えず監視し、新しくデプロイされたGitRepo/バンドルリソースをすぐに検出します。Fleetが監視するネームスペースの詳細については、Fleetの「Namespaces (ネームスペース)」のドキュメントを参照してください。ユーザがGitRepoリソースをデプロイした場合、
Fleet
は、GitRepoを調整し、そのパスとfleet.yamlの設定に基づいて、バンドルリソースをfleet-default
ネームスペースにデプロイします。詳細については、Fleetの「Git Repository Contents (Gitリポジトリの内容)」のドキュメントを参照してください。Fleet
は続いて、Kubernetesリソース
をこのバンドルから、ターゲットとするすべてのダウンストリームクラスタ
にデプロイします。OSパッケージの更新
のコンテキストでは、Fleetは、次のリソースをバンドルからデプロイします。os-pkg-plan-agent
SUC Plan - クラスタのエージェントノード上でパッケージの更新を行う方法をSUCに指示します。 クラスタがcontrol-planeノードのみで構成されている場合は、解釈「されません」。os-pkg-plan-control-plane
SUC Plan - クラスタのcontrol-planeノードに対してパッケージの更新を実行する方法をSUCに指示します。os-pkg-update
シークレット - 各SUC Planで参照され、実際にパッケージの更新を実行するedge-update.service
sustemd.serviceを作成するupdate.sh
スクリプトを配布します。注記上記のリソースは、各ダウンストリームクラスタの
cattle-system
ネームスペースにデプロイされます。
ダウンストリームクラスタで、SUCは、新しくデプロイされたSUC Planを検出し、 SUC Planで定義されたノードセレクタと一致する各ノードに更新Podをデプロイします。SUC Plan Podを監視する方法については、25.2.2.2項 「SUC Planの監視」を参照してください。
更新Pod (各ノードにデプロイ)は、
os-pkg-update
シークレットをマウントし、シークレットによって配布されるupdate.sh
スクリプトを実行します。update.sh
は、処理を進めて以下を実行します。edge-update.service
の作成 - 作成されるサービスはワンショットのタイプで、次のワークフローを採用します。以下を実行して、ノードのOS上のすべてのパッケージバージョンを更新します。
transactional-update cleanup dup
transactional-update
が正常に実行されたら、システムの再起動をスケジュールして、パッケージバージョンの更新を有効にできるようにします。注記システムの再起動は、
transactional-update
が正常に実行されてから1分の間にスケジュールされます。
edge-update.service
を起動し、完了するまで待機します。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リソースは、次のいずれかの方法でデプロイできます。
Rancher UI
を使用する - 25.3.4.1.1項 「GitRepoの作成 - Rancher UI」 (Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(25.3.4.1.2項 「GitRepoの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのOSパッケージの更新プロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。
25.3.4.1.1 GitRepoの作成 - Rancher UI #
左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。
[Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。
suse-edge/fleet-examples
リポジトリを使用する場合:
Repository URL (リポジトリのURL) -
https://github.com/suse-edge/fleet-examples.git
[Watch (ウォッチ)] → [Revision (リビジョン)] - 使用する
suse-edge/fleet-examples
リポジトリのリリースタグを選択します。[Paths (パス)]に、使用するOSパッケージ更新用のFleetのパス
fleets/day2/system-upgrade-controller-plans/os-pkg-update
を追加します。[Next (次へ)]を選択してターゲットの設定セクションに移動します。アップグレードするノードのパッケージを含むクラスタのみを選択してください。
作成します
または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。
25.3.4.1.2 GitRepoの作成 - 手動 #
OSのSUC更新Planの適用元にするEdgeリリースタグを選択します(以下では
${REVISION}
として参照)。GitRepoリソースをプルします。
curl -o os-pkg-update-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/${REVISION}/gitrepos/day2/os-pkg-update-gitrepo.yaml
GitRepo設定を編集し、
spec.targets
で目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のGitRepo
リソースはどのダウンストリームクラスタにもマップ「されません」。すべてのクラスタ変更に一致させるには、デフォルトの
GitRepo
ターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください
GitRepoリソースを
管理クラスタ
に適用します。kubectl apply -f os-pkg-update-gitrepo.yaml
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を配布するバンドルリソースは、次のいずれかの方法でデプロイできます。
Rancher UI
を使用する - 25.3.4.2.1項 「バンドルの作成 - Rancher UI」 (Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(25.3.4.2.2項 「バンドルの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのOSパッケージの更新プロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。
25.3.4.2.1 バンドルの作成 - Rancher UI #
左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。
[Advanced (詳細)]>[Bundles (バンドル)] に移動します。
[Create from YAML (YAMLから作成)]を選択します。
ここから次のいずれかの方法でバンドルを作成できます。
バンドルコンテンツを[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のリリースです。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から作成)]ページにバンドルコンテンツが自動的に入力されます。
バンドル
のターゲットクラスタを次のように変更します。すべてのダウンストリームクラスタに一致させるには、デフォルトのバンドル
.spec.targets
を次のように変更します。spec: targets: - clusterSelector: {}
より細かくダウンストリームクラスタにマッピングするには、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。
[Create (作成)]を選択します。
25.3.4.2.2 バンドルの作成 - 手動 #
OSパッケージの更新SUC Planの適用元にするEdgeのリリースタグを選択します(以下では
${REVISION}
として参照)。バンドルリソースをプルします。
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
バンドル
のターゲット設定を編集し、spec.targets
に目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のバンドル
リソースは、どのダウンストリームクラスタにもマップ「されません」。すべてのクラスタに一致させるには、デフォルトの
バンドル
のターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください
バンドルリソースを
管理クラスタ
に適用します。kubectl apply -f pkg-update-bundle.yaml
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 要件 #
Kubernetesディストリビューションをバックアップします。
インポートしたRKE2クラスタについては、RKE2のバックアップと復元に関するドキュメントを参照してください。
インポートしたK3sクラスタについては、K3sのバックアップと復元に関するドキュメントを参照してください。
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は次のように配布されます。
GitRepo
リソースを使用する - 25.4.4.1項 「SUC Planのデプロイメント - GitRepoリソース」バンドル
リソースを使用する - 25.4.4.2項 「SUC Planのデプロイメント - バンドルリソース」
どのリソースを使用すべきかを判断するには、25.1.2項 「ユースケースの決定」を参照してください。
更新手順中の処理の概要については、25.4.3.1項 「概要」のセクションを参照してください。
25.4.3.1 概要 #
このセクションは、Kubernetesバージョンアップグレードプロセスが開始から終了までに経由するワークフロー全体について説明することを目的としています。
Kubernetesバージョンアップグレードの手順:
ユーザは、
KubernetesアップグレードSUC Plan
を目的のダウンストリームクラスタにデプロイするために、GitRepoリソースを使用するか、それともバンドルリソースを使用するかをそのユースケースに基づいて判断します。GitRepo/バンドルを特定のダウンストリームクラスタセットにマップする方法の詳細については、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください。SUC PlanのデプロイメントにGitRepoリソースまたはバンドルリソースのどちらを使用すべきかわからない場合は、25.1.2項 「ユースケースの決定」を参照してください。
GitRepo/バンドルの設定オプションについては、25.4.4.1項 「SUC Planのデプロイメント - GitRepoリソース」または25.4.4.2項 「SUC Planのデプロイメント - バンドルリソース」を参照してください。
ユーザは、設定したGitRepo/バンドルリソースを
管理クラスタ
のfleet-default
のネームスペースにデプロイします。これは、手動で実行するか、Rancher UI (利用可能な場合)を使用して実行します。Fleet (第6章 「Fleet」)は、
fleet-default
ネームスペースを絶えず監視し、新しくデプロイされたGitRepo/バンドルリソースをすぐに検出します。Fleetが監視するネームスペースの詳細については、Fleetの「Namespaces (ネームスペース)」のドキュメントを参照してください。ユーザがGitRepoリソースをデプロイした場合、
Fleet
は、GitRepoを調整し、そのパスとfleet.yamlの設定に基づいて、バンドルリソースをfleet-default
ネームスペースにデプロイします。詳細については、Fleetの「Git Repository Contents (Gitリポジトリの内容)」のドキュメントを参照してください。Fleet
は続いて、Kubernetesリソース
をこのバンドルから、ターゲットとするすべてのダウンストリームクラスタ
にデプロイします。Kubernetesバージョンアップグレード
のコンテキストでは、Fleetは、次のリソースをバンドルからデプロイします(Kubernetesディストリビューションによって異なる)。rke2-plan-agent
/k3s-plan-agent
- クラスタエージェントノードでKubernetesをアップグレードする方法をSUCに指示します。クラスタがcontrol-planeノードのみで構成されている場合は、解釈「されません」。rke2-plan-control-plane
/k3s-plan-control-plane
- クラスタのcontrol-planeノードでKubernetesをアップグレードする方法をSUCに指示します。注記上記のSUC Planは、各ダウンストリームクラスタの
cattle-system
ネームスペースにデプロイされます。
ダウンストリームクラスタで、SUCは、新しくデプロイされたSUC Planを検出し、 SUC Planで定義されたノードセレクタと一致する各ノードに更新Podをデプロイします。SUC Plan Podを監視する方法については、25.2.2.2項 「SUC Planの監視」を参照してください。
デプロイしたSUC Planに応じて、更新Podは、rke2-upgradeイメージまたはk3s-upgradeイメージのいずれかを実行して、それぞれのクラスタノードで次のワークフローを実行します。
Cordonクラスタノード - ノードのアップグレード時にこのノードにPodが誤ってスケジュールされないようにするために、このノードを
unschedulable
とマークします。ノードOSにインストールされている
rke2/k3s
バイナリを、Podが現在実行しているrke2-upgrade/k3s-upgrade
イメージによって配布されるバイナリに置き換えます。ノードOSで実行されている
rke2/k3s
プロセスを強制終了します - これにより、新しいバージョンを使用してrke2/k3s
プロセスを自動的に再起動するようにスーパーバイザに指示します。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リソースは、次のいずれかの方法でデプロイできます。
Rancher UI
を使用する - 25.4.4.1.1項 「GitRepoの作成 - Rancher UI」 (Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(25.4.4.1.2項 「GitRepoの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのKubernetesのアップグレードプロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。
25.4.4.1.1 GitRepoの作成 - Rancher UI #
左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。
[Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。
suse-edge/fleet-examples
リポジトリを使用する場合:
Repository URL (リポジトリのURL) -
https://github.com/suse-edge/fleet-examples.git
[Watch (ウォッチ)] → [Revision (リビジョン)] - 使用する
suse-edge/fleet-examples
リポジトリのリリースタグを選択します。[Paths (パス)]の下に、KubernetesディストリビューションのアップグレードFleetへのパスを、リリースタグに表示されているとおりに追加します。
RKE2の場合 -
fleets/day2/system-upgrade-controller-plans/rke2-upgrade
K3sの場合 -
fleets/day2/system-upgrade-controller-plans/k3s-upgrade
[Next (次へ)]を選択し、ターゲットの設定セクションに移動します。目的のKubernetesディストリビューションをアップグレードするクラスタのみを選択します
作成します
または、独自のリポジトリを使用してこれらのファイルをホストする場合は、上の手順で自身のリポジトリデータを指定する必要があります。
25.4.4.1.2 GitRepoの作成 - 手動 #
Kubernetes SUCアップグレードPlanを適用する目的のEdgeリリースタグを選択します(以下では
${REVISION}
として参照)。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
GitRepo設定を編集し、
spec.targets
で目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のGitRepo
リソースはどのダウンストリームクラスタにもマップ「されません」。すべてのクラスタ変更に一致させるには、デフォルトの
GitRepo
ターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください
GitRepoリソースを
管理クラスタ
に適用します。# RKE2 kubectl apply -f rke2-upgrade-gitrepo.yaml # K3s kubectl apply -f k3s-upgrade-gitrepo.yaml
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を配布するバンドルリソースは、次のいずれかの方法でデプロイできます。
Rancher UI
を使用する - 25.4.4.2.1項 「バンドルの作成 - Rancher UI」 (Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(25.4.4.2.2項 「バンドルの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのKubernetesのアップグレードプロセスを監視するには、25.2.2.2項 「SUC Planの監視」のドキュメントを参照してください。
25.4.4.2.1 バンドルの作成 - Rancher UI #
左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。
[Advanced (詳細)]>[Bundles (バンドル)] に移動します。
[Create from YAML (YAMLから作成)]を選択します。
ここから次のいずれかの方法でバンドルを作成できます。
バンドルコンテンツを[Create from YAML (YAMLから作成)]ページに手動でコピーする。コンテンツは次の場所から取得できます。
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から作成)]ページにバンドルコンテンツが自動的に入力されます。
バンドル
のターゲットクラスタを次のように変更します。すべてのダウンストリームクラスタに一致させるには、デフォルトのバンドル
.spec.targets
を次のように変更します。spec: targets: - clusterSelector: {}
より細かくダウンストリームクラスタにマッピングするには、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマップ)」を参照してください。
作成します
25.4.4.2.2 バンドルの作成 - 手動 #
Kubernetes SUCアップグレードPlanを適用する目的のEdgeリリースタグを選択します(以下では
${REVISION}
として参照)。バンドルリソースをプルします。
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
バンドル
のターゲット設定を編集し、spec.targets
に目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のバンドル
リソースは、どのダウンストリームクラスタにもマップ「されません」。すべてのクラスタに一致させるには、デフォルトの
バンドル
のターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマップ)」を参照してください
バンドルリソースを
管理クラスタ
に適用します。# For RKE2 kubectl apply -f rke2-plan-bundle.yaml # For K3s kubectl apply -f k3s-plan-bundle.yaml
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リリースバージョンに必要なアセットの検索 #
Day 2リリースのページに移動し、チャートのアップグレード先のEdge 3.X.Yリリースを見つけ、[Assets (アセット)]をクリックします。
そのリリースの[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リリースイメージのアーカイブの作成 #
インターネットにアクセスできるマシンで次の手順を実行します。
edge-save-images.sh
を実行可能にします。chmod +x edge-save-images.sh
edge-save-images.sh
スクリプトを使用して、Dockerのインポート可能な「.tar.gz」アーカイブを作成します。./edge-save-images.sh --source-registry registry.suse.com
-i|--images
オプションを指定していない場合、すぐに読み込めるedge-images.tar.gz
アーカイブが必要なイメージとともに作成されます。このアーカイブをエアギャップマシンにコピーします
scp edge-images.tar.gz <user>@<machine_ip>:/path
25.5.2.4 SUSE Edge HelmチャートOCIイメージのアーカイブの作成 #
インターネットにアクセスできるマシンで次の手順を実行します。
edge-save-oci-artefacts.sh
を実行可能にします。chmod +x edge-save-oci-artefacts.sh
edge-save-oci-artefacts.sh
スクリプトを使用して、すべてのSUSE Edge HelmチャートOCIイメージの「.tar.gz」アーカイブを作成します。./edge-save-oci-artefacts.sh --source-registry registry.suse.com
すべてのSUSE Edge HelmチャートOCIイメージを含む
oci-artefacts.tar.gz
アーカイブが作成されます。このアーカイブをエアギャップマシンにコピーします
scp oci-artefacts.tar.gz <user>@<machine_ip>:/path
25.5.2.5 エアギャップマシンへのSUSE Edgeリリースイメージの読み込み #
エアギャップマシンで次の手順を実行します。
プライベートレジストリにログインします(必要な場合)。
podman login <REGISTRY.YOURDOMAIN.COM:PORT>
edge-load-images.sh
を実行可能にします。chmod +x edge-load-images.sh
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イメージの読み込み #
エアギャップマシンで次の手順を実行します。
プライベートレジストリにログインします(必要な場合)。
podman login <REGISTRY.YOURDOMAIN.COM:PORT>
edge-load-oci-artefacts.sh
を実行可能にします。chmod +x edge-load-oci-artefacts.sh
コピーした
oci-artefacts.tar.gz
アーカイブをuntarします。tar -xvf oci-artefacts.tar.gz
命名テンプレート
edge-release-oci-tgz-<date>
を含むディレクトリが生成されます。このディレクトリを
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アップグレード手順の次のユースケースを中心に説明します。
新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい(25.5.3.1項 「新しいクラスタがあり、SUSE Helmチャートをデプロイして管理したい場合」)
Fleetで管理されているHelmチャートをアップグレードしたい(25.5.3.2項 「Fleetで管理されているHelmチャートをアップグレードしたい場合」)
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リソースの準備 #
チャートのFleetリソースを、使用するEdgeリリースタグから取得します。
選択したEdgeリリースタグのリビジョンから、HelmチャートのFleet (
fleets/day2/chart-templates/<chart>
)に移動します。チャートのFleetディレクトリを、GitOpsワークフローで使用するGitリポジトリにコピーします。
(任意) Helmチャートで値を設定する必要がある場合は、コピーしたディレクトリの
fleet.yaml
ファイルに含まれる設定.helm.values
を編集します。(任意) 環境に合わせて、チャートの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チャートをアップグレードしたい場合 #
チャートのアップグレード後のバージョンを確認し、Edge 3.X.Yリリースとの互換性を確保します。各Edgeリリースに対応するHelmチャートのバージョンは、33.1項 「要約」で確認できます。
Fleetで監視されているGitリポジトリで、Helmチャートの
fleet.yaml
ファイルを、33.1項 「要約」から取得した正しいチャートバージョンとリポジトリで編集します。リポジトリの変更をコミットしてプッシュすると、目的の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を使用します。
以下に関する情報が提供されています。
Helmチャートのアップグレードワークフローの概要(25.5.3.3.1項 「概要」)。
Helmチャートのアップグレードを正常に完了するために必要なアップグレード手順(25.5.3.3.2項 「アップグレード手順」)。
説明されていた方法を使用してLonghornチャートをアップグレードする方法を示す例(25.5.3.3.3項 「例」)。
異なるGitOpsツールでアップグレードプロセスを使用する方法(25.5.3.3.4項 「サードパーティのGitOpsツールを使用したHelmチャートのアップグレード」)。
25.5.3.3.1 概要 #
このセクションは、1つまたは複数のHelmチャートをアップグレードするためにユーザが行うワークフローの概要を説明することを意図しています。Helmチャートのアップグレードに必要な手順の詳細な説明については、25.5.3.3.2項 「アップグレード手順」を参照してください。
このワークフローでは最初に、チャートのアップグレード先にする新しいHelmチャートアーカイブをユーザがプルします。
続いて、アーカイブをエンコードし、関連するSUC PlanのFleetディレクトリにある
eib-chart-upgrade-user-data.yaml
ファイルに設定として渡す必要があります。これは、アップグレード手順(25.5.3.3.2項 「アップグレード手順」)のセクションで詳しく説明しています。ユーザは次の操作に進み、必要なすべてのリソース(SUC Plan、シークレットなど)をダウンストリームクラスタに配布する
GitRepo
リソースを設定してデプロイします。リソースは
fleet-default
ネームスペースの管理クラスタ
にデプロイされます。
Fleet (第6章 「Fleet」)はデプロイされたリソースを検出し、設定されているすべてのリソースを指定のダウンストリームクラスタにデプロイします。デプロイされたリソースには次のようなものがあります。
eib-chart-upgrade
SUC Plan。各ノードにアップグレードPodを作成するためにSUCで使用されます。eib-chart-upgrade-script
シークレット。アップグレードPodが初期化ノードでHelmChart
マニフェストをアップグレードするために使用するアップグレードスクリプト
を配布します。eib-chart-upgrade-user-data
シークレット。アップグレードする必要があるチャートマニフェストを理解するためにアップグレードスクリプト
で使用するチャートデータを配布します。
eib-chart-upgrade
SUC Planがデプロイされると、SUCは、アップグレードPodをデプロイするジョブを選択して作成します。デプロイされると、アップグレードPodは、
eib-chart-upgrade-script
シークレットとeib-chart-upgrade-user-data
シークレットをマウントし、eib-chart-upgrade-script
シークレットによって配布されるアップグレードスクリプト
を実行します。アップグレードスクリプト
は以下を実行します。スクリプトが実行されているPodが
初期化
ノードにデプロイされているかどうかを判断します。初期化
ノードは、HelmChart
マニフェストをホストしているノードです。シングルノードクラスタの場合は、単一のコントロールプレーンノードです。HAクラスタの場合は、EIBでクラスタを作成したときにinitializer
とマークされたノードです。initializer
プロパティを指定しなかった場合は、nodes
リストの最初のノードがinitializer
とマークされます。詳細については、EIBのアップストリームドキュメントを参照してください。注記アップグレードスクリプト
が初期化ノード以外で動作している場合、スクリプトは直ちに実行を停止し、以下の手順には進みません。編集するマニフェストをバックアップし、障害復旧を確実に行えるようにします。
注記デフォルトでは、マニフェストのバックアップは、
/tmp/eib-helm-chart-upgrade-<date>
ディレクトリに保存されます。カスタムの場所を使用する場合、MANIFEST_BACKUP_DIR
環境変数をHelmチャートアップグレードSUC Planに渡すことができます(Planの例)。HelmChart
マニフェストを編集します。このバージョンの時点で、チャートアップグレードをトリガするために、次のプロパティが変更されます。chartContent
プロパティの内容は、eib-chart-upgrade-user-data
シークレットで指定されているエンコードされたアーカイブに置き換えられます。version
プロパティの値は、eib-chart-upgrade-user-data
シークレットで指定されているバージョンに置き換えられます。
アップグレードスクリプト
が正常に実行されると、RKE2/K3sのHelm統合が変更を検出し、Helmチャートのアップグレードを自動的にトリガします。
25.5.3.3.2 アップグレード手順 #
Helmチャートアップグレードのロジックのコピー元のEdge リリースタグを特定します。
fleets/day2/system-upgrade-controller-plans/eib-chart-upgrade
Fleetを、FleetでGitOpsを行うために使用するリポジトリにコピーします。アップグレード先の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
プルしたチャートアーカイブをエンコードします。
# Encode the archive and disable line wrapping base64 -w 0 <chart-archive>.tgz
手順2でコピーした
eib-chart-upgrade
Fleetにあるeib-chart-upgrade-user-data.yaml
シークレットを設定します。このシークレットは、
chart_upgrade_data.txt
というファイルを配布します。このファイルにはチャートアップグレードのデータが保持されており、アップグレードスクリプト
ではこのデータを使用して、アップグレードする必要があるチャートを把握します。このファイルではチャートエントリにつき1行が必要で、形式は「<name>|<version>|<base64_encoded_archive>」です。name
- EIB定義ファイルのkubernetes.helm.charts.name[]
プロパティに表示される、Helmチャートの名前です。version
- Helmチャートの新しいバージョンを保持する必要があります。アップグレード時に、この値を使用してHelmChart
マニフェストの古いversion
を置き換えます。base64_encoded_archive
- ここでbase64 -w 0 <chart-archive>.tgz
の出力を渡します。アップグレード時に、この値を使用してHelmChart
マニフェストの古いchartContent
値を置き換えます。注記<name>|<version>|<base64_encoded_archive>の行は、データの追加を始める前にファイルから削除する必要があります。この行は、チャートデータをどこで、どのように設定する必要があるかの例を示すためのものです。
チャートアップグレードの
fleet
を配布するGitRepo
リソースを設定します。GitRepo
の詳細については、「GitRepo Resource (GitRepoリソース)」を参照してください。Rancher UIを使用して
GitRepo
を設定します。左上隅で、☰ → [Continuous Delivery (継続的デリバリ)]に移動します。
[Git Repos (Gitリポジトリ)]→[ Add Repository (リポジトリの追加)]に移動します。
ここで、リポジトリデータとパスをチャートの
アップグレードFleet
に渡します。[Next (次へ)]を選択し、設定されたチャートをアップグレードするターゲットクラスタを指定します。
作成します
お使いのセットアップで
Rancher
を使用できない場合は、管理クラスタ
でGitRepo
を手動で設定できます。次のテンプレートにデータを入力します。
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 (ダウンストリームクラスタへのマップ)」を参照してください。
設定した
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
...
ここでの問題は、現在のところlonghorn-single-k3s
とlonghorn-ha-rke2
がどのEdgeリリースとも互換性のないLonghornバージョンで実行されていることです。
両方のクラスタのチャートをEdgeでサポートされるLonghornバージョンにアップグレードする必要があります。
これを実行するには、次の手順を実行します。
アップグレードロジックを取得するEdgeリリースタグを特定します。たとえば、この例では、サポートされているLonghornバージョンが
1.6.1
であるrelease-3.0.1
リリースタグを使用します。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 ...
Longhornチャートリポジトリを追加します。
helm repo add longhorn https://charts.longhorn.io
Longhornチャートバージョン
1.6.1
をプルします。helm pull longhorn/longhorn --version 1.6.1
Longhornが
longhorn-1.6.1.tgz
という名前のアーカイブとしてプルされます。Longhornアーカイブをエンコードします。
base64 -w 0 longhorn-1.6.1.tgz
アーカイブがbase64でエンコードされた長い1行の文字列で出力されます。
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...
longhorn
は、EIB定義ファイルにあるチャートの名前です。1.6.1
は、LonghornHelmChart
マニフェストのversion
プロパティのアップグレード先のバージョンです。H4sIFAAAAAAA/ykAK2FIUjBjSE02THk5NWIzV…
は、エンコードされたLonghorn1.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> ...
また、マニフェストのバックアップを
/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
ディレクトリに保存されます。これで必要な設定はすべて完了したので、後は
GitRepo
リソースを作成するだけです。この例では、Rancher UI
を使用してGitRepo
リソースを作成します。アップグレード手順(25.5.3.3.2項 「アップグレード手順」)で説明されている手順に従い、次の項目を実行しました。
GitRepo
に「longhorn-upgrade」という名前を付けました。使用するリポジトリにURLを渡しました - https://github.com/suse-edge/fleet-examples.git。
リポジトリのブランチを渡しました - 「doc-example」。
リポジトリのとおりに
eib-chart-upgrade
フリートへのパスを渡しました -fleets/day2/system-upgrade-controller-plans/eib-chart-upgrade
。ターゲットクラスタを選択し、リソースを作成しました。
図 25.9: 正常にデプロイされたSUCとlonghorn GitRepo #
続いてクラスタでアップグレード手順を監視する必要があります。
「SUC Planの監視」(25.2.2.2項 「SUC Planの監視」)のセクションの指示に従い、アップグレードPodのステータスを確認します。
アップグレードPodが正常に完了した後は、Helmコントローラによって作成されるPodについても待機して監視する必要があります。これらのPodは、アップグレードPodが
HelmChart
マニフェストファイルに加えたファイルの変更に基づいて、実際のアップグレードを行います。
すべてが正常に完了したことを確認したので、次にバージョン変更を検証する必要があります。
これにより、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項 「概要」)を確認すると役に立ちます。