documentation.suse.com / SUSE Edgeドキュメント / コンポーネント / Upgrade Controller

23 Upgrade Controller

次のSUSE Edgeプラットフォームコンポーネントに対してアップグレードを実行できるKubernetesコントローラ:

  • オペレーティングシステム(SUSE Linux Micro)

  • Kubernetes (K3sとRKE2)

  • 追加のコンポーネント(Rancher、Elemental、SUSE Securityなど)

Upgrade Controllerは、アップグレードのトリガとして機能する単一のユーザ向けリソース内に上記コンポーネントの複雑さをカプセル化することで、アップグレードプロセスを効率化します。ユーザはこのリソースを設定する必要があるのみで、Upgrade Controllerが残りの作業を行います。

注記
注記

Upgrade Controllerは現在、非エアギャップ管理クラスタに対してのみSUSE Edgeプラットフォームのアップグレードをサポートしています。詳細については、23.7項 「既知の制限事項」セクションを参照してください。

23.1 SUSE EdgeでのUpgrade Controllerの用途

Upgrade Controllerは、管理クラスタをあるSUSE Edgeリリースバージョンから次のバージョンにアップグレードするために必要な(以前は手動の)「Day 2」操作を自動化するために必要不可欠です。

この自動化のために、Upgrade ControllerはSystem Upgrade Controller (第22章 「System Upgrade Controller)やHelm Controllerなどのツールを利用します。

Upgrade Controllerの仕組みの詳細については、23.4項 「Upgrade Controllerの仕組み」を参照してください。

Upgrade Controllerの既知の制限事項については、23.7項 「既知の制限事項」を参照してください。

Upgrade ControllerとSystem Upgrade Controllerの違いについては、23.2項 「Upgrade ControllerとSystem Upgrade Controller」を参照してください。

23.2 Upgrade ControllerとSystem Upgrade Controller

System Upgrade Controller (SUC) (第22章 「System Upgrade Controller)は、アップグレード手順を特定のKubernetesノードに伝播する汎用ツールです。

System Upgrade ControllerはSUSE Edgeプラットフォームの一部の「Day 2」操作をサポートしていますが、すべてをカバーしているわけではありません。また、サポートされている操作であっても、ユーザは複数のSUC Planを手動で設定、維持、およびデプロイする必要があります。これはエラーが発生しやすいプロセスであり、予期しない問題が発生する可能性があります。

これにより、SUSE Edgeプラットフォームのさまざまな「Day 2」操作の複雑さを自動化および抽象化するツールが必要になりました。こうしてUpgrade Controllerが 開発されました。Upgrade Controllerは、アップグレードを推進する単一のユーザ向けリソースを導入することで、アップグレードプロセスをシンプルにします。ユーザはこのリソースを管理する必要があるのみで、 Upgrade Controllerが残りの作業を行います。

23.3 Upgrade Controllerのインストール

23.3.1 前提条件

23.3.2 手順

  1. 管理クラスタにUpgrade Controller Helmチャートをインストールします。

    helm install upgrade-controller oci://registry.suse.com/edge/charts/upgrade-controller --version 303.0.1+up0.1.1 --create-namespace --namespace upgrade-controller-system
  2. Upgrade Controllerのデプロイメントを検証します。

    kubectl get deployment -n upgrade-controller-system
  3. Upgrade Controller Podを検証します。

    kubectl get pods -n upgrade-controller-system
  4. Upgrade Controller Podログを検証します。

    kubectl logs <pod_name> -n upgrade-controller-system

23.4 Upgrade Controllerの仕組み

Edgeリリースのアップグレードを実行するため、Upgrade Controllerでは2つの新しいKubernetesカスタムリソースが導入されました。

  • UpgradePlan (23.5.1項 「UpgradePlan」) - ユーザが作成、Edgeリリースアップグレードに関する設定を保持)。

  • ReleaseManifest (23.5.2項 「ReleaseManifest」) - Upgrade Controllerが作成。特定のEdgeリリースバージョンに固有のコンポーネントバージョンを保持する。このファイルはユーザが編集する必要はありません。

Upgrade Controllerは、 UpgradePlanリソースのreleaseVersionプロパティでユーザによって指定されたEdgeリリースバージョンのコンポーネントデータを保持するReleaseManifestリソースの作成に進みます。

