documentation.suse.com / SUSE Edge 文档 / 组件 / 系统升级控制器

22 系统升级控制器

请参见系统升级控制器文档

系统升级控制器 (SUC) 旨在提供一个针对节点的 Kubernetes 原生通用升级控制器。它引入了一个新的 CRD,即计划,用于定义您的各种升级策略/要求。计划的主要意图是改变群集中的节点。

22.1 SUSE Edge 如何使用系统升级控制器?

SUSE Edge 使用 SUC 来协助完成管理群集和下游群集中与操作系统及 Kubernetes 版本升级相关的各类“Day 2”操作。

“Day 2”操作通过 SUC 计划来定义。SUC 会根据这些计划在每个节点上部署工作负载,以执行相应的“Day 2”操作。

第 23 章 “升级控制器中也会使用 SUC。要了解 SUC 与升级控制器之间的主要区别,请参见第 23.2 节 “升级控制器与系统升级控制器”

22.2 安装系统升级控制器

重要
重要

从 Rancher 2.10.0 版本开始,会自动安装系统升级控制器

仅当您的环境由 Rancher 管理,或者您的 Rancher 版本低于 2.10.0 时,才需要执行以下步骤。

建议您通过位于 suse-edge/fleet-examples 储存库中的 Fleet(第 8 章 “Fleet)安装 SUC。

注意
注意

suse-edge/fleet-examples 储存库提供的资源必须始终在有效的 fleet-examples 版本中使用。要确定需使用哪个版本,请参见发行说明(第 52.1 节 “摘要”)。

如果无法使用 Fleet 安装 SUC,可以通过 Rancher 的 Helm chart 储存库进行安装,或者将 Rancher 的 Helm chart 整合到您自己的第三方 GitOps 工作流程中。

本节介绍如下内容:

22.2.1 系统升级控制器 Fleet 安装

使用 Fleet 时,可以通过两种资源来部署 SUC:

22.2.1.1 系统升级控制器安装 - GitRepo

注意
注意

此过程也可以通过 Rancher UI 完成(如果有相关 UI)。有关详细信息,请参见在 Rancher UI 中访问 Fleet

在您的管理群集中:

  1. 确定要在哪些群集上部署 SUC,方法是在管理群集内的适当 Fleet 工作空间中部署 SUC GitRepo。默认情况下,Fleet 有两个工作空间:

    • 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.3.0
        paths:
        - fleets/day2/system-upgrade-controller
        repo: https://github.com/suse-edge/fleet-examples.git
      EOF
    • 要在下游群集上部署 SUC,请使用:

      注意
      注意

      在部署下方资源之前,您必须提供有效的目标配置,以便 Fleet 了解资源要部署至哪些下游群集。有关如何映射到下游群集的信息,请参见映射到下游群集

      kubectl apply -n fleet-default -f - <<EOF
      apiVersion: fleet.cattle.io/v1alpha1
      kind: GitRepo
      metadata:
        name: system-upgrade-controller
      spec:
        revision: release-3.3.0
        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.3.0   1/1
  4. 验证系统升级控制器部署:

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

22.2.1.2 系统升级控制器安装 - 捆绑包

本节说明如何使用 fleet-cli 在标准 Fleet 配置下构建并部署捆绑包资源。

  1. 在连接网络的计算机上下载 fleet-cli

    注意
    注意

    确保您下载的 fleet-cli 版本与群集上部署的 Fleet 版本匹配。

    • 对于 Mac 用户,有一个 fleet-cli Homebrew Formulae。

    • 对于 Linux 和 Windows 用户,每个 Fleet 版本都会有作为资产存在的二进制文件。

      • Linux AMD:

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

        curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/v0.12.2/fleet-linux-arm64
  2. fleet-cli 设为可执行文件:

    chmod +x fleet-cli
  3. 克隆您要使用的 suse-edge/fleet-examples 版本

    git clone -b release-3.3.0 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 有两个工作空间:

    • fleet-local - 用于需要部署在管理群集上的资源。

    • fleet-default - 用于需要部署在下游群集上的资源。

      有关 Fleet 工作空间的详细信息,请参见上游文档。

  6. 如果您只打算在下游群集上部署 SUC,请创建一个与特定群集匹配的 targets.yaml 文件:

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

    有关如何映射到下游群集的信息,请参见映射到下游群集

  7. 继续构建捆绑包:

    注意
    注意

    请确保您没有下载 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 Chart 转换为捆绑包

      有关 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 部署:

    注意
    注意

    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

22.2.2 系统升级控制器 Helm 安装

  1. 添加 Rancher chart 储存库:

    helm repo add rancher-charts https://charts.rancher.io/
  2. 部署 SUC chart:

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

    此命令将安装 Edge 3.3.1 平台所需的 SUC 0.15.2 版本。

  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

22.3 监控系统升级控制器计划

可以通过以下方式查看 SUC 计划:

重要
重要

为 SUC 计划部署的 Pod 在成功执行后会保持 15 分钟的活动状态。之后,创建这些 Pod 的相应作业会将其去除。如果要在这段时间后访问 Pod 的日志,您应该为群集启用日志记录。有关如何在 Rancher 中执行此操作的信息,请参见 Rancher 与日志记录服务的集成

22.3.1 监控系统升级控制器计划 - Rancher UI

要检查特定 SUC 计划的 Pod 日志,请执行以下操作:

  1. 在左上角,选择 ☰ → <您的群集名称>

  2. 选择“Workloads”(工作负载)→“Pod”

  3. 选择 Only User Namespaces(仅用户名称空间)下拉菜单,并添加 cattle-system 名称空间。

  4. 在 Pod 过滤栏中输入 SUC 计划 Pod 的名称。该名称采用以下模板格式:apply-<计划名称>-on-<节点名称>

    注意
    注意

    对于特定的 SUC 计划,可能同时有已完成未知的 Pod。这是正常的,原因要归咎于一些升级的性质。

  5. 选择您要查看其日志的 Pod,然后导航到 ⋮ → View Logs(查看日志)

22.3.2 监控系统升级控制器计划 - 手动

注意
注意

以下步骤假设 kubectl 已配置为连接到已部署 SUC 计划的群集。

  1. 列出部署的 SUC 计划:

    kubectl get plans -n cattle-system
  2. 获取 SUC 计划的 Pod:

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

    对于特定的 SUC 计划,可能同时有已完成未知的 Pod。这是正常的,原因要归咎于一些升级的性质。

  3. 获取 Pod 的日志:

    kubectl logs <pod_name> -n cattle-system
Documentation survey