Infrastructure engineering for East Africa's operators, platforms and regulators See the work →
Ceph Squid End of Life on Proxmox: The Upgrade Order
Cloud 7 min read

Ceph Squid End of Life on Proxmox: The Upgrade Order

Ceph Squid end of life on Proxmox: Tentacle needs PVE 9, and 19.2.6 raises HEALTH_ERR until cephx keys move. The upgrade order, read from the repos.

CE
CloudSpinx Engineering
Infrastructure Engineering, Virtualization, Networking, Automation
26 October 2026
proxmoxcephceph squidceph tentacle

Ceph's release page gives Squid an estimated end of life of 31 October 2026, and on a Proxmox cluster that date is the easy part of the Ceph upgrade. Proxmox builds Tentacle, the release that replaces it, only for Proxmox VE 9. The August security releases also bring a new cephx key type that every daemon and client is meant to move to, so a cluster that was clean before the upgrade can report HEALTH_ERR straight after it.

CloudSpinx builds and runs Proxmox clusters with Ceph storage for organizations in Kenya. For this post we counted what Proxmox actually ships: the Ceph, pve-manager and kernel builds in its public no-subscription and test repositories, read from the package indexes and the pve-manager packages themselves. That count settles the upgrade order for a cluster still on Proxmox VE 8. We did not run the upgrade for this post, so everything about how the software behaves is taken from Proxmox's and Ceph's documentation, and from the helper's source code where the post says so.

What Ceph Squid end of life changes

Nothing stops on 1 November. The cluster keeps serving disks. What ends is upstream maintenance: the Ceph releases page files an end-of-life release under archived releases, which "do not receive bug fixes or backports", and Reef went there in March with 18.2.8. Squid's last listed build is 19.2.7.

The reason not to wait is the August round of security fixes. Squid 19.2.6 and Tentacle 20.2.4 shipped together with four CVE fixes, one of them CVE-2025-30156, which Ceph describes as "an authentication bypass in CephX caused by misuse of AES-CBC". Tentacle is no long stay either. Its own estimated end of life is 1 June 2027, seven months after Squid's, so budget the next hop the way you would a Kubernetes minor: as a recurring line, not an event.

Which Ceph builds Proxmox ships for PVE 8 and PVE 9

Proxmox builds each Ceph release for a Debian suite, and each Proxmox VE major sits on one suite: bookworm for 8, trixie for 9. Reef and Quincy have no trixie build. Tentacle has no bookworm build. Squid is the only release built for both, so it is the bridge every Ceph cluster on Proxmox VE 8 has to cross.

Which Ceph release Proxmox builds for PVE 8 and PVE 9
Which Ceph release Proxmox builds for PVE 8 and PVE 9A grid of Proxmox's public Ceph repositories. Rows are Ceph Quincy, Reef, Squid and Tentacle; columns are Proxmox VE 8 on Debian bookworm and Proxmox VE 9 on Debian trixie. Of these two majors, Quincy and Reef are built only for Proxmox VE 8, Tentacle only for Proxmox VE 9, and Squid for both: 19.2.5 is the newest in the Proxmox VE 8 no-subscription repository, 19.2.6-pve4 in Proxmox VE 9. The route from Reef runs Reef to Squid on Proxmox VE 8, then Proxmox VE 8 to 9, then Squid to Tentacle 20.2.4. Below the grid, the newest kernel series for Proxmox VE 8 is 6.14, while Proxmox VE 9.2 defaults to 7.0, the version kernel Ceph clients need for the new keys.PROXMOX VE 8, BOOKWORMPROXMOX VE 9, TRIXIEQuincy 17EOL 13 Jan 202517.2.8-pve2no buildReef 18EOL 20 Mar 202618.2.8-pve1no buildSquid 19EOL 31 Oct 2026, est.19.2.5-1~bpo12+219.2.6 in test only19.2.6-pve419.2.7 in testTentacle 20EOL 1 Jun 2027, est.no build20.2.4-pve5step 1step 2step 4WHAT ELSE THE SUITE DECIDESKernel andkey helperKernel 6.14 newesthelper: 8.4.22, test onlyKernel 7.0 defaulthelper: use 9.2.19 or later
  • on the route
  • built, off the route
  • short of what the new keys need
Squid is the only Ceph release Proxmox builds for both majors, so Reef on Proxmox VE 8 is three upgrades from Tentacle: Ceph, then Proxmox, then Ceph again.

