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 安装系统升级控制器 #
建议您通过位于 suse-edge/fleet-examples 储存库中的 Fleet(第 8 章 “Fleet”)安装 SUC。
如果无法使用 Fleet 安装 SUC,可以通过 Rancher 的 Helm chart 储存库进行安装,或者将 Rancher 的 Helm chart 整合到您自己的第三方 GitOps 工作流程中。
本节介绍如下内容:
Fleet 安装(第 22.2.1 节 “系统升级控制器 Fleet 安装”)
Helm 安装(第 22.2.2 节 “系统升级控制器 Helm 安装”)
22.2.1 系统升级控制器 Fleet 安装 #
使用 Fleet 时,可以通过两种资源来部署 SUC:
GitRepo 资源 - 适用于有外部/本地 Git 服务器可用的使用场景。有关安装说明,请参见第 22.2.1.1 节 “系统升级控制器安装 - GitRepo”。
捆绑包资源 - 适用于不支持本地 Git 服务器选项的隔离使用场景。有关安装说明,请参见第 22.2.1.2 节 “系统升级控制器安装 - 捆绑包”。
22.2.1.1 系统升级控制器安装 - 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.3.0 paths: - fleets/day2/system-upgrade-controller repo: https://github.com/suse-edge/fleet-examples.git EOF
要在下游群集上部署 SUC,请使用:
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
验证
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
验证系统升级控制器部署:
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 配置下构建并部署捆绑包
资源。
在连接网络的计算机上下载
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
将
fleet-cli
设为可执行文件:chmod +x fleet-cli
克隆您要使用的
suse-edge/fleet-examples
版本:git clone -b release-3.3.0 https://github.com/suse-edge/fleet-examples.git
导航到
fleet-examples
储存库中的 SUC Fleet:cd fleet-examples/fleets/day2/system-upgrade-controller
确定要在哪些群集上部署 SUC,方法是在管理群集内的适当 Fleet 工作空间中部署 SUC 捆绑包。默认情况下,Fleet 有两个工作空间:
fleet-local
- 用于需要部署在管理群集上的资源。fleet-default
- 用于需要部署在下游群集上的资源。有关 Fleet 工作空间的详细信息,请参见上游文档。
如果您只打算在下游群集上部署 SUC,请创建一个与特定群集匹配的
targets.yaml
文件:cat > targets.yaml <<EOF targets: - clusterSelector: CHANGEME EOF
有关如何映射到下游群集的信息,请参见映射到下游群集
继续构建捆绑包:
注意请确保您没有下载
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。
将
system-upgrade-controller-bundle.yaml
捆绑包传输到您的管理群集计算机:scp system-upgrade-controller-bundle.yaml <machine-address>:<filesystem-path>
在您的管理群集上,部署
system-upgrade-controller-bundle.yaml
捆绑包:kubectl apply -f system-upgrade-controller-bundle.yaml
在您的管理群集上,验证捆绑包是否已部署:
# 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
根据捆绑包部署到的 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 安装 #
添加 Rancher chart 储存库:
helm repo add rancher-charts https://charts.rancher.io/
部署 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 版本。
验证 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 计划:
通过 Rancher UI(第 22.3.1 节 “监控系统升级控制器计划 - Rancher UI”)。
通过群集内部的手动监控(第 22.3.2 节 “监控系统升级控制器计划 - 手动”)。
为 SUC 计划部署的 Pod 在成功执行后会保持 15 分钟的活动状态。之后,创建这些 Pod 的相应作业会将其去除。如果要在这段时间后访问 Pod 的日志,您应该为群集启用日志记录。有关如何在 Rancher 中执行此操作的信息,请参见 Rancher 与日志记录服务的集成。
22.3.1 监控系统升级控制器计划 - Rancher UI #
要检查特定 SUC 计划的 Pod 日志,请执行以下操作:
在左上角,选择 ☰ → <您的群集名称>
选择“Workloads”(工作负载)→“Pod”
选择
Only User Namespaces
(仅用户名称空间)下拉菜单,并添加cattle-system
名称空间。在 Pod 过滤栏中输入 SUC 计划 Pod 的名称。该名称采用以下模板格式:
apply-<计划名称>-on-<节点名称>
注意对于特定的 SUC 计划,可能同时有
已完成
和未知
的 Pod。这是正常的,原因要归咎于一些升级的性质。选择您要查看其日志的 Pod,然后导航到 ⋮ → View Logs(查看日志)
22.3.2 监控系统升级控制器计划 - 手动 #
以下步骤假设 kubectl
已配置为连接到已部署 SUC
计划的群集。
列出部署的 SUC 计划:
kubectl get plans -n cattle-system
获取 SUC 计划的 Pod:
kubectl get pods -l upgrade.cattle.io/plan=<plan_name> -n cattle-system
注意对于特定的 SUC 计划,可能同时有
已完成
和未知
的 Pod。这是正常的,原因要归咎于一些升级的性质。获取 Pod 的日志:
kubectl logs <pod_name> -n cattle-system