18 系统升级控制器 #
请参阅 系统升级控制器文档。
系统升级控制器 (SUC) 旨在提供一个通用的、Kubernetes 原生的升级控制器(针对节点)。它引入了一个新的 CRD,即 Plan,用于定义您的所有升级策略/要求。Plan 是对集群中节点进行变更的待处理意图。
18.1 SUSE Edge 如何使用系统升级控制器? #
SUSE Edge 使用 SUC 来促进与管理集群和下游集群上的操作系统及 Kubernetes 版本升级相关的各种“第 2 天”操作。
“第 2 天”操作通过 SUC Plans 定义。基于这些计划,SUC 在每个节点上部署工作负载以执行相应的“第 2 天”操作。
SUC 也用于 Chapter 19, 升级控制器 中。要了解有关 SUC 与 Upgrade Controller 之间主要区别的更多信息,请参阅 Section 19.2, “升级控制器与系统升级控制器”。
18.2 安装系统升级控制器 #
从 Rancher v2.10.0 开始,System Upgrade Controller 会自动安装。
仅当您的环境 not 由 Rancher 管理,或者您的 Rancher 版本低于 v2.10.0 时,请遵循以下步骤 only。
我们建议您通过位于 suse-edge/fleet-examples 储存库中的 Fleet (Chapter 6, Fleet) 安装 SUC。
suse-edge/fleet-examples 储存库提供的资源 必须 始终从有效的 fleet-examples 版本 中使用。要确定您需要使用哪个版本,请参阅 发行说明 (Chapter 41, 发行说明)。
如果您无法使用 Fleet 安装 SUC,则可以通过 Rancher 的 Helm chart 储存库进行安装,或者将 Rancher 的 Helm chart 合并到您自己的第三方 GitOps 工作流程中。
本节涵盖:
18.2.1 System Upgrade Controller Fleet 安装 #
使用 Fleet,有两种可能的资源可用于部署 SUC:
GitRepo 资源 - 适用于有外部/本地 Git 服务器可用的用例。有关安装说明,请参阅 System Upgrade Controller 安装 - GitRepo (Section 18.2.1.1, “System Upgrade Controller 安装 - GitRepo”)。
Bundle 资源 - 适用于不支持本地 Git 服务器选项的隔离的用例。有关安装说明,请参阅 System Upgrade Controller 安装 - Bundle (Section 18.2.1.2, “系统升级控制器安装 - Bundle”)。
18.2.1.1 System Upgrade Controller 安装 - GitRepo #
在您的 管理 集群中:
确定要在哪些集群上部署 SUC。这可以通过在您的 管理 集群上的正确 Fleet 工作区中部署 SUC
GitRepo资源来完成。默认情况下,Fleet 有两个工作区:fleet-local- 用于需要在 管理 集群上部署的资源。fleet-default- 用于需要部署在 下游 集群上的资源。有关 Fleet 工作区的更多信息,请参阅 上游 文档。
部署
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在部署以下资源之前,您 必须 提供有效的
targets配置,以便 Fleet 知道在哪些下游集群上部署您的资源。有关如何映射到下游集群的信息,请参阅 Mapping to Downstream Clusters。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
验证
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验证系统升级控制器部署:
kubectl get deployment system-upgrade-controller -n cattle-system NAME READY UP-TO-DATE AVAILABLE AGE system-upgrade-controller 1/1 1 1 2m20s
18.2.1.2 系统升级控制器安装 - Bundle #
本节说明如何使用 fleet-cli 从标准 Fleet 配置构建和部署 Bundle 资源。
在具有网络访问权限的机器上下载
fleet-cli:Note请确保您下载的 fleet-cli 版本与集群上部署的 Fleet 版本相匹配。
对于 Mac 用户,有一个 fleet-cli Homebrew 公式。
对于 Linux 和 Windows 用户,二进制文件作为每个 Fleet release 的 assets 提供。
Linux AMD:
curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/vv0.15.2/fleet-linux-amd64Linux ARM:
curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/vv0.15.2/fleet-linux-arm64
使
fleet-cli成为一个可执行程序:chmod +x fleet-cli克隆您希望使用的
suse-edge/fleet-examplesrelease:git clone -b release-3.6.1 https://github.com/suse-edge/fleet-examples.git导航到位于
fleet-examples储存库中的 SUC fleet:cd fleet-examples/fleets/day2/system-upgrade-controller确定要在哪些集群上部署 SUC。这可以通过在管理集群内的正确 Fleet 工作区中部署 SUC Bundle 来完成。默认情况下,Fleet 有两个工作区:
fleet-local- 用于需要在 管理 集群上部署的资源。fleet-default- 用于需要部署在 下游 集群上的资源。有关 Fleet 工作区的更多信息,请参阅 upstream 文档。
如果您打算仅在下游集群上部署 SUC,请创建一个与特定集群匹配的
targets.yaml文件:cat > targets.yaml <<EOF targets: - clusterSelector: CHANGEME EOF有关如何映射到下游集群的信息,请参阅 映射到下游集群。
继续构建 Bundle:
Note请确保您 not 在
fleet-examples/fleets/day2/system-upgrade-controller目录中下载 fleet-cli,否则它会被打包到 Bundle 中,这不被建议。要在您的管理集群上部署 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 转换为 Bundle。
有关
fleet-cli apply命令的更多信息,请参阅 fleet apply。
将
system-upgrade-controller-bundle.yamlbundle 传输到您的管理集群机器:scp system-upgrade-controller-bundle.yaml <machine-address>:<filesystem-path>在您的管理集群上,部署
system-upgrade-controller-bundle.yamlBundle:kubectl apply -f system-upgrade-controller-bundle.yaml在您的管理集群上,验证 Bundle 是否已部署:
# 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根据您部署 Bundle 的 Fleet 工作区,导航至该集群并验证 SUC 部署:
NoteSUC 始终部署在 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
18.2.2 System Upgrade Controller Helm 安装 #
添加 Rancher chart 储存库:
helm repo add rancher-charts https://charts.rancher.io/部署 SUC chart:
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。
验证 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
18.3 监控 System Upgrade Controller 计划 #
可以通过以下方式查看 SUC 计划:
通过 Rancher UI (Section 18.3.1, “监控 System Upgrade Controller 计划 - Rancher UI”)。
通过集群内部的 manual monitoring (Section 18.3.2, “监控 System Upgrade Controller 计划 - 手动”)。
为 SUC 计划部署的 Pod 在成功执行后会保持存活 15 分钟。此后,它们将由创建它们的相应 Job 移除。若要在此时间段后访问 Pod 的日志,您应该为集群启用日志记录。有关如何在 Rancher 中执行此操作的信息,请参阅 Rancher Integration with Logging Services。
18.3.1 监控 System Upgrade Controller 计划 - Rancher UI #
要检查特定 SUC 计划的 Pod 日志:
在左上角,☰ → <your-cluster-name>
选择 Workloads → Pods
选择
Only User Namespaces下拉菜单并添加cattle-system名称空间在 Pod 筛选栏中,输入您的 SUC 计划 Pod 的名称。名称将采用以下模板格式:
apply-<plan_name>-on-<node_name>Note对于特定的 SUC 计划,可能同时存在
Completed和UnknownPod。这是预期情况,由某些升级的性质导致。选择您要查看日志的 Pod,然后导航至 ⋮ → View Logs
18.3.2 监控 System Upgrade Controller 计划 - 手动 #
以下步骤假设 kubectl 已配置为连接到部署了 SUC 计划 的集群。
列出已部署的 SUC 计划:
kubectl get plans -n cattle-system获取 SUC 计划的 Pod:
kubectl get pods -l upgrade.cattle.io/plan=<plan_name> -n cattle-systemNote对于特定的 SUC 计划,可能同时存在
Completed和UnknownPods。这是预期的情况,由于某些升级的性质所致。获取 Pod 的日志:
kubectl logs <pod_name> -n cattle-system