perf-sentinel chart v0.9.19
What's new in chart-v0.9.19
This chart release closes the gaps found by auditing the chart against the published Helm, Kubernetes and Artifact Hub conventions. The StatefulSet mode finally renders the headless Service it always referenced, the helm test pod stops borrowing the workload's selector labels, the pod template carries the standard labels every other rendered object already had, and an Artifact Hub annotation that never did anything is removed. Two scope decisions are now written down rather than left implicit: the NetworkPolicy stays ingress-only, and the chart ships no Helm provenance file. appVersion is intentionally held at the current daemon release 0.9.17 because the binary did not change. The chart version advances to 0.9.19 on its own.
Added
workload.kind=StatefulSetrenders the headless Service it requires.spec.serviceNamepointed at the regular ClusterIP Service, which gives no per-pod DNS identity, so the StatefulSet mode only ever delivered its PVC while the network identity it promises silently did not exist. The chart now renders<fullname>-headlesswithclusterIP: NoneandpublishNotReadyAddresses: true, and pointsspec.serviceNameat it. Setworkload.statefulset.serviceNameto a Service you manage and the chart renders none. This is the one migration in this release, see Behavior below.
Fixed
- The
helm testpod no longer carries the workload selector labels. It now carriesapp.kubernetes.io/name: <name>-testplusapp.kubernetes.io/component: test, so the PodDisruptionBudget stops counting it and the Service stops selecting it for the duration of a test run. The Service never actually routed traffic to it, a namedtargetPortcannot resolve against a pod that declares no ports, so the overlap was harmless in practice. It was accidental rather than intended, and it would have become real the day the Service moved to a numerictargetPort. - The pod template carries the standard labels.
helm.sh/chart,app.kubernetes.io/versionandapp.kubernetes.io/managed-bywere applied to every rendered object except the podTemplate, so pod-level selectors built on them matched nothing while the same labels were visible on the Deployment, the Service and the ConfigMap. This matches the Helm chart best practices and whathelm createscaffolds. Selector labels are untouched, sospec.selectorstays immutable.
Removed
- The
artifacthub.io/official: "true"annotation. It is not one of the 16 Helm annotations Artifact Hub documents and reads, so it never conferred anything, and an inert self-declaration of official status is misleading. That status is requested through an issue on the artifacthub/hub repository once the repository already holds the verified-publisher badge. The deployment guide's Artifact Hub section is updated accordingly, it still described therepositoryIDas an unset placeholder long after registration completed.
Changed
- A post-install note fires when
networkPolicy.enabledis set with no ingress selector. That fail-closed case denies every ingress, which also blocks the ServiceMonitor scrape andhelm test, and it renders and validates cleanly so nothing surfaces it before the cluster does. The note andvalues.yamlnow spell out the failure mode: the pod keeps reporting Ready, because Kubernetes always allows "traffic to and from the node where a Pod is running" and the kubelet probes therefore cross any policy. A misconfigured selector leaves a green pod that receives nothing, which is harder to notice than a CrashLoop. Verified in cluster on k3s/kube-router 1.35 with a deny-all policy in place and a third-party pod confirming the policy was actually enforced. - The NetworkPolicy stays ingress-only, deliberately. The daemon's outbound destinations (Tempo, Jaeger, Electricity Maps, the energy scrapers) are declared in the operator's
config.tomland are not knowable by the chart, so a generic egress block would either be too permissive to protect anything or strict enough to break the default install. NetworkPolicies are additive, an egress policy belongs alongside this one. Documented invalues.yamlrather than left as an unexplained absence. - The chart ships no Helm
.provfile, sohelm install --verifyis unavailable by design. Helm's native provenance requires a long-lived PGP key held as a CI secret, with the rotation, revocation and fingerprint-publication burden that follows. Cosign keyless signing plus the SLSA attestation answer the same question, does this artefact come from the release workflow of this repository, with no static signing key existing anywhere. The deployment guide now says so next to thecosign verifycommand instead of leaving the absence unexplained. - The deployment guide no longer advises around
PodSecurityPolicy, removed in Kubernetes 1.25 while this chart's floor is 1.24. The passage now names a mutating admission policy, which is what can actually rewritefsGrouporrunAsUseron a pod. Pod Security Admission validates, it never mutates.
Behavior
- Upgrading a StatefulSet release in place will fail.
spec.serviceNameis immutable, and this release changes it from the ClusterIP Service name to<fullname>-headless. Delete the StatefulSet first,kubectl delete statefulset <name> --cascade=orphankeeps the pods and the PVCs, then runhelm upgrade. Deployment and DaemonSet installs, which is the default and the recommended topology, are unaffected and upgrade normally. - The pod rolls on upgrade even though the image tag does not move. The pod template gains the standard labels, so its hash changes. With
appVersionheld at0.9.17theartifacthub.io/imagestag staysghcr.io/robintra/perf-sentinel:0.9.17and the same daemon binary runs after the upgrade. - No daemon behavior changes. No route disappears, no metric loses a label value, no configuration key changes its meaning, and acknowledgment signatures do not reset.
service.selectorand everyspec.selector.matchLabelsare unchanged, so no selector migration is required for any workload kind.
Install
The chart is published as an OCI artifact on GHCR, install it directly with no helm repo add step:
helm install perf-sentinel oci://ghcr.io/robintra/charts/perf-sentinel --version 0.9.19Upgrade an existing release:
helm upgrade perf-sentinel oci://ghcr.io/robintra/charts/perf-sentinel --version 0.9.19Full Changelog: chart-v0.9.18...chart-v0.9.19