|Index|SUSE Telco Cloud ドキュメント|コンポーネント|System Upgrade Controller
Applies to SUSE Telco Cloud 3.6

20 System Upgrade Controller

System Upgrade Controllerのドキュメントを参照してください。

System Upgrade Controller(SUC)は、汎用的なKubernetesネイティブのアップグレードコントローラー(ノード用)を提供することを目的としています。これは、アップグレードポリシーや要件を定義するための新しいCRDである「Plan」を導入します。Planとは、クラスター内のノードの変更を意図した計画です。

20.1 SUSE Telco CloudはどのようにSystem Upgrade Controllerを使用しますか?

SUSE Telco Cloudは`SUC`を使用して、管理クラスターおよびダウンストリームクラスターにおけるOSとKubernetesのバージョンアップグレードに関連するさまざまな「Day 2」オペレーションを促進します。

「Day 2」オペレーションは`SUC Plans`を通じて定義されます。これらのプランに基づいて、`SUC`は各ノードにワークロードをデプロイし、それぞれの「Day 2」オペレーションを実行します。

`SUC`はChapter 21, Upgrade Controller内でも使用されます。SUCとUpgrade Controllerの主な違いの詳細については、Section 21.2, “Upgrade Controller vs System Upgrade Controller”を参照してください。

20.2 System Upgrade Controllerのインストール

Important
Important

Rancher v2.10.0以降、`System Upgrade Controller`は自動的にインストールされます。

以下の手順は、環境がRancherによって管理されていない場合、またはRancherのバージョンが`v2.10.0`より低い場合のみ実行してください。

suse-edge/fleet-examplesリポジトリにあるFleet (Chapter 9, Fleet)を使用してSUCをインストールすることをお勧めします。

Note
Note

`suse-edge/fleet-examples`リポジトリによって提供されるリソースは、*必ず*有効なfleet-examplesリリースから使用する必要があります。使用する必要があるリリースを確認するには、リリースノート (Chapter 75, リリースノート)を参照してください。

Fleetを使用してSUCをインストールできない場合は、RancherのHelmチャートリポジトリからインストールするか、RancherのHelmチャートを独自のサードパーティGitOpsワークフローに組み込むことができます。

このセクションでは、次の内容について説明します。

20.2.1 System Upgrade Controller Fleetのインストール

Fleetを使用する場合、SUCのデプロイに使用できるリソースは2つあります:

20.2.1.1 System Upgrade Controllerのインストール - GitRepo

Note
Note

このプロセスは、Rancher UIが利用可能な場合は、それを通じて行うこともできます。詳細については、Rancher UIでのFleetへのアクセスを参照してください。

*管理*クラスターで:

  1. SUCをデプロイするクラスターを決定します。これは、*管理*クラスター上の適切なFleetワークスペースにSUC `GitRepo`リソースをデプロイすることで実行されます。デフォルトでは、Fleetには2つのワークスペースがあります:

    • fleet-local - *管理*クラスターにデプロイする必要があるリソース用。

    • fleet-default - *ダウンストリーム*クラスターにデプロイする必要があるリソース用。

      Fleetワークスペースの詳細については、アップストリームのドキュメントを参照してください。

  2. `GitRepo`リソースをデプロイします:

    • 管理クラスターにSUCをデプロイするには:

      kubectl apply -n fleet-local -f - <<EOF
      apiVersion: fleet.cattle.io/v1alpha1
      kind: GitRepo
      metadata:
        name: system-upgrade-controller
      spec:
        revision: release-3.6.1
        paths:
        - fleets/day2/system-upgrade-controller
        repo: https://github.com/suse-edge/fleet-examples.git
      EOF
    • ダウンストリームクラスターにSUCをデプロイするには:

      Note
      Note

      以下のリソースをデプロイする前に、Fleetがどのダウンストリームクラスターにリソースをデプロイすべきかを認識できるよう、有効な targets 設定を 指定する必要があります。ダウンストリームクラスターへのマッピング方法については、ダウンストリームクラスターへのマッピング を参照してください。

      kubectl apply -n fleet-default -f - <<EOF
      apiVersion: fleet.cattle.io/v1alpha1
      kind: GitRepo
      metadata:
        name: system-upgrade-controller
      spec:
        revision: release-3.6.1
        paths:
        - fleets/day2/system-upgrade-controller
        repo: https://github.com/suse-edge/fleet-examples.git
        targets:
        - clusterSelector: CHANGEME
        # Example matching all clusters:
        # targets:
        # - clusterSelector: {}
      EOF
  3. GitRepo リソースがデプロイされていることを確認します:

    # Namespace will vary based on where you want to deploy SUC
    kubectl get gitrepo system-upgrade-controller -n <fleet-local/fleet-default>
    
    NAME                        REPO                                              COMMIT          BUNDLEDEPLOYMENTS-READY   STATUS
    system-upgrade-controller   https://github.com/suse-edge/fleet-examples.git   release-3.6.1   1/1
  4. System Upgrade Controllerのデプロイメントを検証します:

    kubectl get deployment system-upgrade-controller -n cattle-system
    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    system-upgrade-controller   1/1     1            1           2m20s