Ceph itself accepts Reef straight to Tentacle. No Proxmox suite carries both builds, so on Proxmox that jump does not exist.

The Proxmox VE 8 side is thinner than it looks. Its no-subscription repository stops at Squid 19.2.5, one point release short of the CVE fix. 19.2.6 sits only in the test repository, next to pve-manager 8.4.22, which carries Proxmox's key migration helper; 8.4.21, the newest pve-manager in no-subscription, does not. The newest kernel series for Proxmox VE 8 is 6.14, and Proxmox says kernel clients need a running 7.0 or newer for the new keys. Proxmox VE 9.2 defaults to 7.0. Proxmox's own table puts the end of Proxmox VE 8 in August 2026, which closes the question. We read only the public repositories, because the enterprise ones need a subscription key, so none of this is a claim about them.

The order for a Ceph upgrade on Proxmox

From Reef on Proxmox VE 8 it is three upgrades and two rounds of key rotation. A Squid cluster still on Proxmox VE 8 starts at step 2, one already on 9.2 at step 3, and a Quincy cluster goes to Reef first.

  1. Reef to Squid, still on Proxmox VE 8. The 8 to 9 guide makes it a precondition: "a hyper-converged Ceph cluster installed directly in Proxmox VE must run Ceph 19.2 Squid".
  2. Proxmox VE 8 to 9.2, with the Ceph repository switched to Squid for trixie, which pulls 19.2.6 or later, and every node rebooted into the 7.0 kernel. The health errors can appear once the first upgraded node with a monitor reboots, and the guide says to carry on with the upgrade if nothing else is wrong.
  3. The cluster's own keys, with Proxmox's helper. This clears the two health errors.
  4. Squid to Tentacle: the Ceph repository switched to Tentacle, noout set, packages upgraded on every node, monitors restarted one node at a time until ceph mon dump reports min_mon_release 20 (tentacle), then managers, then OSDs one node at a time, then any CephFS MDS daemons, then ceph osd require-osd-release tentacle and noout unset.
  5. Storage and admin keys: staged, every client refreshed, confirmed, and the old cipher switched off.

Clear the errors in step 3 before step 4, because the Tentacle guide starts from a cluster that is "healthy and working". Its stated minimum is pve-manager 9.1.4, while Proxmox's September announcement asks for 9.2 and its key migration docs ask for 9.2.19, so 9.2.19 is the floor that matters.

Take Tentacle at 20.2.4-pve4 or later. A plain apt full-upgrade installs 20.2.4-pve5, the newest in Proxmox's public Tentacle repositories, but older builds down to 20.2.0 are still listed there, 20.2.4-pve1 to pve3 among them, and step 5 needs at least 20.2.4-pve3 on every monitor, pve4 to tell refreshed clients from stale ones. Ceph's release notes also warn that a move from Squid 19.2.6 to an older Tentacle "may fail", because "Tentacle daemons older than v20.2.4 fail to start."

If your OSDs were created under Octopus or earlier, read the Squid to Tentacle guide's known issue first. It reports META usage growing on those OSDs after the move, with a manual RocksDB compaction, one OSD at a time and off-peak, as a temporary workaround, or recreating each affected OSD, one at a time.

A Reef cluster on Proxmox VE 8 has two upgrades to finish, Ceph to Squid and Proxmox VE to 9.2, before the move to Tentacle even starts. If you would rather know which steps your nodes need before the first one, paste pveversion -v from one node into the notes of the scoping form.

Terminal on a Debian machine showing its release and kernel version, the first two things to check on a Proxmox node before a Ceph upgrade

Why Ceph shows HEALTH_ERR after 19.2.6

Squid 19.2.6 and Tentacle 20.2.4 added six health checks around the old aes cipher, covering keys, tickets and whether monitors still accept it, and two of them carry error severity: AUTH_INSECURE_SERVICE_KEY_TYPE and AUTH_INSECURE_SERVICE_TICKETS. Proxmox's documentation is plain that this "does not mean that storage access or a Ceph service has failed". The fix is a new key type, aes256k, which Ceph calls the first new key type CephX has ever had.

The cluster's own keys go first. Run the helper on one node, read the dry run, then apply the same selection:

/usr/share/pve-manager/migrations/pve-cephx-rotate-service-keys --rotate-cluster-keys
/usr/share/pve-manager/migrations/pve-cephx-rotate-service-keys --rotate-cluster-keys --apply