Upgrade Controllerは、ReleaseManifestのコンポーネントデータを使用して、次の順序のEdgeリリースコンポーネントのアップグレードに進みます。

注記
注記

アップグレードプロセス中に、Upgrade Controllerは、作成したUpgradePlanにアップグレード情報を絶えず出力します。アップグレードプロセスを追跡する方法の詳細については、 「アップグレードプロセスの追跡」(23.6項 「アップグレードプロセスの追跡」)を参照してください。

23.4.1 オペレーティングシステムのアップグレード

オペレーティングシステムをアップグレードするため、Upgrade Controllerは、次の命名テンプレートを持つSUC (第22章 「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」(23.5.1項 「UpgradePlan」)のセクションを参照してください。

23.4.2 Kubernetesのアップグレード

クラスタのKubernetesディストリビューションをアップグレードするため、Upgrade Controllerは、次の命名テンプレートを持つSUC (第22章 「System Upgrade Controller) Planを作成します。

  • コントロールプレーンノードのKubernetesアップグレードに関連するSUC Planの場合 - control-plane-<k8s-version>-<suffix>

  • ワーカーノードのKubernetesアップグレードに関連するSUC Planの場合 - workers-<k8s-version>-<suffix>

これらのプランに基づいて、SUCは、実際のKubernetesアップグレードを実行するクラスタの各ノードにワークロードを作成します。

Kubernetesアップグレードは、コントロールプレーンノードから順に一度に1台のノードが実行されます。コントロールプレーンノードのアップグレードが終了した場合にのみ、ワーカーノードのアップグレードが開始されます。

注記
注記

クラスタに特定のタイプの1台を超えるノードがある場合、 Upgrade Controllerは、クラスタノードのdrainを実行するようにKubernetes SUC Planを設定します。

コントロールノードが1台を超え1台のみワーカーノードがあるクラスタでは、コントロールプレーンノードに対してのみdrainが実行されます。その逆も同様です。

ノードのdrainを完全に無効にする方法については、23.5.1項 「UpgradePlan」を参照してください。

23.4.3 追加のコンポーネントのアップグレード

現在、追加のコンポーネントはすべてHelmチャートを介してインストールされます。特定のリリースのコンポーネントの全リストについては、リリースノート(52.1項 「要約」)を参照してください。

EIB (第11章 「Edge Image Builder)を通じてデプロイされたHelmチャートの場合、Upgrade Controllerは各コンポーネントの既存のHelmChart CRを更新します。

EIB以外でデプロイされたHelmチャートの場合、Upgrade Controllerは、コンポーネントごとにHelmChartリソースを作成します。

HelmChartリソースの作成/更新後、 Upgrade Controllerは、helm-controllerに依存してこの変更を取得し、実際のコンポーネントのアップグレードを続行します。

チャートはReleaseManifestの順序に基づいて順次アップグレードされます。追加の値はUpgradePlanを通じて渡すこともできます。新しいSUSE Edgeリリースでチャートのバージョンが変更されない場合、アップグレードされません。これに関する詳細については、23.5.1項 「UpgradePlan」を参照してください。

23.5 Kubernetes API拡張機能

Upgrade Controllerによって導入されたKubernetes APIの拡張機能。

23.5.1 UpgradePlan

Upgrade Controllerは、UpgradePlanと呼ばれる新たなKubernetes カスタムリソースを導入しました。

UpgradePlanは、Upgrade Controllerの指示メカニズムとして機能し、次の設定をサポートします。

  • releaseVersion - クラスタをアップグレースする必要があるEdgeリリースバージョン。リリースバージョンは、セマンティックバージョン管理に従う必要があり、リリースノート(52.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

23.5.2 ReleaseManifest

Upgrade Controllerは、ReleaseManifestと呼ばれる新たなKubernetesカスタムリソースを導入しました。

ReleaseManifestリソースは、Upgrade Controllerによって作成され、1つの特定のEdgeリリースバージョンのコンポーネントデータを保持します。つまり、各Edgeリリースバージョンのアップグレードは、異なるReleaseManifestリソースによって表されます。

警告
警告

Release Manifestは常に、Upgrade Controllerによって作成される必要があります。

ReleaseManifestリソースを手動で作成または編集することはお勧めしていません。 ユーザが手動で作成または編集することを決めた場合は、自己責任で行う必要があります。

Release Manifestが提供するコンポーネントデータには、以下が含まれますが、これに制限されません。

  • オペレーティングシステムデータ - バージョン、サポートされているアーキテクチャ、追加のアップグレードデータなど

  • Kubernetesディストリビューションデータ - RKE2/K3sでサポートされているバージョン

  • 追加のコンポーネントデータ - SUSE Helmチャートデータ(場所、バージョン、名前など)

ReleaseManifestの例については、アップストリームドキュメントを参照してください。これは単なる例であって、有効なReleaseManifestリソースとして作成することを目的としたものではないことに注意してください。

23.6 アップグレードプロセスの追跡

このセクションは、ユーザがUpgradePlanリソースを作成すると、Upgrade Controllerが開始するアップグレードプロセスを追跡およびデバッグする手段として機能します。

23.6.1 一般

アップグレードプロセスの状態に関する一般情報は、Upgrade Planのステータス状況で確認できます。

Upgrade Planリソースのステータスは、次の方法で確認できます。

kubectl get upgradeplan <upgradeplan_name> -n upgrade-controller-system -o yaml

Upgrade Planの実行例:

apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
  name: upgrade-plan-mgmt
  namespace: upgrade-controller-system
spec:
  releaseVersion: 3.3.1
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 (ステータス) - 現在の状態 タイプのステータス。TrueFalseUnknown (不明)のいずれか。

  • type (タイプ) - 現在アップグレードされたコンポーネントのインジケータ。

Upgrade Controllerは、OSUpgradedおよびKubernetesUpgradedタイプのコンポーネント状態のSUC Planを作成します。これらのコンポーネント用に作成されたSUC Planを詳細に追跡するには、22.3項 「System Upgrade Controller Planのモニタリング」を参照してください。

他のすべてのコンポーネント状態のタイプは、helm-controllerによって作成されたリソースを表示することで詳細に追跡できます。詳細については、23.6.2項 「Helm Controller」を参照してください。

Upgrade ControllerによってスケジュールされたUpgrade Planは、次の場合にsuccessful (成功)とマーク付けすることができます。

  1. Pending (保留中)またはInProgress (進行中)のコンポーネントの状態がありません。

  2. lastSuccessfulReleaseVersionプロパティがUpgrade Planの設定で指定されたreleaseVersionを指しています。このプロパティは、 アップグレードプロセスが成功すると、Upgrade ControllerによってUpgrade Planのステータスに追加されます。

成功したUpgradePlanの例:

apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
  name: upgrade-plan-mgmt
  namespace: upgrade-controller-system
spec:
  releaseVersion: 3.3.1
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.3.1
  observedGeneration: 1
  sucNameSuffix: 90315a2b6d

23.6.2 Helm Controller

このセクションでは、helm-controllerによって作成されたリソースを追跡する方法について説明します。

注記
注記

以下の手順は、kubectlがUpgrade Controllerが導入されているクラスタに接続するように設定されていることを前提としています。

  1. 特定のコンポーネントのHelmChartリソースを見つけます。

    kubectl get helmcharts -n kube-system
  2. 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
  3. コンポーネント固有のPodのログを表示します。

    kubectl logs <pod_name> -n kube-system

23.7 既知の制限事項

  • ダウンストリームクラスタのアップグレードはUpgrade Controllerによってまだ管理されていません。ダウンストリームクラスタをアップグレードする方法については、第36章 「ダウンストリームクラスタを参照してください。

  • Upgrade Controllerは、 EIB (第11章 「Edge Image Builder)を通じてデプロイされる追加のSUSE Edge Helmチャートについて、そのHelmChart CRkube-systemネームスペースにデプロイされていることを想定しています。これを実行するには、EIB定義ファイルでinstallationNamespaceプロパティを設定します。詳細については、アップストリームドキュメントを参照してください。

  • 現在、Upgrade Controllerには、管理クラスタで現在実行中のEdgeリリースバージョンを判断する方法がありません。クラスタで現在実行しているEdgeリリースバージョンより大きいEdgeリリースバージョンを指定するようにしてください。

  • 現在、Upgrade Controllerは、非エアギャップ環境のアップグレードのみをサポートしています。エアギャップアップグレードは、まだ可能ではありません。

Documentation survey