20.2.1.2 System Upgrade Controllerのインストール - Bundle

このセクションでは、fleet-cli を使用して、標準のFleet構成から Bundle リソースをビルドおよびデプロイする方法を説明します。

  1. ネットワークアクセスが可能なマシンで fleet-cli をダウンロードします:

    Note
    Note

    ダウンロードするfleet-cliのバージョンが、クラスターにデプロイされているFleetのバージョンと一致していることを確認してください。

    • Macユーザー向けには、fleet-cli のHomebrew Formulaeが用意されています。

    • LinuxおよびWindowsユーザー向けには、各Fleet リリースassets としてバイナリが提供されています。

      • Linux AMD:

        curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/vv0.15.2/fleet-linux-amd64
      • Linux ARM:

        curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/vv0.15.2/fleet-linux-arm64
  2. fleet-cli を実行可能にしてください:

    chmod +x fleet-cli
  3. 使用する suse-edge/fleet-examples リリース をクローンします:

    git clone -b release-3.6.1 https://github.com/suse-edge/fleet-examples.git
  4. fleet-examples リポジトリにあるSUC fleetに移動します:

    cd fleet-examples/fleets/day2/system-upgrade-controller
  5. SUCをデプロイするクラスターを決定します。これは、管理クラスター内の適切なFleetワークスペースにSUCバンドルをデプロイすることで実行されます。デフォルトでは、Fleetには2つのワークスペースがあります:

    • fleet-local - *管理*クラスターにデプロイする必要があるリソース用。

    • fleet-default - *ダウンストリーム*クラスターにデプロイする必要があるリソース用。

      Fleetワークスペースの詳細については、アップストリームのドキュメントを参照してください。

  6. SUCをダウンストリームクラスターのみにデプロイする場合は、特定のクラスターに一致する targets.yaml ファイルを作成してください:

    cat > targets.yaml <<EOF
    targets:
    - clusterSelector: CHANGEME
    EOF

    ダウンストリームクラスターへのマッピング方法については、ダウンストリームクラスターへのマッピング を参照してください。

  7. バンドルのビルドに進みます:

    Note
    Note

    fleet-examples/fleets/day2/system-upgrade-controller ディレクトリにfleet-cliを*ダウンロードしない*ように注意してください。そうしないと、バンドルに同梱されてしまい、推奨されません。

    • 管理クラスターにSUCをデプロイするには、以下を実行します。

      fleet-cli apply --compress -n fleet-local -o - system-upgrade-controller . > system-upgrade-controller-bundle.yaml
    • ダウンストリームクラスターにSUCをデプロイするには、以下を実行します。

      fleet-cli apply --compress --targets-file=targets.yaml -n fleet-default -o - system-upgrade-controller . > system-upgrade-controller-bundle.yaml

      このプロセスの詳細については、Helmチャートをバンドルに変換するを参照してください。

      fleet-cli apply コマンドの詳細については、fleet applyを参照してください。

  8. system-upgrade-controller-bundle.yaml バンドルを管理クラスターのマシンに転送します。

    scp system-upgrade-controller-bundle.yaml <machine-address>:<filesystem-path>
  9. 管理クラスター上で、system-upgrade-controller-bundle.yaml バンドルをデプロイします。

    kubectl apply -f system-upgrade-controller-bundle.yaml
  10. 管理クラスター上で、バンドルがデプロイされていることを検証します。

    # Namespace will vary based on where you want to deploy SUC
    kubectl get bundle system-upgrade-controller -n <fleet-local/fleet-default>
    
    NAME                        BUNDLEDEPLOYMENTS-READY   STATUS
    system-upgrade-controller   1/1
  11. バンドルをデプロイしたFleetワークスペースに基づいて、クラスターに移動し、SUCのデプロイを検証します。

    Note
    Note

    SUCは常に cattle-system ネームスペースにデプロイされます。

    kubectl get deployment system-upgrade-controller -n cattle-system
    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    system-upgrade-controller   1/1     1            1           111s

