Prometheus Operator v0.94.1: What's New and Upgrade Guide
Prometheus Operator v0.94.1 fixes a ClusterRole RBAC bug affecting owner-reference finalizer updates. Upgrade steps and verification included.
💡 Quick Answer: v0.94.1 is a single-bugfix patch release that restores the
updatepermission on finalizer subresources in the operator’s ClusterRole. Upgrade if you rely onOwnerReferencesPermissionEnforcementwithblockOwnerDeletionset, otherwise it’s a safe, low-risk patch to apply.
The Problem
Clusters running the OwnerReferencesPermissionEnforcement admission plugin reject owner-reference updates on objects that set blockOwnerDeletion: true unless the acting ServiceAccount has update permission on the resource’s finalizers subresource. A prior release of the Prometheus Operator dropped this permission from the operator’s ClusterRole, causing reconciliation errors (403 Forbidden on finalizer updates) on clusters with that admission plugin enabled — common on GKE and other hardened distributions.
The Solution
v0.94.1 restores the missing update verb on the finalizers subresource in the bundled ClusterRole manifests (prometheus-operator-clusterrole). No CRD or API changes are involved — this is purely an RBAC fix shipped in the static manifests, Helm chart, and Jsonnet/kube-prometheus bundles that reference this operator version.
Whats New
The release notes for v0.94.1 are thin — a single bugfix:
- [BUGFIX] Restore
updatepermission on finalizer subresources in the operator’s ClusterRole, required byOwnerReferencesPermissionEnforcementwhenblockOwnerDeletionis set. (#8830)
No new features, no deprecations, no breaking changes are listed. See the release page for the authoritative, up-to-date notes.
Upgrade Steps
Option 1: Plain manifests (bundle.yaml)
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.94.1/bundle.yamlOption 2: Helm (kube-prometheus-stack or standalone operator chart)
helm repo update
helm upgrade prometheus-operator prometheus-community/prometheus-operator-crds \
--namespace monitoring
helm upgrade prometheus-operator prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set prometheusOperator.image.tag=v0.94.1Check the chart’s appVersion mapping before pinning the image tag directly — prefer bumping the chart version if a release that pins v0.94.1 as appVersion is available.
Option 3: kubectl set image (quick patch)
kubectl set image deployment/prometheus-operator \
prometheus-operator=quay.io/prometheus-operator/prometheus-operator:v0.94.1 \
-n monitoringVerify
# Confirm the operator pod is running the new version
kubectl get deployment prometheus-operator -n monitoring \
-o jsonpath='{.spec.template.spec.containers[0].image}'
# Confirm the ClusterRole now includes the finalizers update verb
kubectl get clusterrole prometheus-operator -o yaml | grep -A3 finalizers
# Tail operator logs for any lingering 403 errors on owner-reference updates
kubectl logs -n monitoring deploy/prometheus-operator --since=5m | grep -i forbiddenExpect no forbidden entries related to finalizers after the upgrade and a clean rollout (kubectl rollout status deployment/prometheus-operator -n monitoring).
Common Issues
- ClusterRole not updated after Helm upgrade: Helm does not always reconcile RBAC changes on
helm upgradeif the chart didn’t bump its templated RBAC version. Runkubectl apply --server-sideon the chart’s rendered ClusterRole manually, or force withhelm upgrade --force. - Still seeing 403s post-upgrade: confirm the operator’s Deployment actually picked up the new image (
kubectl rollout status) and that noClusterRoleBindingis pointing at a stale, duplicated ClusterRole from a previous install method (manifest vs Helm vs Operator Lifecycle Manager). - Mixed install methods: if the operator was installed via OLM/bundle and later via Helm, duplicate RBAC objects can mask which one is actually in effect — check
kubectl get clusterrolebinding -o wide | grep prometheus-operator.
Best Practices
- Treat patch releases like this one as low-risk and apply them promptly — RBAC gaps can silently break reconciliation on hardened clusters (GKE, clusters with
OwnerReferencesPermissionEnforcementenabled) without obvious alerts. - Always diff the ClusterRole before and after upgrade in GitOps-managed clusters (
kubectl diff -f bundle.yaml) to catch unexpected permission changes. - Pin the operator image tag explicitly in Helm values or manifests rather than tracking
latest, so upgrades like this are deliberate and auditable. - After upgrading, watch operator logs for a few minutes for any
forbidden/finalizererrors before considering the rollout complete.

Recommended
Kubernetes Recipes — The Complete Book100+ production-ready patterns with detailed explanations, best practices, and copy-paste YAML. Everything in one place.
Get the Book →Learn by Doing
CopyPasteLearn — Hands-on Cloud & DevOps CoursesMaster Kubernetes, Ansible, Terraform, and MLOps with interactive, copy-paste-run lessons. Start free.
Browse Courses →🎓 Deepen Your Skills — Hands-on Courses
Courses by CopyPasteLearn.com — Learn IT by Doing
