Repository navigation
feat(common): PDB, topology spread, pod-spec options, probe scheme, PVC mount, monitor endpoint fields (2.5.0) - #6
Merged
Conversation
… the deployment New, off unless set: podLabels, podAnnotations, automountServiceAccountToken, enableServiceLinks, terminationGracePeriodSeconds, priorityClassName, nodeSelector, topologySpread.topologyKeys (constraints selecting the release's pods, like antiAffinityLabels), and persistence.mountPath, which adds the claim as a volume (persistence.volumeName, default data). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
healthCheck.scheme (and <probe>.scheme) sets the httpGet scheme, so an app that serves TLS itself can be probed; <probe>.kind overrides healthCheck.kind per probe (e.g. tcp liveness and startup with an http readiness). The persistence mount from the previous commit lands in volumeMounts. Unset keys render exactly as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
common.pdb (pdb.enabled, maxUnavailable or minAvailable, unhealthyPodEvictionPolicy) selects the deployment's pods. monitoring.labels adds labels to the ServiceMonitor/PodMonitor/VMServiceScrape and monitoring.endpoint merges extra fields (scheme, tlsConfig, authorization, ...) into the scrape endpoint, for metrics behind auth or TLS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntPath The ConfigMap is named after the release (common.fullname), so a values-only volumes entry cannot reference it. configmap.mountPath (+ configmap.volumeName, default config) adds the configMap volume and a read-only mount. Combine with configmap.enabled: false to keep it out of envFrom (a config file, not env vars). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
common.service called as (list . "app.service") with service.enabled: false merged an empty override into an empty template and printed "{}", a manifest without a kind or name that helm lint --strict rejects. The single-context form already rendered nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds what the floe chart (kharkevich-engineering-lab/floe,
deploy/helm/floe) needs so it can stay a thin chart of one-linecommon.*calls, instead of re-implementing pieces locally. Bumpscommonto 2.5.0. Every new key is off unless set: an existing chart renders byte-for-byte the same.PodDisruptionBudgetanywhere intemplates/)common.pdb(pdb.enabled,maxUnavailable/minAvailable,unhealthyPodEvictionPolicy), selector =common.labels.selector_deployment.yamlpod spec has notopologySpreadConstraints; values can't express the selector because it depends on the fullnametopologySpread.topologyKeys→ one constraint per key,labelSelectorfromcommon.labels.selector,matchLabelKeys: [pod-template-hash](same style asantiAffinityLabels)terminationGracePeriodSeconds,nodeSelector,priorityClassName,enableServiceLinks,automountServiceAccountToken; pod metadata only gets the checksum/prometheus annotations and the standard labelsterminationGracePeriodSeconds,nodeSelector,priorityClassName,enableServiceLinks,automountServiceAccountToken(both only when the key is set),podLabels,podAnnotations_healthcheck.yaml:httpGethas noscheme, so an app terminating TLS itself can't be probed;_container.yamlpicks tcp/http for all three probes at once (healthCheck.kind)healthCheck.scheme/<probe>.scheme;<probe>.kindoverrideshealthCheck.kindper probe (floe in ACME mode: tcp liveness/startup while it waits for a certificate, HTTPS readiness on/readyz)common.persistentvolumeclaimcreates a claim but nothing mounts it;common.volume.pvcis only usable from a template at a fixed indent, values can't name the claim (it's the fullname)persistence.mountPath(+persistence.volumeName, defaultdata) adds the volume and the volumeMountcommon.fullname, so a values-onlyvolumesentry can't mount it as a file;configmap.enabledonly controlsenvFromconfigmap.mountPath(+configmap.volumeName, defaultconfig) adds the configMap volume and a read-only mountinterval/port/path; an override can't add a field to it (the merge replaces the wholeendpointslist); no way to add thereleaselabel a Prometheus selects bymonitoring.endpoint(merged into the endpoint:scheme,tlsConfig,authorization, …) andmonitoring.labelson ServiceMonitor, PodMonitor and VMServiceScrapeAlso a fix:
common.servicein the override form ((list . "app.service")) printed{}whenservice.enabled: false(an invalid manifesthelm lint --strictrejects); it now renders nothing, like the single-context form.The README now documents the templates and the new keys.
Compatibility
charts/github-app-jwt2token-controllerandcharts/application-ingress, pointed at a localfile://copy ofcommon2.4.0 and then 2.5.0:helm templateoutput is identical (diffempty).common.*template with two values files using only 2.4.0 keys (one minimal, one setting nearly every key: tcp probes, NodePort, HPA, PVC, ingress, HTTPRoute, monitors, secrets, initContainers, …): identical output on 2.4.0 and 2.5.0.kubeconform -strict -kubernetes-version 1.33.0(plus the datree CRD schemas for the monitors and HTTPRoute).Not addressed here (noted for later)
maintaininstance next to the serving fleet). Every template reads.Valuesof the one context, so this needs a design (an instances map, or a documented context-per-instance pattern); the floe chart documents installing itself twice instead.default, so0means "use the default" (initialDelaySeconds: 0becomes 180/40);resources.limits.cpuis always rendered (defaults to1000m); the ServiceMonitor'stargetPortis quoted, so a numeric port becomes a port name (use a port name);gateway.enableddefaults to true when the key is absent;common.volume.pvconly renders correctly at one indent.Merging this lets the release workflow publish
common2.5.0 tooci://ghcr.io/technicaldomain/helm, which the floe chart PR waits for.🤖 Generated with Claude Code