20 Upgrade Controller #
Upgrade Controllerのドキュメントを参照してください。
次の要素で構成されるインフラストラクチャプラットフォームアップグレードを実行できるKubernetesコントローラ:
オペレーティングシステム(SL Micro)
Kubernetes (K3sとRKE2)
追加のコンポーネント(Rancher、Elemental、NeuVectorなど)
20.1 SUSE EdgeでUpgrade Controllerを使用する方法 #
Upgrade Controllerは、あるSUSE
Edgeリリースバージョンを次のバージョンに管理
クラスタをアップグレードするために必要な(かつては手動の)Day
2
操作を自動化するために必須のものです。
この自動化のために、Upgrade Controller
はSystem Upgrade Controller
(第19章 「System Upgrade Controller」)やHelm
Controllerなどのツールを利用します。
Upgrade Controller
の仕組みの詳細については、「Upgrade
Controllerの仕組み」(20.3項 「Upgrade Controllerの仕組み」)を参照してください。
Upgrade Controller
の既知の制限事項については、「既知の制限事項」(20.6項 「既知の制限事項」)セクションを参照してください。
20.2 Upgrade Controllerのインストール #
20.2.1 前提条件 #
System Upgrade Controller (19.2項 「System Upgrade Controllerのインストール」)
Kubernetesクラスタ: K3sまたはRKE2のいずれか
20.2.2 手順 #
管理クラスタに
Upgrade Controller
Helmチャートをインストールします。helm install upgrade-controller oci://registry.suse.com/edge/3.1/upgrade-controller-chart --version 0.1.0 --create-namespace --namespace upgrade-controller-system
Upgrade Controller
デプロイメントを検証します。kubectl get deployment -n upgrade-controller-system
Upgrade Controller
ポッドを検証します。kubectl get pods -n upgrade-controller-system
Upgrade Controller
ポッドログを検証します。kubectl logs <pod_name> -n upgrade-controller-system
20.3 Upgrade Controllerの仕組み #
Edgeリリースアップグレードを実行するため、Upgrade
Controllerでは2つ
の新しいKubernetesカスタムリソースが導入されました。
UpgradePlan (20.4.1項 「UpgradePlan」) -
ユーザによって作成されます
。Edgeリリースアップグレードに関する設定を保持します。ReleaseManifest (20.4.2項 「ReleaseManifest」) -
Upgrade Controllerによって作成されます
。特定のEdgeリリースバージョンに固有のコンポーネントバージョンを保持します。ユーザが編集することはできません。
Upgrade Controllerは、
UpgradePlan
リソースのreleaseVersion
プロパティでユーザによって指定されたEdgeリリースバージョンのコンポーネントデータを保持するReleaseManifest
リソースの作成に進みます。
Upgrade
Controllerは、ReleaseManifest
のコンポーネントデータを使用して、次の順序のEdgeリリースコンポーネントのアップグレードに進みます。
オペレーティングシステム(OS) (20.3.1項 「オペレーティングシステムのアップグレード」)
Kubernetes (20.3.2項 「Kubernetesのアップグレード」)
追加のコンポーネント(20.3.3項 「追加のコンポーネントのアップグレード」)
アップグレードプロセス中に、Upgrade
Controllerは、作成したUpgradePlan
にアップグレード情報を絶えず出力します。アップグレードプロセスを追跡する方法の詳細については、「アップグレードプロセスの追跡」(20.5項 「アップグレードプロセスの追跡」)を参照してください。
20.3.1 オペレーティングシステムのアップグレード #
OSコンポーネントをアップグレードするため、Upgrade Controllerは、次の命名テンプレートを持つSUC (第19章 「System Upgrade Controller」) Planを作成します。
コントロールプレーン
ノードのOSアップグレードに関連するSUC Planの場合 -control-plane-<os-name>-<os-version>-<suffix>
ワーカー
ノードのOSアップグレードに関連するSUC Planの場合 -workers-<os-name>-<os-version>-<suffix>
これらのプランに基づいて、SUCは、実際のOSアップグレードを実行するクラスタの各ノードにワークロードを作成します。
ReleaseManifest
に応じて、OSアップグレードには次のものが含まれる場合があります。
Package only updates (パッケージのみの更新)
- OSバージョンがEdgeリリース間で変更されないユースケース用。Full OS migration (完全なOSマイグレーション)
- OSバージョンがEdgeリリース間で変更されるユースケース用。
アップグレードは、コントロールプレーン
ノードから順に一度に1つのノードが実行されます。コントロールプレーン
ノードのアップグレードが終了した場合にのみ、ワーカー
ノードのアップグレードが開始されます。
クラスタに特定のタイプの1つ以上のノードがある場合、 Upgrade Controllerは、クラスタノードのdrainを実行するようにOS
SUC Plan
を設定します。
コントロールプレーン
ノードが1台を超え、1つのみワーカーノードがあるクラスタでは、コントロールプレーン
ノードに対してのみdrain
が実行されます。その逆も同様です。
ノードのdrainを完全に無効にする方法については、「UpgradePlan」(20.4.1項 「UpgradePlan」)のセクションを参照してください。
20.3.2 Kubernetesのアップグレード #
クラスタのKubernetesディストリビューションをアップグレードするため、Upgrade Controllerは、次の命名テンプレートを持つSUC (第19章 「System Upgrade Controller」) Planを作成します。
コントロールプレーン
ノードのKubernetesアップグレードに関連するSUC Planの場合 -control-plane-<k8s-version>-<suffix>
。ワーカー
ノードのKubernetesアップグレードに関連するSUC Planの場合 -workers-<k8s-version>-<suffix>
。
これらのプランに基づいて、SUCは、実際のKubernetesアップグレードを実行するクラスタのノードごとにワークロードを作成します。
Kubernetesアップグレードは、コントロールプレーン
ノードから順に一度に1つのノードが実行されます。
コントロールプレーン
ノードのアップグレードが終了した場合にのみ、ワーカー
ノードのアップグレードが開始されます。
クラスタに特定のタイプの1つ以上のノードがある場合、クラスタノードのdrainを実行するようにUpgrade ControllerはKubernetes SUC
Plan
を設定します。
コントロールプレーン
ノードが1台を超え、1つのみワーカーノードがあるクラスタでは、コントロールプレーン
ノードに対してのみdrain
が実行されます。その逆も同様です。
ノードのdrainを完全に無効にする方法については、「UpgradePlan」(20.4.1項 「UpgradePlan」)のセクションを参照してください。
20.3.3 追加のコンポーネントのアップグレード #
現在、追加のコンポーネントはすべてHelmチャートを介してインストールされます。特定のリリースのコンポーネントの全リストについては、リリースノート(45.1項 「要約」)を参照してください。
EIB (第9章 「Edge Image Builder」)を通じてデプロイされたHelmチャートの場合、Upgrade Controllerは各コンポーネントの既存のHelmChart CRを更新します。
EIB以外でデプロイされたHelmチャートの場合、Upgrade
Controllerは、コンポーネントごとにHelmChart
リソースを作成します。
HelmChart
リソースの作成/更新
後、Upgrade Controllerは、helm-controllerに依存してこの変更を取得し、実際のコンポーネントアップグレードを続行します。
チャートはReleaseManifest
の順序に基づいて順次アップグレードされます。追加の値はUpgradePlan
を通じて渡すこともできます。これに関する詳細については、「UpgradePlan」(20.4.1項 「UpgradePlan」)を参照してください。
20.4 Kubernetes API拡張機能 #
Upgrade Controllerによって導入されたKubernetes APIの拡張機能。
20.4.1 UpgradePlan #
Upgrade
Controller
は、UpgradePlan
と呼ばれる新たなKubernetes カスタムリソースを導入しました。
UpgradePlan
は、Upgrade
Controller
の指示メカニズムとして機能し、次の設定をサポートします。
releaseVersion
- クラスタをアップグレースする必要があるEdgeリリースバージョン。リリースバージョンは、セマンティックバージョン管理に従う必要があり、リリースノート(45.1項 「要約」)から取得する必要があります。disableDrain
- オプション。Upgrade Controllerにノードのdrainsを無効にするかどうかを指示します。Disruption Budgetsを含むワークロードがある場合に役立ちます。コントローラプレーン
ノードのdrainの無効化の例:spec: disableDrain: controlPlane: true
コントローラプレーン
とワーカー
ノードのdrainの無効化の例:spec: disableDrain: controlPlane: true worker: true
helm
- オプション。Helmを介してインストールされたコンポーネントの追加の値を指定します。警告アップグレードに重要な値についてのみこのフィールドを使用することをお勧めします。標準のチャート値の更新は、各チャートが次のバージョンにアップグレードされた後に実行する必要があります。
例:
spec: helm: - chart: foo values: bar: baz
20.4.2 ReleaseManifest #
Upgrade
Controller
は、ReleaseManifest
と呼ばれる新たなKubernetes
カスタムリソースを導入しました。
ReleaseManifest
は、Upgrade
Controller
によって作成され、1つの特定のEdgeリリースバージョンのコンポーネントデータを保持します。つまり、各Edgeリリースバージョンのアップグレードは、異なるReleaseManifest
リソースによって表されます。
ReleaseManifest
は常に、 Upgrade
Controller
によって作成される必要があります。
ReleaseManifest
を手動で作成または編集することはお勧めしていません。
ユーザが手動で作成または編集することを決めた場合は、自己責任で行う必要があります。
ReleaseManifest
が提供するコンポーネントデータは、以下が含まれますがこれに制限されません。
ReleaseManifest
の例については、アップストリームドキュメントを参照してください。これは単なる例であって、有効なReleaseManifest
リソースとして作成することを目的としたものではないことに注意してください。
20.5 アップグレードプロセスの追跡 #
このセクションは、ユーザがUpgradePlan
を作成すると、Upgrade
Controller
が開始するアップグレードプロセス
を追跡およびデバッグする手段として機能します。
20.5.1 一般 #
アップグレードプロセス
の状態に関する一般情報は、
UpgradePlan
のステータス状況で確認できます。
UpgradePlan
リソースのステータスは、次の方法で確認できます。
kubectl get upgradeplan <upgradeplan_name> -n upgrade-controller-system -o yaml
UpgradePlan
の実行例:
apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
name: upgrade-plan-mgmt-3-1-0
namespace: upgrade-controller-system
spec:
releaseVersion: 3.1.0
status:
conditions:
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Control plane nodes are being upgraded
reason: InProgress
status: "False"
type: OSUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Kubernetes upgrade is not yet started
reason: Pending
status: Unknown
type: KubernetesUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Rancher upgrade is not yet started
reason: Pending
status: Unknown
type: RancherUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Longhorn upgrade is not yet started
reason: Pending
status: Unknown
type: LonghornUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: MetalLB upgrade is not yet started
reason: Pending
status: Unknown
type: MetalLBUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: CDI upgrade is not yet started
reason: Pending
status: Unknown
type: CDIUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: KubeVirt upgrade is not yet started
reason: Pending
status: Unknown
type: KubeVirtUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: NeuVector upgrade is not yet started
reason: Pending
status: Unknown
type: NeuVectorUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: EndpointCopierOperator upgrade is not yet started
reason: Pending
status: Unknown
type: EndpointCopierOperatorUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Elemental upgrade is not yet started
reason: Pending
status: Unknown
type: ElementalUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: SRIOV upgrade is not yet started
reason: Pending
status: Unknown
type: SRIOVUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Akri upgrade is not yet started
reason: Pending
status: Unknown
type: AkriUpgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: Metal3 upgrade is not yet started
reason: Pending
status: Unknown
type: Metal3Upgraded
- lastTransitionTime: "2024-10-01T06:26:27Z"
message: RancherTurtles upgrade is not yet started
reason: Pending
status: Unknown
type: RancherTurtlesUpgraded
observedGeneration: 1
sucNameSuffix: 90315a2b6d
ここで、 Upgrade
Controller
がアップグレードをスケジュールしようとするすべてのコンポーネントを確認できます。各状態は、次のテンプレートに従います。
lastTransitionTime
- このコンポーネントの状態があるステータスから別のステータスに遷移した最後の時刻。message (メッセージ)
- 特定のコンポーネントの状態の現在のアップグレード状態を示すメッセージ。reason (理由)
- 特定のコンポーネントの状態の現在のアップグレード状態。考えられる理由
には次のものが含まれます。Succeeded (成功)
- 特定のコンポーネントのアップグレードが成功しました。Failed (失敗)
- 特定のコンポーネントアップグレードが失敗しました。InProgress (進行中)
- 特定のコンポーネントのアップグレードは現在進行中です。Pending (保留中)
- 特定のコンポーネントのアップグレードは、まだスケジュールされていません。Skipped (スキップ)
- 特定のコンポーネントがクラスタで見つからないため、アップグレードはスキップされます。Error (エラー)
- 特定のコンポーネントで一時的なエラーが発生しました。
status (ステータス)
- 現在の状態type (タイプ)
のステータス。True、False、Unknown (不明)
のいずれか。type (タイプ)
- 現在アップグレードされたコンポーネントのインジケータ。
Upgrade
Controller
は、"OSUpgraded"および"KubernetesUpgraded"タイプのコンポーネント状態のSUC
Plan
を作成します。これらのコンポーネント用に作成されたSUC
Planを詳細に追跡するには、「System Upgrade Controller Planのモニタリング」(19.3項 「System Upgrade Controller Planのモニタリング」)セクションを参照してください。
他のすべてのコンポーネント状態のタイプは、helm-controllerによって作成されたリソースを表示することで詳細に追跡できます。詳細については、「Helm Controller 」(20.5.2項 「Helm Controller」)セクションを参照してください。
Upgrade
Controller
によってスケジュールされたUpgradePlan
は、次の場合にsuccessful
(成功)
とマーク付けすることができます。
Pending (保留中)
またはInProgress (進行中)
のコンポーネントの状態がありません。lastSuccessfulReleaseVersion
プロパティがUpgradePlan
の設定で指定されたreleaseVersion
を指しています。このプロパティは、アップグレードプロセス
が成功すると、Upgrade Controller
によってUpgradePlan
のステータスに追加されます。
成功したUpgradePlan
の例:
apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
name: upgrade-plan-mgmt-3-1-0
namespace: upgrade-controller-system
spec:
releaseVersion: 3.1.0
status:
conditions:
- lastTransitionTime: "2024-10-01T06:26:48Z"
message: All cluster nodes are upgraded
reason: Succeeded
status: "True"
type: OSUpgraded
- lastTransitionTime: "2024-10-01T06:26:59Z"
message: All cluster nodes are upgraded
reason: Succeeded
status: "True"
type: KubernetesUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Chart rancher upgrade succeeded
reason: Succeeded
status: "True"
type: RancherUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Chart longhorn is not installed
reason: Skipped
status: "False"
type: LonghornUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Specified version of chart metallb is already installed
reason: Skipped
status: "False"
type: MetalLBUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Chart cdi is not installed
reason: Skipped
status: "False"
type: CDIUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Chart kubevirt is not installed
reason: Skipped
status: "False"
type: KubeVirtUpgraded
- lastTransitionTime: "2024-10-01T06:27:13Z"
message: Chart neuvector-crd is not installed
reason: Skipped
status: "False"
type: NeuVectorUpgraded
- lastTransitionTime: "2024-10-01T06:27:14Z"
message: Specified version of chart endpoint-copier-operator is already installed
reason: Skipped
status: "False"
type: EndpointCopierOperatorUpgraded
- lastTransitionTime: "2024-10-01T06:27:14Z"
message: Chart elemental-operator upgrade succeeded
reason: Succeeded
status: "True"
type: ElementalUpgraded
- lastTransitionTime: "2024-10-01T06:27:15Z"
message: Chart sriov-crd is not installed
reason: Skipped
status: "False"
type: SRIOVUpgraded
- lastTransitionTime: "2024-10-01T06:27:16Z"
message: Chart akri is not installed
reason: Skipped
status: "False"
type: AkriUpgraded
- lastTransitionTime: "2024-10-01T06:27:19Z"
message: Chart metal3 is not installed
reason: Skipped
status: "False"
type: Metal3Upgraded
- lastTransitionTime: "2024-10-01T06:27:27Z"
message: Chart rancher-turtles is not installed
reason: Skipped
status: "False"
type: RancherTurtlesUpgraded
lastSuccessfulReleaseVersion: 3.1.0
observedGeneration: 1
sucNameSuffix: 90315a2b6d
20.5.2 Helm Controller #
このセクションでは、helm-controllerによって作成されたリソースを追跡する方法について説明します。
以下の手順は、kubectl
が Upgrade
Controller
が導入されているクラスタに接続するように設定されていることを前提としています。
特定のコンポーネントの
HelmChart
リソースを見つけます。kubectl get helmcharts -n kube-system
HelmChart
リソースの名前を使用して、helm-controller
によって作成されたアップグレードPodを見つけます。kubectl get pods -l helmcharts.helm.cattle.io/chart=<helmchart_name> -n kube-system # Example for Rancher kubectl get pods -l helmcharts.helm.cattle.io/chart=rancher -n kube-system NAME READY STATUS RESTARTS AGE helm-install-rancher-tv9wn 0/1 Completed 0 16m
コンポーネント固有のPodのログを表示します。
kubectl logs <pod_name> -n kube-system
20.6 既知の制限事項 #
ダウンストリーム
クラスタのアップグレードはUpgrade Controller
によってまだ管理されていません。ダウンストリーム
クラスタをアップグレードする方法については、「ダウンストリームクラスタ」(第29章 「ダウンストリームクラスタ」)セクションを参照してください。Upgrade Controller
は、 EIB (第9章 「Edge Image Builder」)を通じてデプロイされる追加のSUSE Edge Helmチャートについて、その、HelmChart CRがkube-system
ネームスペースにデプロイされていることを想定しています。これを実行するには、EIB定義ファイルでinstallationNamespace
プロパティを設定します。詳細については、アップストリームドキュメントを参照してください。現在、
Upgrade Controller
には、管理
クラスタで現在実行中のEdgeリリースバージョンを判断する方法がありません。クラスタで現在実行しているEdgeリリースバージョンより大きいEdgeリリースバージョンを指定するようにしてください。現在、
Upgrade Controller
は、非エアギャップ環境のアップグレードのみをサポートしています。エアギャップアップグレードは、まだ可能ではありません。