Upgrade the Operator

Use this procedure when you publish a new Alauda Storage Operator version into OperatorHub on an existing cluster.

To move an existing cluster from Ceph Squid (v19) to Ceph Tentacle (v20), see Upgrade Ceph from Squid (v19) to Tentacle (v20). That upgrade changes the Operator channel and is not triggered by publishing a package alone.

Approving that Operator package is the confirmation for both the Operator control plane and the Ceph image bound to the package. You do not patch CephCluster.spec.cephVersion.image from the console, and you do not wait on the details page for the data plane to finish.

The recommended path is the Upgrade to button on the Alauda Storage cluster details page. That button only approves the pending InstallPlan for rook-ceph/rook-operator. Use kubectl when the button is unavailable.

WARNING

Confirm that the Rook Operator Subscription uses Manual approval before you upload the new package. If installPlanApproval is Automatic, OLM starts the Operator upgrade as soon as the new version appears in the catalog.

Before you start

  • Identify the namespace of the Rook Operator. The default namespace created by the Distributed Storage wizard is rook-ceph.
  • Download the new Alauda Storage Operator package that matches the cluster architecture.
  • For internal mode, confirm CephCluster is Ready and status.ceph.health is HEALTH_OK. The details-page button stays disabled while local health is not HEALTH_OK.
  • For external mode (spec.external.enable: true), the same button upgrades only the Operator. It does not write a local Ceph image.
  • Do not edit generated CSV manifests as a persistent customization. Subsequent OLM reconciles can overwrite those edits. See Architecture.

Procedure

1. Confirm Manual approval

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

The output must be Manual. If it is not, set it before you upload the package:

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

You can also set Upgrade Strategy to Manual in Marketplace > OperatorHub > Alauda Storage.

2. Upload the new Operator package

Upload the new Alauda Storage package with violet, then confirm the target version is visible in OperatorHub.

Follow Upload Packages and the OperatorHub steps in Operator.

After the upload succeeds, OperatorHub shows the new version as available. Do not approve it until installPlanApproval is Manual.

3. Approve the Operator package

OLM creates an InstallPlan for the new CSV. Approving that plan accepts the Operator version and the Ceph image bound to that package.

  1. Log in and switch to the Administrator view.
  2. Open the Alauda Storage cluster details page.
  3. When the button is enabled, it shows Upgrade to followed by the target CSV version. The version comes from the pending InstallPlan target CSV (spec.version, or the version segment of the CSV name such as rook-ceph.v4.4.1 → 4.4.1).
  4. Click the button. The console sets that InstallPlan spec.approved to true. You can leave the page.

The button stays disabled when:

  • The current user cannot update InstallPlan objects in rook-ceph.
  • The cluster is internal mode and status.ceph.health is not HEALTH_OK.
  • There is no pending unapproved InstallPlan referenced by Subscription.status.installPlanRef. A newer CSV in the catalog is not enough if OLM has not created that InstallPlan.

While an approved plan is installing, the button can show that an upgrade is in progress. After the pending plan disappears, it shows that no upgrade is available.

The button does not write spec.cephVersion.image and does not parse PackageManifest images.

Fallback: 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 and InstallPlanPending=True mean the plan is waiting for approval. Approve only that referenced plan:

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. Verify the Operator and data plane

Wait until the new CSV is Succeeded and the Subscription is AtLatestKnown:

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

For internal mode, after the installed CSV is Succeeded, the platform writes the unique CSV relatedImages entry whose name is ceph onto CephCluster.spec.cephVersion.image. If that image is already the running value, Ceph daemons do not roll. If the package has no unique name=ceph image, the platform does not guess another image.

Confirm:

kubectl -n rook-ceph get cephcluster <cephcluster-name> \
  -o jsonpath='phase={.status.phase} health={.status.ceph.health} image={.spec.cephVersion.image}{"\n"}'
  • phase=Ready and health=HEALTH_OK.
  • spec.cephVersion.image matches the unique CSV relatedImages entry named ceph.
  • Existing PVCs remain Bound.

For external mode, skip the local image check. Existing consumer volumes should remain Bound.

If the details-page button stays disabled

  1. Confirm the user can update installplans in rook-ceph.

  2. For internal mode, confirm status.ceph.health is HEALTH_OK.

  3. Inspect the Subscription and the referenced InstallPlan:

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

    If the catalog already has a newer CSV but there is no pending unapproved InstallPlan, check whether startingCSV is pinning the Subscription. Do not try to repair that pin from the details page.

  4. If the InstallPlan is already approved but the Ceph image did not change, confirm the installed CSV is Succeeded and that relatedImages contains exactly one entry named ceph.

Do not delete the CephCluster or PV objects to cancel an upgrade.

Ceph is a trademark or registered trademark of Red Hat, Inc. or its subsidiaries in the United States and other countries. Rook® is a registered trademark of The Linux Foundation. Alauda is an independent vendor. This product is not affiliated with, endorsed by, or sponsored by LF Projects, LLC or The Linux Foundation. All trademarks are the property of their respective owners and are used here for identification purposes only.