升级 Operator

在现有集群中将新版本的 Alauda Storage Operator 发布到 OperatorHub 时,请使用此操作步骤。

要将现有集群从 Ceph Squid (v19) 升级到 Ceph Tentacle (v20),请参阅 将 Ceph 从 Squid (v19) 升级到 Tentacle (v20)。此升级会更改 Operator channel,单独发布软件包不会触发此升级。

批准该 Operator 软件包即表示同时确认 Operator 控制平面和与该软件包绑定的 Ceph 镜像。请勿在控制台中修补 CephCluster.spec.cephVersion.image,也无需在详情页等待数据平面完成。

推荐使用 Alauda Storage 集群详情页上的 升级到 按钮。该按钮只会批准 rook-ceph/rook-operator 的待处理 InstallPlan。按钮不可用时,请使用 kubectl。

WARNING

上传新软件包之前,请确认 Rook Operator Subscription 使用 手动批准。如果 installPlanApproval 为 Automatic,新版本出现在 catalog 中后,OLM 会立即开始升级 Operator。

开始之前

  • 确定 Rook Operator 的 namespace。Distributed Storage 向导创建的默认 namespace 为 rook-ceph。
  • 下载与集群架构匹配的新 Alauda Storage Operator 软件包。
  • 对于 内部模式,请确认 CephCluster 为 Ready,且 status.ceph.health 为 HEALTH_OK。本地运行状况不是 HEALTH_OK 时,详情页按钮会保持禁用状态。
  • 对于 外部模式(spec.external.enable: true),同一按钮只会升级 Operator,不会写入本地 Ceph 镜像。
  • 请勿将生成的 CSV manifest 编辑为持久化自定义内容。后续的 OLM reconcile 可能会覆盖这些编辑。请参阅架构。

操作步骤

1. 确认手动批准

kubectl -n rook-ceph get subscription rook-operator \
  -o jsonpath='{.spec.installPlanApproval}{"\n"}'

输出必须为 Manual。如果不是,请在上传软件包之前进行设置:

kubectl -n rook-ceph patch subscription rook-operator --type merge \
  -p '{"spec":{"installPlanApproval":"Manual"}}'

你也可以在 Marketplace > OperatorHub > Alauda Storage 中将 升级策略 设置为 手动。

2. 上传新的 Operator 软件包

使用 violet 上传新的 Alauda Storage 软件包,然后确认 OperatorHub 中显示目标版本。

按照上架软件包以及 Operator 中的 OperatorHub 操作步骤执行。

上传成功后,OperatorHub 会显示新版本可用。在 installPlanApproval 为 Manual 之前,请勿批准该版本。

3. 批准 Operator 软件包

OLM 会为新的 CSV 创建一个 InstallPlan。批准该计划即表示接受该 Operator 版本以及与该软件包绑定的 Ceph 镜像。

推荐:Ceph 详情页

  1. 登录并切换到 管理员 视图。
  2. 打开 Alauda Storage 集群详情页。
  3. 按钮启用后,会显示 升级到,后跟目标 CSV 版本。该版本来自待处理 InstallPlan 的目标 CSV(spec.version,或 CSV 名称中的版本部分,例如 rook-ceph.v4.4.1 → 4.4.1)。
  4. 单击该按钮。控制台会将该 InstallPlan spec.approved 设置为 true。你可以离开此页面。

以下情况会导致按钮保持禁用:

  • 当前用户无法更新 rook-ceph 中的 InstallPlan 对象。
  • 集群处于内部模式,且 status.ceph.health 不是 HEALTH_OK。
  • Subscription.status.installPlanRef 未引用待处理且未批准的 InstallPlan。如果 OLM 尚未创建该 InstallPlan,仅 catalog 中有较新的 CSV 还不够。

批准的计划正在安装时,按钮可能会显示升级正在进行。待处理计划消失后,按钮会显示没有可用升级。

该按钮不会写入 spec.cephVersion.image,也不会解析 PackageManifest 镜像。

后备方案:kubectl

kubectl -n rook-ceph get subscription rook-operator \
  -o jsonpath='{.status.state}{"\n"}{.status.installedCSV}{"\n"}{.status.currentCSV}{"\n"}{.status.installPlanRef.name}{"\n"}'

UpgradePending 和 InstallPlanPending=True 表示该计划正在等待批准。请仅批准引用的计划:

PLAN="$(kubectl -n rook-ceph get subscription rook-operator -o jsonpath='{.status.installPlanRef.name}')"
kubectl -n rook-ceph patch installplan "$PLAN" --type merge \
  -p '{"spec":{"approved":true}}'

4. 验证 Operator 和数据平面

等待新的 CSV 为 Succeeded,并且 Subscription 为 AtLatestKnown:

kubectl -n rook-ceph get csv
kubectl -n rook-ceph get subscription rook-operator \
  -o jsonpath='{.status.state}{"\t"}{.status.installedCSV}{"\n"}'

对于内部模式,安装的 CSV 为 Succeeded 后,平台会将唯一 CSV relatedImages 条目中 name 为 ceph 的值写入 CephCluster.spec.cephVersion.image。如果该镜像已经是正在运行的值,Ceph daemon 不会滚动更新。如果软件包没有唯一的 name=ceph 镜像,平台不会猜测其他镜像。

确认:

kubectl -n rook-ceph get cephcluster <cephcluster-name> \
  -o jsonpath='phase={.status.phase} health={.status.ceph.health} image={.spec.cephVersion.image}{"\n"}'
  • phase=Ready 和 health=HEALTH_OK。
  • spec.cephVersion.image 与名为 ceph 的唯一 CSV relatedImages 条目匹配。
  • 现有 PVC 保持为 Bound。

对于外部模式,跳过本地镜像检查。现有消费者卷应保持为 Bound。

如果详情页按钮仍处于禁用状态

  1. 确认用户可以在 rook-ceph 中更新 installplans。

  2. 对于内部模式,确认 status.ceph.health 为 HEALTH_OK。

  3. 检查 Subscription 和其引用的 InstallPlan:

    kubectl -n rook-ceph get subscription rook-operator
    kubectl -n rook-ceph get installplan

    如果 catalog 中已有更新的 CSV,但没有待处理且尚未批准的 InstallPlan,请检查 startingCSV 是否锁定了 Subscription。不要尝试从详情页修复该锁定。

  4. 如果 InstallPlan 已获批准,但 Ceph 镜像未更改,请确认已安装的 CSV 为 Succeeded,并且 relatedImages 中恰好包含一个名为 ceph 的条目。

不要删除 CephCluster 或 PV 对象来取消升级。

相关主题

Ceph 是 Red Hat, Inc. 或其子公司在美国及其他国家/地区的商标或注册商标。
Rook® 是 The Linux Foundation 的注册商标。
Alauda 是一家独立供应商。本产品与 LF Projects, LLC 或 The Linux Foundation 无关联,未获得其认可或赞助。所有商标均为其各自所有者的财产,在此仅用于标识目的。