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 ControllerHelmチャートをインストールします。helm install upgrade-controller oci://registry.suse.com/edge/3.1/upgrade-controller-chart --version 0.1.0 --create-namespace --namespace upgrade-controller-systemUpgrade Controllerデプロイメントを検証します。kubectl get deployment -n upgrade-controller-systemUpgrade Controllerポッドを検証します。kubectl get pods -n upgrade-controller-systemUpgrade 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 yamlUpgradePlanの実行例:
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-systemHelmChartリソースの名前を使用して、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は、非エアギャップ環境のアップグレードのみをサポートしています。エアギャップアップグレードは、まだ可能ではありません。