20.2.2 System Upgrade ControllerのHelmインストール

  1. Rancherチャートリポジトリを追加します。

    helm repo add rancher-charts https://charts.rancher.io/
  2. SUCチャートをデプロイします。

    helm install system-upgrade-controller rancher-charts/system-upgrade-controller --version 109.0.1 --set global.cattle.psp.enabled=false -n cattle-system --create-namespace

    これにより、Edge 3.6 プラットフォームで必要とされるSUCバージョン v0.19.1 がインストールされます。

  3. SUCのデプロイメントを検証します。

    kubectl get deployment system-upgrade-controller -n cattle-system
    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    system-upgrade-controller   1/1     1            1           37s

20.3 System Upgrade Controllerプランの監視

SUCプランは、以下の方法で確認できます。

Important
Important

SUCプラン用にデプロイされたポッドは、実行成功後 15 分間保持されます。その後、それらを作成した対応するジョブによって削除されます。この期間を過ぎてもPodのログにアクセスできるようにするには、クラスターのログ記録を有効にする必要があります。Rancherでこれを行う方法の詳細については、https://ranchermanager.docs.rancher.com/v2.14/integrations-in-rancher/logging[Rancher Integration with Logging Services]を参照してください。

20.3.1 Upgrade Controllerプランの監視 - Rancher UI

特定のSUCプランのPodログを確認するには:

  1. 左上隅にある*☰ → <your-cluster-name>*

  2. [Workloads] → > [Pods]を選択します。

  3. `Only User Namespaces`ドロップダウンメニューを選択し、`cattle-system`ネームスペースを追加します。

  4. Podフィルターバーに、SUCプランPodの名前を入力します。名前は次のテンプレート形式になります:apply-<plan_name>-on-<node_name>

    Note
    Note

    特定のSUCプランに対して、`Completed`と`Unknown`の両方のPodが存在する場合があります。これは想定される動作であり、一部のアップグレードの性質上発生します。

  5. ログを確認するPodを選択し、*⋮ → View Logs*に移動します。

20.3.2 Upgrade Controllerプランの監視 - 手動

Note
Note

以下の手順では、`kubectl`が*SUC Plans*がデプロイされているクラスターに接続するように構成されていることを前提としています。

  1. デプロイされた*SUC*プランを一覧表示します:

    kubectl get plans -n cattle-system
  2. *SUC*プランのPodを取得します:

    kubectl get pods -l upgrade.cattle.io/plan=<plan_name> -n cattle-system
    Note
    Note

    特定のSUCプランに対して、`Completed`と`Unknown`の両方のPodが存在する場合があります。これは想定される動作であり、一部のアップグレードの性質上発生します。

  3. Podのログを取得します:

    kubectl logs <pod_name> -n cattle-system