The short version
Deleting the RayCluster is a non-event
Delete theRayCluster under a live RayService and KubeRay’s controller builds
a new one. Measured at about one second of no Ray capacity, unattended, with a
running head at the end.
The rebuilt cluster carries the same name and a new UID. That matters if you are
writing your own health check: a check keyed on the name cannot tell “this
survived” from “this was destroyed and replaced”, and those are different answers.
Key yours on .metadata.uid.
Deleting the RayService needs a redeploy
This one goes the other way, so do not generalise from the case above. Nothing reconciles a deletedRayService back. Only the Helm release owns it, so
removing it is a redeploy rather than something that heals. Measured: the object
was deleted, nothing recreated it, and a helm upgrade --install is what brings
it back.
The cascade is clean, which is the part worth stating positively. The RayCluster
carries an owner reference to the RayService, so deleting the parent collects
the child. Removing Mixpeek’s RayService does not leave Ray pods running and
billing on your nodes with no object left to explain them.
Draining the head’s node recovers on its own
Cordon the node the Ray head is on and delete the head. While the node is cordoned the head cannot schedule. Uncordon it and the head returns toRunning
by itself, with no redeploy and no manual step.
That is the answer to the node-pool question: a routine drain costs you the time
the capacity is gone. It does not wedge the engine.
One caveat about how this was measured. The fixture has two nodes and the second
carries a NoSchedule taint for an unrelated test, so the head had nowhere to
move while its node was cordoned. On your cluster, with spare schedulable
capacity, the head reschedules instead of waiting. The transferable half is the
recovery, and that is what was asserted.
Upgrading KubeRay does not restart your engine
KubeRay 1.5.1 upgraded to 1.6.2 underneath a liveRayService. The running
RayCluster was untouched: same UID before and after, head still Running.
So you can patch KubeRay on your own schedule without coordinating a Mixpeek
window. If a future KubeRay release does recreate the cluster, the qualification
suite reports it as a compatibility finding rather than passing quietly.
What is not measured yet
In-flight work. Every result on this page was measured on an idle cluster. Seconds of missing Ray capacity is a non-event when nothing is running, and it may not be when a batch is mid-flight. What happens to a batch that was executing across a deletion, a drain or an upgrade has not been measured, and nothing here should be read as a claim about it. Kubernetes control-plane upgrades. The KubeRay half of the upgrade question is answered above. The Kubernetes half is not. The fixture cannot answer it, because throwaway local clusters do not upgrade their control plane in place, so a pass there would describe the fixture rather than your cluster. Measuring it needs a real managed cluster and it is scheduled work.Where your data actually lives
None of the above touches your index. Ray holds no durable state in a Customer-Hosted install:- Your vectors are durable in your object storage. MVS keeps an unreplayed write-ahead window on node-local disk, so losing a pod costs a rebuild of that window rather than data.
- Metadata is in Mongo, queues are in Redis, and source media stays in your own bucket by reference.