It rotates the manager, metadata server, OSD, monitor, bootstrap, crash and encrypted OSD lockbox keys, restarting services one at a time when needed, monitors included. Storage keys and client.admin stay as they are, existing tickets stay valid and the old cipher stays enabled, so no guest's credentials have changed yet. The warnings left after this are about client keys and the allowed ciphers, plus one about rotating service keys that clears by itself within a few hours. Proxmox allows muting them while an old client waits for an upgrade, and the same page says what a mute buys: "Muting does not resolve the condition."

Off Proxmox, Ceph's announcement says cephadm automates this rotation "except for client keys", which leaves the same last step as below.

The clients that keep the old key

Step 5 is the one that breaks late. A staged key leaves both keys valid and every client keeps working, so nothing fails yet. The client-key warning stays until confirmation, and the cipher warnings until the old cipher is switched off. After confirmation the old key stops authenticating, and in Proxmox's words, "Existing IO can appear to work until a reconnect and then fail."

What holds an old key, per Proxmox's cephx migration section, is a longer list than the VMs. Rebooting a VM from inside the guest does not refresh it, so live-migrate it or stop and start it: "A guest reboot is not enough." A container on RBD always uses the kernel client, and a kernel client needs a running 7.0 kernel for the new key, one more reason the Proxmox VE 8 hop comes first. Backups, restores, disk imports and clones "can retain the key they started with", so confirmation goes outside the window your Proxmox Backup Server jobs run in. Then there is everything outside Proxmox: a Kubernetes cluster mounting RBD volumes, or a server with an image mapped, which needs the staged key copied from /etc/pve/priv/ceph/<storage>.keyring and a restart.

What the cephx key helper can see, and what it cannot
What the cephx key helper can see, and what it cannotProxmox's cephx migration helper refuses to confirm a staged key while it sees a client still connected on the old one: a running VM that was only rebooted from inside the guest, a container on RBD, or a CephFS mount that has not loaded the new key. A client switched off at that moment, or a copy of the key on a host Proxmox VE does not manage, gives it nothing to see, so confirmation goes through and that client cannot authenticate afterwards. Its existing IO can appear to work until it reconnects.CONNECTED ON THE OLD KEY: THE HELPER WAITSRunning VMa guest reboot keeps the keylive-migrate, or stop and startContainer on RBDalways the kernel clientneeds a running 7.0 kernelCephFS mountidle mounts refreshed for youbusy ones left aloneFinal dry runoffers the confirm command onlywhen its observed checks passDISCONNECTED, OR A KEY FILE ON AN UNMANAGED HOST: NOTHING STOPS ITClient switched offa server or a job between runsno session for the helper to seeKey copy on an unmanaged hosta keyring file on a hostthat Proxmox VE does not manageAfter confirmation: cannot authenticateexisting IO can appear to work until a reconnect, then fails
  • blocks confirmation until refreshed
  • passes confirmation, fails later
The helper holds the confirmation while it can see an old-key session. What fails afterwards is what it cannot see: a client that was off, and a key file on a host Proxmox VE does not manage.

Proxmox calls the helper's client hints host-wide, not a complete workload inventory, so the list of outside clients has to come from you.

The helper's source draws that line itself. Before it accepts --confirm-all-clients-refreshed it refuses while "recorded client(s) ... are still connected", and a comment in the code names what is left: "consumers no run can see: disconnected ones, and copies of the key on hosts Proxmox VE does not manage." On our reading, a client connected on the old key holds the confirmation up, and one that is switched off at that moment does not, which makes it the one that cannot authenticate when it comes back. Keep /etc/pve/priv/cephx-key-migration.json until the migration is complete and every client has been refreshed, and protect it, because it holds the old keys.

A three-node cluster running only VMs, with nothing outside Proxmox touching Ceph, does not need us. Follow Proxmox's upgrade guides and its cephx section, let the helper print each next step, and do it yourself.

The expensive case is a Proxmox VE 8 cluster on Reef with containers on Ceph and a backup server or a Kubernetes cluster reading from it, because that is three upgrades and a confirmation that waits on the slowest client. Send us pveversion -v and ceph versions from one node, ceph health detail, and every machine outside the cluster that maps or mounts Ceph, through the Proxmox scoping form or on WhatsApp at +254 713 403 044. We come back with the hops your cluster needs in order, the clients that will hold the confirmation up, and one figure for doing the upgrade with you, node by node. There is no charge for that answer and no obligation after it.

WhatsApp