36 ダウンストリームクラスタ #
以下の手順は、SUSE Edge for Telco (第37章 「SUSE Edge for Telco」)によって管理されるダウンストリーム
クラスタには適用されません。ダウンストリームクラスタのアップグレードに関するガイダンスについては、43.2項 「ダウンストリームクラスタのアップグレード」を参照してください。
このセクションでは、 ダウンストリーム
クラスタのさまざまな部分に対して「Day
2」操作を実行可能な方法について説明します。
36.1 Fleet #
このセクションでは、Fleet (第8章 「Fleet」)コンポーネントを使用して「Day 2」操作を実行する方法について説明します。
次のトピックは、このセクションの一部として説明します。
36.1.1項 「コンポーネント」 - すべての「Day 2」操作に使用されるデフォルトコンポーネント。
36.1.2項 「ユースケースの決定」 - 使用されるFleetカスタムリソースの概要と、これらのリソースがさまざまな「Day 2」操作のユースケースに適しているかどうかを説明します。
36.1.3項 「Day 2ワークフロー」 - Fleetを使用して「Day 2」操作を実行するためのワークフローガイドを提供します。
36.1.4項 「OSアップグレード」 - Fleetを使用してOSアップグレードを実行する方法を説明します。
36.1.5項 「Kubernetesバージョンアップグレード」 - Fleetを使用してKubernetesバージョンアップグレードを実行する方法を説明します。
36.1.6項 「Helmチャートのアップグレード」 - Fleetを使用してHelmチャートアップグレードを実行する方法を説明します。
36.1.1 コンポーネント #
以下に、Fleetを使用して「Day
2」操作を正常に実行できるように、ダウンストリーム
クラスタで設定する必要があるデフォルトコンポーネントについて説明します。
36.1.1.1 System Upgrade Controller (SUC) #
各ダウンストリームクラスタ上にデプロイする必要があります。
System Upgrade Controllerは、
Plan
と呼ばれるカスタムリソースを通じて提供される設定データに基づいて指定されたノードでタスクを実行する責任を負います。
SUCは、オペレーティングシステムとKubernetesディストリビューションのアップグレードに積極的に活用されます。
SUCコンポーネントとそれがEdgeスタックにどのように適合するかに関する詳細については、第22章 「System Upgrade Controller」を参照してください。
SUCをデプロイする方法については、まずユースケースを決定し(36.1.2項 「ユースケースの決定」)、次に「System Upgrade Controllerのインストール - GitRepo」(22.2.1.1項 「System Upgrade Controllerのインストール - GitRepo」)、または「System Upgrade Controller のインストール - バンドル」(22.2.1.2項 「System Upgrade Controllerのインストール - バンドル」)を参照してください。
36.1.2 ユースケースの決定 #
Fleetは2種類のカスタムリソースを使用してKubernetesおよびHelmリソースの管理を有効にします。
以下に、これらのリソースの目的と、「Day 2」操作のコンテキストに最適なユースケースに関する情報を示します。
36.1.2.1 GitRepo #
GitRepo
は、Fleet
がバンドル
の作成元として使用できるGitリポジトリを表すFleet
(第8章 「Fleet」)リソースです。各バンドル
は、GitRepo
リソースの内部で定義された設定パスに基づいて作成されます。詳細については、GitRepoのドキュメントを参照してください。
「Day 2」操作のコンテキストでは、GitRepo
リソースは通常、Fleet
GitOpsアプローチを利用する非エアギャップ環境にSUC
またはSUC
Plan
をデプロイするために使用されます。
または、リポジトリのセットアップをローカルGit サーバ経由でミラーリングする場合
、GitRepo
リソースを使用して、SUC
またはSUC
Plan
をエアギャップ環境にデプロイすることもできます。
36.1.2.2 バンドル #
バンドル
は、ターゲットクラスタにデプロイする
生のKubernetesリソースを保持します。バンドルは通常、GitRepo
リソースから作成されますが、手動でデプロイできるユースケースもあります。詳細については、バンドルのドキュメントを参照してください。
「Day 2」操作のコンテキストでは、バンドル
リソースは通常、
何らかの形態のローカルGitOps手法を使用しないエアギャップ環境(ローカルGitサーバなど
)でSUC
またはSUC Plan
をデプロイするために使用されます。
または、ご自身のユースケースでGitOpsワークフローを使用できない場合は(Gitリポジトリを使用する場合など)、バンドル
リソースを使用して、SUC
またはSUC
Plan
を非エアギャップ環境にデプロイすることもできます。
36.1.3 Day 2ワークフロー #
以下に、ダウンストリームクラスタを特定のEdgeリリースにアップグレードする際に従う必要のある「Day 2」ワークフローを示します。
OSアップグレード(36.1.4項 「OSアップグレード」)
Kubernetesバージョンアップグレード(36.1.5項 「Kubernetesバージョンアップグレード」)
Helmチャートアップグレード(36.1.6項 「Helmチャートのアップグレード」)
36.1.4 OSアップグレード #
このセクションでは、第8章 「Fleet」と第22章 「System Upgrade Controller」を使用してオペレーティングシステムのアップグレードを行う方法について説明します。
次のトピックは、このセクションの一部として説明します。
36.1.4.1項 「コンポーネント」 - アップグレードプロセスによって使用される追加のコンポーネント。
36.1.4.2項 「概要」 - アップグレードプロセスの概要。
36.1.4.3項 「要件」 - アップグレードプロセスの要件。
36.1.4.4項 「OSアップグレード - SUC Planのデプロイメント」 - アップグレードプロセスのトリガを担当する、
SUC Plan
をデプロイする方法に関する情報。
36.1.4.1 コンポーネント #
このセクションでは、OSアップグレード
プロセスがデフォルトの「Day 2」コンポーネント(36.1.1項 「コンポーネント」)よりも使用するカスタムコンポーネントについて説明します。
36.1.4.1.1 systemd.service #
特定のノードでのOSアップグレードは、systemd.serviceによって処理されます。
あるEdgeバージョンから別のEdgeバージョンにOSが必要とするアップグレードのタイプに応じて、異なるサービスが作成されます。
同じOSバージョン(例:
6.0
)を必要とするEdgeバージョンの場合、os-pkg-update.service
が作成されます。このサービスはtransactional-updateを使用して、通常のパッケージアップグレードを実行します。OSバージョンのマイグレーション(例:
6.0
→6.1
)が必要なEdgeバージョンの場合、os-migration.service
が作成されます。このサービスは、transactional-updateを使用して以下の処理を実行します。通常のパッケージのアップグレード。 このアップグレードにより、すべてのパッケージを最新にすることで、古いパッケージバージョンに関連するマイグレーション時の障害を軽減します。
zypper migration
コマンドを利用したOSマイグレーション。
上記サービスは、OSアップグレードが必要なダウンストリームクラスタ上に配置する必要があるSUC
Plan
を通じて各ノードに配布されます。
36.1.4.2 概要 #
ダウンストリームクラスタノードのオペレーティングシステムのアップグレードは、Fleet
とSystem
Upgrade Controller (SUC)
を利用して実行されます。
Fleetは、SUC
Plan
を目的のクラスタにデプロイおよび管理するために使用されます。
SUC
Plan
は、特定のタスクをノードセットで実行するためにSUC
が従う必要がある手順を記述したカスタムリソースです。SUC
Plan
の例については、アップストリームリポジトリを参照してください。
OS SUC Plan
は、GitRepoまたはバンドルリソースを特定のFleetワークスペースにデプロイすることで、各クラスタに配布されます。FleetはデプロイされたGitRepo/Bundle
を取得し、その内容
(OS SUC plan
)を目的のクラスタにデプロイします。
GitRepo/バンドル
リソースは常に、管理クラスタ
上にデプロイされます。GitRepo
リソースを使用するかバンドル
リソースを使用するかは、ユースケースによって異なります。詳細については、36.1.2項 「ユースケースの決定」をご確認ください。
OS SUC Plan
は、次のワークフローを記述します。
常に、OSをアップグレードする前に、ノードをcordonします。
常に、
ワーカー
ノードの前にコントロールプレーン
ノードをアップグレードします。常に、一度に 1ノードずつクラスタをアップグレードします。
OS SUC Plan
がデプロイされると、ワークフローは次のようになります。
SUCは、デプロイされた
OS SUC Plan
を照合し、Kubernetes Job
を各ノードに作成します。Kubernetes Job
は、パッケージのアップグレードまたはOSマイグレーションのためにsystemd.service (36.1.4.1.1項 「systemd.service」)を作成します。作成された
systemd.service
は、特定のノードでOSアップグレードプロセスをトリガします。重要OSアップグレードプロセスが終了すると、対応するノードが
再起動
され、システムに更新が適用されます。
上記の説明を以下に図示します。
36.1.4.3 要件 #
全般:
SCC登録マシン - すべてのダウンストリームクラスタノードを
https://scc.suse.com/
に登録する必要があります。これは、各systemd.service
が目的のRPMリポジトリに正常に接続できるようにするために必要です。重要OSバージョンのマイグレーション (例:
6.0
→6.1
)が必要なEdgeリリースの場合、SCCキーが新しいバージョンへのマイグレーションをサポートしていることを確認してください。SUC PlanのTolerationがノードのTolerationと一致すること - KubernetesクラスタノードにカスタムのTaintが設定されている場合は、SUC PlanにそのTaintに対するTolerationを追加してください。デフォルトでは、SUC Planには、コントロールプレーンノードの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-upgrade
の下のsuse-edge/fleet-examplesリポジトリにあります。有効なリポジトリリリースタグからのPlanを使用してください。control-plane SUC Planに対してカスタムのTolerationを定義する例は次のようになります。
apiVersion: upgrade.cattle.io/v1 kind: Plan metadata: name: os-upgrade-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" ...
エアギャップ:
36.1.4.4 OSアップグレード - SUC Planのデプロイメント #
この手順を使用して以前にアップグレードした環境の場合、ユーザは次の手順のいずれかを完了していることを確認する必要があります。
これは古いEdgeリリースバージョンのSUC Plan
間のクラッシュを回避するために実行されます。
ユーザがアップグレードを試す場合、ダウンストリームクラスタに既存のSUC
Plan
がある場合は、次のフリートエラーが表示されます。
Not installed: Unable to continue with install: Plan <plan_name> in namespace <plan_namespace> exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error..
36.1.4.2項 「概要」で説明したように、OSアップグレードは、次の方法のいずれかの方法を使用して、SUC
Plan
を目的のクラスタに配布することで実行されます。
Fleet
GitRepo
リソース - 36.1.4.4.1項 「SUC Planのデプロイメント - GitRepoリソース」。Fleet
バンドル
リソース - 36.1.4.4.2項 「SUC Planのデプロイメント - バンドルリソース」。
どのリソースを使用すべきかを判断するには、36.1.2項 「ユースケースの決定」を参照してください。
OS SUC Plan
をサードパーティのGitOpsツールからデプロイするユースケースの場合は、36.1.4.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」を参照してください。
36.1.4.4.1 SUC Planのデプロイメント - GitRepoリソース #
必要なOS SUC Plan
を配布する、GitRepoリソースは、次の方法のいずれかでデプロイできます。
Rancher UI
- 36.1.4.4.1.1項 「GitRepoの作成 - Rancher UI」を通じて(Rancher
が使用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(36.1.4.4.1.2項 「GitRepoの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのOSアップグレードプロセスを監視するには、22.3項 「System Upgrade Controller Planのモニタリング」を参照してください。
36.1.4.4.1.1 GitRepoの作成 - Rancher UI #
Rancher UIを通じてGitRepo
リソースを作成するには、公式のドキュメントに従ってください。
Edgeチームは、すぐに使用できるフリートを維持しています。環境によっては、このフリートを直接使用することも、テンプレートとして使用することもできます。
フリートが配布するSUC
Plan
にカスタム変更を含める必要がないユースケースでは、ユーザはsuse-edge/fleet-examples
リポジトリから
os-upgrade
フリートを直接参照できます。
カスタム変更(カスタム許容値の追加など)が必要な場合、ユーザは別のリポジトリからos-upgrade
フリートを参照して、必要に応じてSUC
Planに変更を追加できるようにする必要があります。
GitRepo
をsuse-edge/fleet-examples
リポジトリのフリートを使用するように設定する方法の例については、こちらを参照してください。
36.1.4.4.1.2 GitRepoの作成 - 手動 #
GitRepoリソースをプルします。
curl -o os-upgrade-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/refs/tags/release-3.3.0/gitrepos/day2/os-upgrade-gitrepo.yaml
GitRepo設定を編集し、
spec.targets
で目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のGitRepo
リソースはどのダウンストリームクラスタにもマップされません。すべてのクラスタ変更に一致させるには、デフォルトの
GitRepo
ターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマッピング)」を参照してください。
GitRepoリソースを
管理クラスタ
に適用します。kubectl apply -f os-upgrade-gitrepo.yaml
fleet-default
ネームスペースで、作成したGitRepoリソースを表示します。kubectl get gitrepo os-upgrade -n fleet-default # Example output NAME REPO COMMIT BUNDLEDEPLOYMENTS-READY STATUS os-upgrade https://github.com/suse-edge/fleet-examples.git release-3.3.0 0/0
36.1.4.4.2 SUC Planのデプロイメント - バンドルリソース #
必要なOS SUC Plan
を配布するバンドルリソースは、次の方法のいずれかでデプロイできます。
Rancher UI
- 36.1.4.4.2.1項 「バンドルの作成 - Rancher UI」を通じて(Rancher
が使用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(36.1.4.4.2.2項 「バンドルの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのOSアップグレードプロセスを監視するには、22.3項 「System Upgrade Controller Planのモニタリング」を参照してください。
36.1.4.4.2.1 バンドルの作成 - Rancher UI #
Edgeチームは、以下の手順で使用可能な、すぐに使用できるバンドルを維持しています。
RancherのUIを通じてバンドルを作成するには、次の手順に従います。
左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。
[Advanced (詳細)]>[Bundles (バンドル)] に移動します。
[Create from YAML (YAMLから作成)]を選択します。
ここから次のいずれかの方法でバンドルを作成できます。
注記バンドルが配布する
SUC Plan
にカスタム変更を含める必要があるユースケースがある場合があります(カスタム許容値の追加など)。これらの変更を、以下の手順で生成されるバンドルに必ず含めてください。バンドルコンテンツを
suse-edge/fleet-examples
から[Create from YAML (YAMLから作成)]ページに手動でコピーする。目的のリリースタグからsuse-edge/fleet-examplesのクローンを作成し、[Create from YAML (YAMLから作成)]ページの[Read from File (ファイルから読み取り)]オプションを選択する。ここからバンドルの場所(
bundles/day2/system-upgrade-controller-plans/os-upgrade
)に移動して、バンドルファイルを選択できます。これにより、バンドルコンテンツを持つ[Create from YAML (YAMLから作成)]ページが自動入力されます。
バンドル
のターゲットクラスタを次のように変更します。すべてのダウンストリームクラスタに一致させるには、デフォルトのバンドル
.spec.targets
を次のように変更します。spec: targets: - clusterSelector: {}
より細かくダウンストリームクラスタにマッピングするには、「Mapping to Downstream Clusters (ダウンストリームクラスタへのマッピング)」を参照してください。
[Create (作成)]を選択します。
36.1.4.4.2.2 バンドルの作成 - 手動 #
バンドルリソースをプルします。
curl -o os-upgrade-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/refs/tags/release-3.3.0/bundles/day2/system-upgrade-controller-plans/os-upgrade/os-upgrade-bundle.yaml
バンドル
のターゲット設定を編集し、spec.targets
に目的のターゲットリストを指定します。デフォルトでは、suse-edge/fleet-examples
のバンドル
リソースは、どのダウンストリームクラスタにもマップされません。すべてのクラスタに一致させるには、デフォルトの
バンドル
のターゲットを次のように変更します。spec: targets: - clusterSelector: {}
または、クラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマッピング)」を参照してください。
バンドルリソースを
管理クラスタ
に適用します。kubectl apply -f os-upgrade-bundle.yaml
fleet-default
ネームスペースで、作成したバンドルリソースを表示します。kubectl get bundles -n fleet-default
36.1.4.4.3 SUC Planのデプロイメント - サードパーティのGitOpsワークフロー #
ユーザがOS SUC Plan
を独自のサードパーティGitOpsワークフロー(例:
Flux
)に組み込むユースケースがある場合があります。
必要なOSアップグレードリソースを取得するには、まず使用するsuse-edge/fleet-examplesリポジトリのEdge リリースタグを決定します。
その後、リソースはfleets/day2/system-upgrade-controller-plans/os-upgrade
で見つかります。ここでは次のようになります。
plan-control-plane.yaml
は、コントロールプレーンノードのSUC Planリソースです。plan-worker.yaml
は、 ワーカーノードのSUC Planリソースです。secret.yaml
は、systemd.service (36.1.4.1.1項 「systemd.service」)の作成を担当する、upgrade.sh
スクリプトを含むSecretです。config-map.yaml
は、upgrade.sh
スクリプトによって使用される設定を保持するConfigMapです。
これらのPlan
リソースは、 System Upgrade
Controller
によって解釈され、アップグレードする各ダウンストリームクラスタにデプロイする必要があります。SUCデプロイメントの情報については、22.2項 「System Upgrade Controllerのインストール」を参照してください。
GitOpsワークフローをOSアップグレードのSUC Planをデプロイするために使用する方法をよりよく理解するために、概要(36.1.4.2項 「概要」)を確認すると役立つ場合があります。
36.1.5 Kubernetesバージョンアップグレード #
このセクションでは、Rancher (第5章 「Rancher」)インスタンスを使用して作成されていないダウンストリームクラスタのKubernetesアップグレードについて説明します。Rancher
で作成したクラスタのKubernetesバージョンをアップグレードする方法については、「Upgrading
and Rolling Back Kubernetes (Kubernetesのアップグレードとロールバック)」を参照してください。
このセクションでは、第8章 「Fleet」と第22章 「System Upgrade Controller」を使用してKubernetesアップグレードを実行する方法について説明します。
次のトピックは、このセクションの一部として説明します。
36.1.5.1項 「コンポーネント」 - アップグレードプロセスで使用される追加のコンポーネント。
36.1.5.2項 「概要」 - アップグレードプロセスの概要。
36.1.5.3項 「要件」 - アップグレードプロセスの要件。
36.1.5.4項 「K8sアップグレード - SUC Planのデプロイメント」 - アップグレードプロセスのトリガを担当する、
SUC Plan
をデプロイする方法に関する情報。
36.1.5.1 コンポーネント #
このセクションでは、 K8sアップグレード
プロセスがデフォルトの「Day 2」コンポーネント(36.1.1項 「コンポーネント」)よりも使用するカスタムコンポーネントについて説明します。
36.1.5.1.1 rke2-upgrade #
特定のノードのRKE2バージョンのアップグレードを担当するコンテナイメージ。
SUC Planに基づいてSUCによって作成されたPodを通じて配布されます。このPlanは、RKE2のアップグレードが必要な各クラスタに配置する必要があります。
rke2-upgrade
イメージによるアップグレードの実行方法の詳細については、アップストリームドキュメントを参照してください。
36.1.5.1.2 k3s-upgrade #
特定のノードのK3sバージョンのアップグレードを担当するコンテナイメージ。
SUC Planに基づいてSUCによって作成されたPodを通じて配布されます。このPlanは、K3sのアップグレードが必要な各クラスタに配置する必要があります。
k3s-upgrade
イメージによるアップグレードの実行方法の詳細については、アップストリームドキュメントを参照してください。
36.1.5.2 概要 #
ダウンストリームクラスタのKubernetesディストリビューションアップグレードは、Fleet
とSystem
Upgrade Controller (SUC)
を利用して実行されます。
Fleet
は、SUC
Plan
を目的のクラスタにデプロイし、管理するために使用されます。
SUC Plan
は、 SUCが特定のタスクをノードのセットで実行するために従う必要がある手順を記述したカスタムリソースです。SUC
Plan
の例については、アップストリームリポジトリを参照してください。
K8s SUC Plan
は、 GitRepoまたはバンドルリソースを特定のFleetワークスペースにデプロイすることで各クラスタに配布されます。FleetはデプロイされたGitRepo/バンドル
を取得し、その内容(K8s
SUC Plan
)を目的のクラスタにデプロイします。
GitRepo/バンドル
リソースは常に、管理クラスタ
上にデプロイされます。GitRepo
リソースを使用するかバンドル
リソースを使用するかは、ユースケースによって異なります。詳細については、36.1.2項 「ユースケースの決定」をご確認ください。
K8s SUC Plan
は、次のワークフローを記述します。
常に、K8sをアップグレードする前に、ノードをcordonします。
常に、
ワーカー
ノードの前にコントロールプレーン
ノードをアップグレードします。常に、一度に 1ノードずつ
コントロールプレーン
ノードをアップグレードし、一度に 2ノードずつワーカー
ノードをアップグレードします。
K8s SUC Plan
がデプロイされたら、ワークフローは次のようになります。
SUCは、デプロイ済みの
K8s SUC Plan
を照合し、Kubernetes Job
を各ノードに作成します。Kubernetesディストリビューションによって、Jobはrke2-upgrade (36.1.5.1.1項 「rke2-upgrade」)またはk3s-upgrade (36.1.5.1.2項 「k3s-upgrade」)のコンテナイメージを実行するPodを作成します。
作成されたPodは次のワークフローを実行します。
ノード上の既存の
rke2/k3s
バイナリをrke2-upgrade/k3s-upgrade
イメージのバイナリで置き換えます。実行中の
rke2/k3s
プロセスを強制終了します。
rke2/k3s
プロセスを強制終了すると、再起動がトリガされ、更新されたバイナリを実行する新しいプロセスが起動し、Kubernetesディストリビューションバージョンがアップグレードされます。
上記の説明を以下に図示します。
36.1.5.3 要件 #
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-upgrade-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" ...
36.1.5.4 K8sアップグレード - SUC Planのデプロイメント #
この手順を使用して以前にアップグレードした環境の場合、ユーザは次の手順のいずれかを完了していることを確認する必要があります。
これは古いEdgeリリースバージョンのSUC Plan
間のクラッシュを回避するために実行されます。
ユーザがアップグレードを試す場合、ダウンストリームクラスタに既存のSUC
Plan
がある場合は、次のフリートエラーが表示されます。
Not installed: Unable to continue with install: Plan <plan_name> in namespace <plan_namespace> exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error..
36.1.5.2項 「概要」で説明したように、Kubernetesアップグレードは、次のいずれかの方法を使用してSUC
Plan
を目的のクラスタに配布することで実行されます。
Fleet GitRepoリソース(36.1.5.4.1項 「SUC Planのデプロイメント - GitRepoリソース」)
Fleetバンドルリソース(36.1.5.4.2項 「SUC Planのデプロイメント - バンドルリソース」)
どのリソースを使用すべきかを判断するには、36.1.2項 「ユースケースの決定」を参照してください。
K8s SUC Plan
をサードパーティのGitOpsツールからデプロイするユースケースの場合は、 36.1.5.4.3項 「SUC Planのデプロイメント - サードパーティのGitOpsワークフロー」を参照してください。
36.1.5.4.1 SUC Planのデプロイメント - GitRepoリソース #
必要なK8s SUC Plan
を配布する、GitRepoリソースは、次の方法のいずれかでデプロイできます。
Rancher UI
- 36.1.5.4.1.1項 「GitRepoの作成 - Rancher UI」を通じて(Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(36.1.5.4.1.2項 「GitRepoの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのKubernetesアップグレードプロセスを監視するには、22.3項 「System Upgrade Controller Planのモニタリング」を参照してください。
36.1.5.4.1.1 GitRepoの作成 - Rancher UI #
Rancher UIを通じてGitRepo
リソースを作成するには、公式のドキュメントに従ってください。
Edgeチームは、rke2とk3s Kubernetesディストリビューションの両方のすぐに使用できるフリートを維持しています。環境によって、このフリートを直接使用することも、テンプレートとして使用することもできます。
これらのフリートが配布するSUC
Plan
にカスタム変更を含める必要がないユースケースの場合、ユーザはsuse-edge/fleet-examples
リポジトリからフリートを直接参照できます。
カスタム変更(カスタム許容値の追加など)が必要な場合、ユーザは別のリポジトリからフリートを参照して、必要に応じてSUC Planに変更を追加できるようにする必要があります。
suse-edge/fleet-examples
リポジトリからフリートを使用したGitRepo
リソースの設定例は、次のとおりです。
36.1.5.4.1.2 GitRepoの作成 - 手動 #
GitRepoリソースをプルします。
RKE2クラスタの場合:
curl -o rke2-upgrade-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/refs/tags/release-3.3.0/gitrepos/day2/rke2-upgrade-gitrepo.yaml
K3sクラスタの場合:
curl -o k3s-upgrade-gitrepo.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/refs/tags/release-3.3.0/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 fleet-default 0/0 rke2-upgrade https://github.com/suse-edge/fleet-examples.git fleet-default 0/0
36.1.5.4.2 SUC Planのデプロイメント - バンドルリソース #
必要なKubernetesアップグレードSUC Plan
を配布する、バンドルリソースは、次の方法のいずれかでデプロイできます。
Rancher UI
- 36.1.5.4.2.1項 「バンドルの作成 - Rancher UI」を通じて(Rancher
が利用可能な場合)。リソースを
管理クラスタ
に手動でデプロイする(36.1.5.4.2.2項 「バンドルの作成 - 手動」)。
デプロイ後に、ターゲットクラスタのノードのKubernetesアップグレードプロセスを監視するには、22.3項 「System Upgrade Controller Planのモニタリング」を参照してください。
36.1.5.4.2.1 バンドルの作成 - Rancher UI #
Edgeチームは、rke2とk3s Kubernetesディストリビューション両方のすぐに使用できるバンドルを維持しています。環境によっては、これらのバンドルを直接使用することも、テンプレートとして使用することもできます。
RancherのUIを通じてバンドルを作成するには、次の手順に従います。
左上隅で、[☰] → [Continuous Delivery (継続的デリバリ)]をクリックします。
[Advanced (詳細)]>[Bundles (バンドル)] に移動します。
[Create from YAML (YAMLから作成)]を選択します。
ここから次のいずれかの方法でバンドルを作成できます。
注記バンドルが配布する
SUC Plan
にカスタム変更を含める必要があるユースケースがある場合があります(カスタム許容値の追加など)。これらの変更を、以下の手順で生成されるバンドルに必ず含めてください。suse-edge/fleet-examples
から[Create from YAML (YAMLから作成)]ページにRKE2 またはK3sのバンドルコンテンツを手動でコピーする。目的のリリースタグから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 (ダウンストリームクラスタへのマッピング)」を参照してください。
[Create (作成)]を選択します。
36.1.5.4.2.2 バンドルの作成 - 手動 #
バンドルリソースをプルします。
RKE2クラスタの場合:
curl -o rke2-plan-bundle.yaml https://raw.githubusercontent.com/suse-edge/fleet-examples/refs/tags/release-3.3.0/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/refs/tags/release-3.3.0/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
36.1.5.4.3 SUC Planのデプロイメント - サードパーティのGitOpsワークフロー #
ユーザがKubernetesアップグレードSUC Plan
を独自のサードパーティGitOpsワークフロー(例:
Flux
)に組み込むユースケースがある場合があります。
必要なK8sアップグレードリソースを取得するには、まず使用する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-worker.yaml
K3sクラスタのアップグレードの場合:
control-plane
ノード用 -fleets/day2/system-upgrade-controller-plans/k3s-upgrade/plan-control-plane.yaml
ワーカー
ノードの場合 -fleets/day2/system-upgrade-controller-plans/k3s-upgrade/plan-worker.yaml
これらのPlan
リソースは、 System Upgrade
Controller
によって解釈され、アップグレードする各ダウンストリームクラスタにデプロイする必要があります。SUCデプロイメントの情報については、22.2項 「System Upgrade Controllerのインストール」を参照してください。
GitOpsワークフローをKubernetesバージョンアップグレードのSUC
Planをデプロイするために使用する方法をよりよく理解するために、Fleet
を使用してアップグレード手順の概要(36.1.5.2項 「概要」)を確認すると役立つ場合があります。
36.1.6 Helmチャートのアップグレード #
このセクションでは、次の内容について説明します。
36.1.6.1項 「エアギャップ環境の準備」 - Edgeに関連するOCIチャートとイメージをプライベートレジストリに配布する方法に関する情報を保持します。
36.1.6.2項 「アップグレード手順」 - 異なるHelmチャートアップグレードのユースケースとそのアップグレード手順に関する情報を保持します。
36.1.6.1 エアギャップ環境の準備 #
36.1.6.1.1 HelmチャートFleetにアクセスできることの確認 #
環境でサポートする内容によって、次のオプションのいずれかを選択できます。
管理クラスタ
からアクセス可能なローカルGitサーバでチャートのFleetリソースをホストします。FleetのCLIを使用して直接使用可能で、どこかにホストする必要のないバンドルにHelmチャートを変換します。FleetのCLIは、 リリースページから取得できます。Macユーザの場合は、fleet-cli Homebrew Formulaeがあります。
36.1.6.1.2 Edgeリリースバージョンに必要なアセットの検索 #
「Day 2」リリースのページに移動し、チャートのアップグレード先のEdgeリリースを見つけ、[Assets (アセット)]をクリックします。
[Assets (アセット)]セクションから、次のファイルをダウンロードします。
リリースファイル
説明
edge-save-images.sh
edge-release-images.txt
ファイルで指定されたイメージを取得し、それらを「.tar.gz」アーカイブにパッケージ化します。edge-save-oci-artefacts.sh
特定のEdgeリリースに関連するOCIチャートイメージを取得し、それらを「.tar.gz」アーカイブにパッケージ化します。
edge-load-images.sh
「.tar.gz」アーカイブからイメージをロードし、再タグ付けして、プライベートレジストリにプッシュします。
edge-load-oci-artefacts.sh
Edge OCI「.tgz」チャートパッケージを含むディレクトリを取得し、プライベートレジストリにロードします。
edge-release-helm-oci-artefacts.txt
特定のEdgeリリースに関連するOCIチャートイメージのリストを含みます。
edge-release-images.txt
特定のEdgeリリースに関連するイメージのリストを含みます。
36.1.6.1.3 Edgeリリースイメージアーカイブの作成 #
インターネットにアクセスできるマシンで次の手順を実行します。
edge-save-images.sh
を実行可能にします。chmod +x edge-save-images.sh
イメージアーカイブを生成します。
./edge-save-images.sh --source-registry registry.suse.com
これにより、
edge-images.tar.gz
という名前のすぐにロードできるアーカイブが作成されます。注記-i|--images
オプションが指定される場合、アーカイブの名前は異なる場合があります。このアーカイブをエアギャップマシンにコピーします。
scp edge-images.tar.gz <user>@<machine_ip>:/path
36.1.6.1.4 Edge OCIチャートイメージアーカイブの作成 #
インターネットにアクセスできるマシンで次の手順を実行します。
edge-save-oci-artefacts.sh
を実行可能にします。chmod +x edge-save-oci-artefacts.sh
OCIチャートイメージアーカイブを生成します。
./edge-save-oci-artefacts.sh --source-registry registry.suse.com
これにより、
oci-artefacts.tar.gz
という名前のアーカイブが作成されます。注記-a|--archive
オプションが指定される場合、アーカイブの名前は異なる場合があります。このアーカイブをエアギャップマシンにコピーします。
scp oci-artefacts.tar.gz <user>@<machine_ip>:/path
36.1.6.1.5 Edgeリリースイメージをエアギャップマシンにロード #
エアギャップマシンで次の手順を実行します。
プライベートレジストリにログインします(必要な場合)。
podman login <REGISTRY.YOURDOMAIN.COM:PORT>
edge-load-images.sh
を実行可能にします。chmod +x 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
注記これにより、
edge-images.tar.gz
からすべてのイメージがロードされ、再タグ付けされて、それらを--registry
オプションで指定されているレジストリにプッシュします。
36.1.6.1.6 Edge 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
スクリプトに渡し、Edge OCIチャートイメージをプライベートレジストリにロードします。注記このスクリプトは、
Helm
CLIが環境にプリインストールされていることを想定しています。Helmのインストール手順については、「Installing Helm (Helmのインストール)」を参照してください。./edge-load-oci-artefacts.sh --archive-directory edge-release-oci-tgz-<date> --registry <REGISTRY.YOURDOMAIN.COM:PORT> --source-registry registry.suse.com
36.1.6.1.7 Kubernetesディストリビューションでプライベートレジストリを設定する #
RKE2の場合は、「Private Registry Configuration (プライベートレジストリの設定)」を参照してください。
K3sの場合は、「Private Registry Configuration (プライベートレジストリの設定)」を参照してください。
36.1.6.2 アップグレード手順 #
このセクションでは、Helmアップグレード手順の次のユースケースを中心に説明します。
手動でデプロイしたHelmチャートを確実にアップグレードすることはできません。36.1.6.2.1項 「新しいクラスタがあり、Edge Helmチャートをデプロイして管理したい」で説明する方法を使用してHelmチャートを再デプロイすることをお勧めします。
36.1.6.2.1 新しいクラスタがあり、Edge Helmチャートをデプロイして管理したい #
このセクションでは、以下の実行方法について説明します。
36.1.6.2.1.1 チャートのFleetリソースの準備 #
チャートのFleetリソースを、使用するEdgeリリースタグから取得します。
HelmチャートのFleet (
fleets/day2/chart-templates/<chart>
)に移動します。GitOpsワークフローを使用する場合は、チャートFleetディレクトリをGitOpsを実行するGitリポジトリにコピーします。
(任意) Helmチャートで値を設定する必要がある場合は、コピーしたディレクトリの
fleet.yaml
ファイルに含まれる設定.helm.values
を編集します。(任意) 環境に合わせて、チャートのFleetにリソースを追加しなければならないユースケースがあります。Fleetディレクトリを拡張する方法については、「Git Repository Contents (Gitリポジトリのコンテンツ)」を参照してください。
場合によっては、Fleet がHelm操作に使用するデフォルトのタイムアウトが不十分で、次のエラーが発生する可能性があります。
failed pre-install: context deadline exceeded
このような場合は、fleet.yaml
ファイルのhelm
設定の下に、timeoutSecondsプロパティを追加してください。
longhorn
Helmチャートの例は次のようになります。
ユーザGitリポジトリ構造:
<user_repository_root> ├── longhorn │ └── fleet.yaml └── longhorn-crd └── fleet.yaml
ユーザの
Longhorn
データが入力されたfleet.yaml
の内容:defaultNamespace: longhorn-system helm: # timeoutSeconds: 10 releaseName: "longhorn" chart: "longhorn" repo: "https://charts.rancher.io/" version: "106.2.0+up1.8.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
チャートのデプロイメントのガイドラインとみなさないでください。
36.1.6.2.1.2 チャートのFleetのデプロイ #
チャートのFleetをデプロイするには、GitRepo (36.1.6.2.1.2.1項 「GitRepo」)またはバンドル(36.1.6.2.1.2.2項 「バンドル」)のいずれかを使用できます。
Fleetをデプロイする場合に、Modified
メッセージを取得した場合、Fleetのdiff
セクションに対応するcomparePatches
エントリを追加してください。詳細については、「Generating Diffs to Ignore
Modified GitRepos (変更されたGitReposを無視する差分を生成する) 」を参照してください。
36.1.6.2.1.2.1 GitRepo #
FleetのGitRepoリソースは、チャートのFleetリソースへのアクセス方法、それらのリソースを適用するのに必要なクラスタに関する情報を保持しています。
GitRepo
リソースは、 Rancher
UIを通じて、または手動で管理クラスタ
にリソースをデプロイすることで、デプロイできます。
手動デプロイメントの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
- longhorn-crd
repo: user_repository_url
targets:
# Match all clusters
- clusterSelector: {}
36.1.6.2.1.2.2 バンドル #
バンドルリソースは、Fleetによってデプロイされる必要がある生のKubernetesリソースを保持しています。通常、GitRepo
アプローチを使用することを推奨されますが、
環境がエアギャップされ、ローカルGitサーバをサポートできないユースケース用に、バンドル
がHelmチャートFleetをターゲットクラスタに伝播するのに役立ちます。
バンドル
は、Rancher UI ([Continuous Delivery
(継続的デリバリ)] → [Advanced (詳細) ]→ [Bundles (バンドル)] → [Create from YAML
(YALMから作成)]
)を介して、またはバンドル
リソースを正しいFleetネームスペースに手動でデプロイして、デプロイできます。Fleetネームスペースについては、アップストリームドキュメントを参照してください。
Edge Helmチャートのバンドル
は、Fleetの 「Convert
a Helm Chart into a Bundle (Helmチャートをバンドルに変換する」 アプローチを利用して作成できます。
以下に、バンドル
リソースをlonghorn
と longhorn-crd
HelmチャートFleetテンプレートから作成し、このバンドルを管理クラスタ
に手動でデプロイする方法の例を示します。
longhornチャートFleetテンプレートに移動します。
cd fleets/day2/chart-templates/longhorn/longhorn
FleetにHelmチャートのデプロイ先クラスタを指示する
targets.yaml
ファイルを作成します。cat > targets.yaml <<EOF targets: # Matches all downstream clusters - clusterSelector: {} EOF
ダウンストリームクラスタをより細かく選択したい場合は、「Mapping to Downstream Cluster (ダウンストリームクラスタへのマッピング)」を参照してください。
fleet-cliを使用して、
Longhorn
HelmチャートFleetをバンドルリソースに変換します。fleet apply --compress --targets-file=targets.yaml -n fleet-default -o - longhorn-bundle > longhorn-bundle.yaml
longhorn-crdチャートFleetテンプレートに移動します。
cd fleets/day2/chart-templates/longhorn/longhorn-crd
FleetにHelmチャートのデプロイ先クラスタを指示する
targets.yaml
ファイルを作成します。cat > targets.yaml <<EOF targets: # Matches all downstream clusters - clusterSelector: {} EOF
fleet-cliを使用して、
Longhorn CRD
HelmチャートFleetをバンドルリソースに変換します。fleet apply --compress --targets-file=targets.yaml -n fleet-default -o - longhorn-crd-bundle > longhorn-crd-bundle.yaml
longhorn-bundle.yaml
とlonghorn-crd-bundle.yaml
ファイルを管理クラスタ
にデプロイします。kubectl apply -f longhorn-crd-bundle.yaml kubectl apply -f longhorn-bundle.yaml
これらの手順に従うと、SUSE Storage
が指定されたダウンストリームクラスタのすべてにデプロイされます。
36.1.6.2.1.3 デプロイされたHelmチャートの管理 #
Fleetでデプロイした後のHelmチャートのアップグレードについては、36.1.6.2.2項 「Fleetで管理されているHelmチャートをアップグレードしたい場合」を参照してください。
36.1.6.2.2 Fleetで管理されているHelmチャートをアップグレードしたい場合 #
目的のEdgeリリースと互換性を持つように、チャートをアップブレードする必要があるバージョンを決定します。EdgeリリースごとのHelmチャートバージョンはリリースノート(52.1項 「要約」)から表示できます。
Fleetで監視されているGitリポジトリで、Helmチャートの
fleet.yaml
ファイルを、リリースノート(52.1項 「要約」)から取得した正しいチャートのバージョンとリポジトリで編集します。変更をコミットしてリポジトリにプッシュした後で、目的のHelmチャートのアップグレードがトリガされます。
36.1.6.2.3 EIBを介してデプロイされたHelmチャートをアップグレードしたい #
第11章 「Edge Image Builder」は、HelmChart
リソースを作成し、RKE2/K3s
Helm統合機能によって導入されたhelm-controller
を利用して、Helmチャートをデプロイします。
EIB
を介してデプロイされたHelmチャートが正常にアップグレードされるようにするには、ユーザは各HelmChart
リソースに対してアップグレードを実行する必要があります。
以下に関する情報が提供されています。
アップグレードプロセスの一般的な概要(36.1.6.2.3.1項 「概要」)。
必要なアップグレード手順(36.1.6.2.3.2項 「アップグレード手順」)。
説明した方法を使用したLonghornチャートアップグレードを示す例(36.1.6.2.3.3項 「例」)。
異なるGitOpsツールを使用したアップグレードプロセスを使用する方法(36.1.6.2.3.4項 「サードパーティのGitOpsツールを使用したHelmチャートのアップグレード」)。
36.1.6.2.3.1 概要 #
EIB
を介してデプロイされたHelmチャートは、eib-charts-upgraderと呼ばれるフリート
を通じてアップグレードされます。
このフリート
は、ユーザが提供したデータを処理し、特定のHelmChartリソースセットを更新します。
これらのリソースを更新すると、 helm-controllerがトリガされ、変更されたHelmChart
リソースに関連付けられているHelmチャートがアップグレードされます。
ユーザは以下を行うことのみ求められます。
アップグレードが必要な各Helmチャートのアーカイブをローカルでプルします。
これらのアーカイブをgenerate-chart-upgrade-data.sh
generate-chart-upgrade-data.sh
スクリプトに渡します。これにより、これらのアーカイブのデータがeib-charts-upgrader
Fleetに含められます。eib-charts-upgrader
Fleetを管理クラスタ
にデプロイします。これはGitRepo
リソースまたはバンドル
リソースのいずれか通じて実行されます。
デプロイされたら、eib-charts-upgrader
がFleetのサポートによって、そのリソースを目的のダウンストリームクラスタに配布します。
これらのリソースには、次のものが含まれます。
ユーザが提供するHelmチャートデータを保持する
Secret
のセット。前述の
Secret
をマウントし、それらに基づいて対応するHelmChartリソースにパッチを適用するPod
をデプロイするKubernetes Job
。
前述のとおり、これにより、helm-controller
がトリガされ、実際の
Helmチャートアップグレードが実行されます。
上記の説明を以下に図示します。
36.1.6.2.3.2 アップグレード手順 #
正しいリリースタグから
suse-edge/fleet-examples
リポジトリのクローンを作成します。取得したHelmチャートアーカイブを保存するディレクトリを作成します。
mkdir archives
新規に作成されたアーカイブディレクトリ内で、アップグレードするHelmチャートのアーカイブをプルします。
cd archives 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
目的のリリースタグのアセットから、
generate-chart-upgrade-data.sh
スクリプトをダウンロードします。generate-chart-upgrade-data.sh
スクリプトを実行します。chmod +x ./generate-chart-upgrade-data.sh ./generate-chart-upgrade-data.sh --archive-dir /foo/bar/archives/ --fleet-path /foo/bar/fleet-examples/fleets/day2/eib-charts-upgrader
--archive-dir
ディレクトリ内のチャートアーカイブごとに、スクリプトにより、チャートアップグレードデータを含むKubernetes Secret YAML
ファイルが生成され、--fleet-path
によって指定されたフリートのbase/secrets
ディレクトリに保存されます。generate-chart-upgrade-data.sh
スクリプトは、フリートに追加の変更も適用し、生成されたKubernetes Secret YAML
ファイルが、フリートによってデプロイされたワークロードによって正しく利用されるようにします。重要ユーザは、
generate-chart-upgrade-data.sh
スクリプトが生成する内容に変更を加えてはなりません。
以下の手順は、実行している環境によって異なります。
GitOpsをサポートする環境の場合(例: エアギャップされていない、エアギャップされたがローカルGitサーバサポートが可能):
fleets/day2/eib-charts-upgrader
Fleetを、GitOpsに使用するリポジトリにコピーします。注記Fleetに
generate-chart-upgrade-data.sh
スクリプトによって加えられた変更が含まれていることを確認してください。eib-charts-upgrader
Fleetのすべてのリソースを配布するために使用されるGitRepo
リソースを設定します。Rancher UIを通じた
GitRepo
の設定およびデプロイメントについては、「Accessing Fleet in the Rancher UI (Rancher UIでのFleetへのアクセス)」を参照してください。GitRepo
手動設定およびデプロイメントの場合、「Creating a Deployment (デプロイメントの作成)」を参照してください。
GitOpsをサポートしていない環境の場合 (例: エアギャップされ、ローカルGitサーバの使用が許可されていない):
rancher/fleet
リリースページからfleet-cli
バイナリをダウンロードします(Linuxの場合はfleet-linux-amd64
)。Macユーザの場合、使用可能なHomebrew Formulaeがあります (fleet-cli)。eib-charts-upgrader
Fleetに移動します。cd /foo/bar/fleet-examples/fleets/day2/eib-charts-upgrader
リソースをデプロイする場所をFleetに指示する
targets.yaml
ファイルを作成します。cat > targets.yaml <<EOF targets: # To match all downstream clusters - clusterSelector: {} EOF
ターゲットクラスタをマップする方法については、アップストリームドキュメントを参照してください。
fleet-cli
を使用して、Fleetをバンドル
リソースに変換します。fleet apply --compress --targets-file=targets.yaml -n fleet-default -o - eib-charts-upgrade > bundle.yaml
これにより、
eib-charts-upgrader
Fleetからのすべてのテンプレート化されたリソースを保持するバンドル(bundle.yaml
)が作成されます。fleet apply
コマンドに関する詳細については、「fleet apply」を参照してください。Fleetをバンドルに変換する方法に関する詳細については、「 Convert a Helm Chart into a Bundle (Helmチャートのバンドルへの変換)」を参照してください。
バンドル
をデプロイします。これは次の2つの方法のいずれかで実行できます。RancherのUIを通じて - [Continuous Delivery (継続的デリバリ)]→[Advanced (詳細)]→[Bundles (バンドル)] → [Create from YAML (YAMLから作成)]に移動して、
bundle.yaml
コンテンツを解析するか、[Read from File (ファイルから読み取り)
]オプションをクリックして、ファイル自体を渡します。手動 -
管理クラスタ
内にbundle.yaml
ファイルを手動でデプロイします。
これらの手順を実行すると、正常にGitRepo/バンドル
リソースがデプロイされます。リソースはFleetによって取得され、そのコンテンツはユーザが以前の手順で指定したターゲットクラスタにデプロイされます。プロセスの概要については、36.1.6.2.3.1項 「概要」を参照してください。
アップグレードプロセスの追跡方法については、 36.1.6.2.3.3項 「例」を参照してください。
チャートアップグレードが正常に確認されたら、バンドル/GitRepo
リソースを削除します。
これにより、ダウンストリーム
クラスタから不要になったアップグレードリソースが削除され、今後バージョンクラッシュが発生しないようになります。
36.1.6.2.3.3 例 #
以下の例は、ダウンストリーム
クラスタ上で、EIB
を介してデプロイされたHelmチャートを、あるバージョンから別のバージョンにアップグレードする方法を示しています。この例で使用されているバージョンは、推奨バージョンではないことに注意してください。Edgeリリースに固有のバージョン推奨事項については、リリースノート(52.1項 「要約」)を参照してください。
ユースケース:
クラスタ名
doc-example
がLonghornの古いバージョンを実行しています。クラスタは、次のイメージ定義スニペットを使用して、EIBを通じてデプロイされました。
kubernetes: helm: charts: - name: longhorn-crd repositoryName: rancher-charts targetNamespace: longhorn-system createNamespace: true version: 104.2.0+up1.7.1 installationNamespace: kube-system - name: longhorn repositoryName: rancher-charts targetNamespace: longhorn-system createNamespace: true version: 104.2.0+up1.7.1 installationNamespace: kube-system repositories: - name: rancher-charts url: https://charts.rancher.io/ ...
SUSE Storage
は、 Edge 3.3.1リリースと互換性のあるバージョンにアップグレードする必要があります。つまり、106.2.0+up1.8.1
にアップグレードする必要があります。doc-example
の管理を担当する管理クラスタ
がローカルGitサーバのサポートなしでエアギャップされており、Rancherセットアップが動作していることを前提としています。
アップグレード手順(36.1.6.2.3.2項 「アップグレード手順」)に従います。
release-3.3.0
タグからsuse-edge/fleet-example
リポジトリのクローンを作成します。git clone -b release-3.3.0 https://github.com/suse-edge/fleet-examples.git
Longhorn
アップグレードアーカイブが保存されるディレクトリを作成します。mkdir archives
目的の
Longhorn
チャートアーカイブバージョンを取得します。# First add the Rancher Helm chart repository helm repo add rancher-charts https://charts.rancher.io/ # Pull the Longhorn 1.8.1 CRD archive helm pull rancher-charts/longhorn-crd --version 106.2.0+up1.8.1 # Pull the Longhorn 1.8.1 chart archive helm pull rancher-charts/longhorn --version 106.2.0+up1.8.1
archives
ディレクトリ以外で、suse-edge/fleet-examples
リリースタグからgenerate-chart-upgrade-data.sh
スクリプトをダウンロードします。ディレクトリセットアップは次のようになるはずです。
. ├── archives | ├── longhorn-106.2.0+up1.8.1.tgz │ └── longhorn-crd-106.2.0+up1.8.1.tgz ├── fleet-examples ... │ ├── fleets │ │ ├── day2 | | | ├── ... │ │ │ ├── eib-charts-upgrader │ │ │ │ ├── base │ │ │ │ │ ├── job.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ ├── patches │ │ │ │ │ │ └── job-patch.yaml │ │ │ │ │ ├── rbac │ │ │ │ │ │ ├── cluster-role-binding.yaml │ │ │ │ │ │ ├── cluster-role.yaml │ │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ │ └── sa.yaml │ │ │ │ │ └── secrets │ │ │ │ │ ├── eib-charts-upgrader-script.yaml │ │ │ │ │ └── kustomization.yaml │ │ │ │ ├── fleet.yaml │ │ │ │ └── kustomization.yaml │ │ │ └── ... │ └── ... └── generate-chart-upgrade-data.sh
generate-chart-upgrade-data.sh
スクリプトを実行します。# First make the script executable chmod +x ./generate-chart-upgrade-data.sh # Then execute the script ./generate-chart-upgrade-data.sh --archive-dir ./archives --fleet-path ./fleet-examples/fleets/day2/eib-charts-upgrader
スクリプト実行後のディレクトリ構造は次のようになるはずです。
. ├── archives | ├── longhorn-106.2.0+up1.8.1.tgz │ └── longhorn-crd-106.2.0+up1.8.1.tgz ├── fleet-examples ... │ ├── fleets │ │ ├── day2 │ │ │ ├── ... │ │ │ ├── eib-charts-upgrader │ │ │ │ ├── base │ │ │ │ │ ├── job.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ ├── patches │ │ │ │ │ │ └── job-patch.yaml │ │ │ │ │ ├── rbac │ │ │ │ │ │ ├── cluster-role-binding.yaml │ │ │ │ │ │ ├── cluster-role.yaml │ │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ │ └── sa.yaml │ │ │ │ │ └── secrets │ │ │ │ │ ├── eib-charts-upgrader-script.yaml │ │ │ │ │ ├── kustomization.yaml │ │ │ │ │ ├── longhorn-VERSION.yaml - secret created by the generate-chart-upgrade-data.sh script │ │ │ │ │ └── longhorn-crd-VERSION.yaml - secret created by the generate-chart-upgrade-data.sh script │ │ │ │ ├── fleet.yaml │ │ │ │ └── kustomization.yaml │ │ │ └── ... │ └── ... └── generate-chart-upgrade-data.sh
Gitで変更されたファイルは次のようになるはずです。
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: fleets/day2/eib-charts-upgrader/base/patches/job-patch.yaml modified: fleets/day2/eib-charts-upgrader/base/secrets/kustomization.yaml Untracked files: (use "git add <file>..." to include in what will be committed) fleets/day2/eib-charts-upgrader/base/secrets/longhorn-VERSION.yaml fleets/day2/eib-charts-upgrader/base/secrets/longhorn-crd-VERSION.yaml
eib-charts-upgrader
Fleetのバンドル
を作成します。まず、Fleet自体に移動します。
cd ./fleet-examples/fleets/day2/eib-charts-upgrader
次に、
targets.yaml
ファイルを作成します。cat > targets.yaml <<EOF targets: - clusterName: doc-example EOF
次に、
fleet-cli
バイナリを使用して、Fleetをバンドルに変換します。fleet apply --compress --targets-file=targets.yaml -n fleet-default -o - eib-charts-upgrade > bundle.yaml
ここで、
管理クラスタ
マシンにbundle.yaml
を転送します。
Rancher UIを通じてバンドルをデプロイします。
図 36.1: Rancher UIを通じたバンドルのデプロイ #ここから、[Read from File (ファイルから読み取り)]を選択し、システムで
bundle.yaml
ファイルを見つけます。これにより、Rancher UI内に
バンドル
が自動入力されます。[Create (作成)]を選択します。
正常にデプロイされたら、バンドルは次のようになります。
図 36.2: 正常にデプロイされたバンドル #
バンドル
のデプロイメントが成功した後で、アップグレードプロセスを監視するには次のようにします。
アップグレードPod
のログを確認します。ここで、helm-controllerによってアップグレードに作成されたPodのログを確認します。
Pod名は次のテンプレートを使用します -
helm-install-longhorn-<random-suffix>
Podは、
HelmChart
リソースがデプロイされたネームスペースにあります。この場合、このネームスペースはkube-system
です。図 36.3: 正常にアップグレードされたLonghornチャートのログ #
Rancherの
HelmCharts
セクション([More Resources (その他のリソース)] → [HelmCharts]
)に移動して、HelmChart
のバージョンが更新されていることを確認します。チャートがデプロイされたネームスペースを選択します。この例では、kube-system
です。最後に、 Longhorn Podが実行されていることを確認します。
上記の検証後、Longhorn
Helmチャートが106.2.0+up1.8.1
バージョンにアップグレードされていると仮定しても問題ないでしょう。
36.1.6.2.3.4 サードパーティのGitOpsツールを使用したHelmチャートのアップグレード #
ユーザがこのアップグレード手順をFleet以外のGitOpsワークフロー(Flux
など)で実行したいユースケースが存在する場合があります。
アップグレード手順に必要なリソースを生成するには、generate-chart-upgrade-data.sh
スクリプトを使用して、ユーザが提供するデータをeib-charts-upgrader
Fleetに入力することができます。この実行方法の詳細については、36.1.6.2.3.2項 「アップグレード手順」を参照してください。
完全なセットアップ後、kustomizeを使用して、クラスタにデプロイ可能な完全な動作ソリューションを生成することができます。
cd /foo/bar/fleets/day2/eib-charts-upgrader
kustomize build .
GitOpsワークフローにソリューションを含める場合は、fleet.yaml
ファイルを削除して、残ったものものを有効なKustomize
セットアップとして使用できます。まず、
generate-chart-upgrade-data.sh
スクリプトを実行し、アップグレードするHelmチャートのデータをKustomize
セットアップに読み込ませることを忘れないでください。
このワークフローの使用方法を理解するには36.1.6.2.3.1項 「概要」と36.1.6.2.3.2項 「アップグレード手順」を参照すると役立つでしょう。