Conversation
📝 WalkthroughWalkthroughThe changes introduce OpenEBS LocalPV provisioner deployment configuration by adding references in the openebs-system kustomization, defining a Flux HelmRelease and OCIRepository for the localpv-provisioner Helm chart version 4.4.0, and organizing supporting Kustomization files for deployment orchestration. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 9/10 reviews remaining, refill in 6 minutes. Comment |
--- HelmRelease: openebs-system/openebs-localpv ServiceAccount: openebs-system/openebs-localpv-localpv-provisioner
+++ HelmRelease: openebs-system/openebs-localpv ServiceAccount: openebs-system/openebs-localpv-localpv-provisioner
@@ -0,0 +1,12 @@
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: openebs-localpv-localpv-provisioner
+ labels:
+ heritage: Helm
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ openebs.io/component-name: openebs-localpv-provisioner
+
--- HelmRelease: openebs-system/openebs-localpv StorageClass: openebs-system/openebs-hostpath
+++ HelmRelease: openebs-system/openebs-localpv StorageClass: openebs-system/openebs-hostpath
@@ -0,0 +1,16 @@
+---
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: openebs-hostpath
+ annotations:
+ openebs.io/cas-type: local
+ cas.openebs.io/config: |
+ - name: StorageType
+ value: "hostpath"
+ - name: BasePath
+ value: "/var/openebs/local"
+provisioner: openebs.io/local
+volumeBindingMode: WaitForFirstConsumer
+reclaimPolicy: Delete
+
--- HelmRelease: openebs-system/openebs-localpv ClusterRole: openebs-system/openebs-localpv-localpv-provisioner
+++ HelmRelease: openebs-system/openebs-localpv ClusterRole: openebs-system/openebs-localpv-localpv-provisioner
@@ -0,0 +1,75 @@
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: openebs-localpv-localpv-provisioner
+ labels:
+ heritage: Helm
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ openebs.io/component-name: openebs-localpv-provisioner
+rules:
+- apiGroups:
+ - '*'
+ resources:
+ - nodes
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - '*'
+ resources:
+ - namespaces
+ - pods
+ - events
+ - endpoints
+ verbs:
+ - '*'
+- apiGroups:
+ - '*'
+ resources:
+ - resourcequotas
+ - limitranges
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - '*'
+ resources:
+ - storageclasses
+ - persistentvolumeclaims
+ - persistentvolumes
+ verbs:
+ - '*'
+- apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - delete
+ - patch
+- apiGroups:
+ - openebs.io
+ resources:
+ - '*'
+ verbs:
+ - '*'
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - create
+ - update
+- nonResourceURLs:
+ - /metrics
+ verbs:
+ - get
+
--- HelmRelease: openebs-system/openebs-localpv ClusterRoleBinding: openebs-system/openebs-localpv-localpv-provisioner
+++ HelmRelease: openebs-system/openebs-localpv ClusterRoleBinding: openebs-system/openebs-localpv-localpv-provisioner
@@ -0,0 +1,20 @@
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: openebs-localpv-localpv-provisioner
+ labels:
+ heritage: Helm
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ openebs.io/component-name: openebs-localpv-provisioner
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: openebs-localpv-localpv-provisioner
+subjects:
+- kind: ServiceAccount
+ name: openebs-localpv-localpv-provisioner
+ namespace: openebs-system
+
--- HelmRelease: openebs-system/openebs-localpv Deployment: openebs-system/openebs-localpv-localpv-provisioner
+++ HelmRelease: openebs-system/openebs-localpv Deployment: openebs-system/openebs-localpv-localpv-provisioner
@@ -0,0 +1,85 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: openebs-localpv-localpv-provisioner
+ labels:
+ heritage: Helm
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ openebs.io/component-name: openebs-localpv-provisioner
+spec:
+ replicas: 1
+ strategy:
+ type: Recreate
+ rollingUpdate: null
+ selector:
+ matchLabels:
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ template:
+ metadata:
+ labels:
+ heritage: Helm
+ app: localpv-provisioner
+ release: openebs-localpv
+ component: localpv-provisioner
+ openebs.io/component-name: openebs-localpv-provisioner
+ name: openebs-localpv-provisioner
+ openebs.io/logging: 'true'
+ spec:
+ serviceAccountName: openebs-localpv-localpv-provisioner
+ securityContext: {}
+ containers:
+ - name: openebs-localpv-localpv-provisioner
+ image: quay.io/openebs/provisioner-localpv:4.4.0
+ imagePullPolicy: IfNotPresent
+ resources: null
+ env:
+ - name: OPENEBS_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: OPENEBS_SERVICE_ACCOUNT
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: OPENEBS_IO_ENABLE_ANALYTICS
+ value: 'false'
+ - name: OPENEBS_IO_BASE_PATH
+ value: /var/openebs/local
+ - name: OPENEBS_IO_HELPER_IMAGE
+ value: quay.io/openebs/linux-utils:4.3.0
+ - name: OPENEBS_IO_HELPER_POD_HOST_NETWORK
+ value: 'false'
+ - name: OPENEBS_IO_INSTALLER_TYPE
+ value: localpv-charts-helm
+ - name: LEADER_ELECTION_ENABLED
+ value: 'true'
+ livenessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - test `pgrep -c "^provisioner-loc.*"` = 1
+ initialDelaySeconds: 30
+ periodSeconds: 60
+ tolerations:
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 5
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 5
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ |
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: openebs-system/openebs-localpv
+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: openebs-system/openebs-localpv
@@ -0,0 +1,29 @@
+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+ labels:
+ kustomize.toolkit.fluxcd.io/name: cluster-apps
+ kustomize.toolkit.fluxcd.io/namespace: flux-system
+ name: openebs-localpv
+ namespace: openebs-system
+spec:
+ commonMetadata:
+ labels:
+ app.kubernetes.io/name: openebs-localpv
+ healthChecks:
+ - apiVersion: helm.toolkit.fluxcd.io/v2
+ kind: HelmRelease
+ name: openebs-localpv
+ namespace: openebs-system
+ interval: 1h
+ path: ./kubernetes/apps/openebs-system/openebs-localpv/app
+ prune: true
+ retryInterval: 2m
+ sourceRef:
+ kind: GitRepository
+ name: flux-system
+ namespace: flux-system
+ targetNamespace: openebs-system
+ timeout: 5m
+
--- kubernetes/apps/openebs-system/openebs-localpv/app Kustomization: openebs-system/openebs-localpv OCIRepository: openebs-system/openebs-localpv
+++ kubernetes/apps/openebs-system/openebs-localpv/app Kustomization: openebs-system/openebs-localpv OCIRepository: openebs-system/openebs-localpv
@@ -0,0 +1,19 @@
+---
+apiVersion: source.toolkit.fluxcd.io/v1
+kind: OCIRepository
+metadata:
+ labels:
+ app.kubernetes.io/name: openebs-localpv
+ kustomize.toolkit.fluxcd.io/name: openebs-localpv
+ kustomize.toolkit.fluxcd.io/namespace: openebs-system
+ name: openebs-localpv
+ namespace: openebs-system
+spec:
+ interval: 1h
+ layerSelector:
+ mediaType: application/vnd.cncf.helm.chart.content.v1.tar+gzip
+ operation: copy
+ ref:
+ tag: 4.4.0
+ url: oci://ghcr.io/openebs/charts/localpv-provisioner
+
--- kubernetes/apps/openebs-system/openebs-localpv/app Kustomization: openebs-system/openebs-localpv HelmRelease: openebs-system/openebs-localpv
+++ kubernetes/apps/openebs-system/openebs-localpv/app Kustomization: openebs-system/openebs-localpv HelmRelease: openebs-system/openebs-localpv
@@ -0,0 +1,38 @@
+---
+apiVersion: helm.toolkit.fluxcd.io/v2
+kind: HelmRelease
+metadata:
+ labels:
+ app.kubernetes.io/name: openebs-localpv
+ kustomize.toolkit.fluxcd.io/name: openebs-localpv
+ kustomize.toolkit.fluxcd.io/namespace: openebs-system
+ name: openebs-localpv
+ namespace: openebs-system
+spec:
+ chartRef:
+ kind: OCIRepository
+ name: openebs-localpv
+ driftDetection:
+ mode: enabled
+ install:
+ remediation:
+ retries: -1
+ interval: 1h
+ upgrade:
+ cleanupOnFail: true
+ remediation:
+ retries: 3
+ values:
+ analytics:
+ enabled: false
+ global:
+ imageRegistry: quay.io/
+ hostpathClass:
+ name: openebs-hostpath
+ localpv:
+ basePath: /var/openebs/local
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@kubernetes/apps/openebs-system/openebs-localpv/app/helmrelease.yaml`:
- Around line 23-25: The chartRef in the HelmRelease currently uses name:
openebs-localpv and omits namespace; update the HelmRelease's chartRef block so
chartRef.kind remains OCIRepository but chartRef.name is changed to app-template
and add chartRef.namespace: flux-system to comply with the shared source
contract (look for the HelmRelease resource and its chartRef field in
helmrelease.yaml).
In `@kubernetes/apps/openebs-system/openebs-localpv/ks.yaml`:
- Around line 7-24: The Kustomization in ks.yaml is missing the required
components/volsync and the postBuild substitution for APP; update the
Kustomization spec for this resource (the ks.yaml Kustomization) to include a
components entry referencing "components/volsync" and add a postBuild.substitute
section that defines the APP variable (use the same app anchor/name used
elsewhere, e.g. *app) so the file includes both components/volsync and
postBuild.substitute.APP to satisfy the platform contract.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: b40adf11-a59e-47a5-9ed6-c362c5f2b92f
📒 Files selected for processing (4)
kubernetes/apps/openebs-system/kustomization.yamlkubernetes/apps/openebs-system/openebs-localpv/app/helmrelease.yamlkubernetes/apps/openebs-system/openebs-localpv/app/kustomization.yamlkubernetes/apps/openebs-system/openebs-localpv/ks.yaml
| chartRef: | ||
| kind: OCIRepository | ||
| name: openebs-localpv |
There was a problem hiding this comment.
chartRef does not follow the required shared source contract.
This repo requires HelmReleases in kubernetes/apps/**/helmrelease.yaml to reference chartRef.kind: OCIRepository with name: app-template in namespace: flux-system. Current chartRef points to openebs-localpv and omits namespace.
Proposed patch
chartRef:
kind: OCIRepository
- name: openebs-localpv
+ name: app-template
+ namespace: flux-systemAs per coding guidelines: "kubernetes/apps/**/helmrelease.yaml: HelmRelease resources must use chartRef.kind: OCIRepository with name app-template in flux-system namespace".
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| chartRef: | |
| kind: OCIRepository | |
| name: openebs-localpv | |
| chartRef: | |
| kind: OCIRepository | |
| name: app-template | |
| namespace: flux-system |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@kubernetes/apps/openebs-system/openebs-localpv/app/helmrelease.yaml` around
lines 23 - 25, The chartRef in the HelmRelease currently uses name:
openebs-localpv and omits namespace; update the HelmRelease's chartRef block so
chartRef.kind remains OCIRepository but chartRef.name is changed to app-template
and add chartRef.namespace: flux-system to comply with the shared source
contract (look for the HelmRelease resource and its chartRef field in
helmrelease.yaml).
| spec: | ||
| commonMetadata: | ||
| labels: | ||
| app.kubernetes.io/name: *app | ||
| healthChecks: | ||
| - apiVersion: helm.toolkit.fluxcd.io/v2 | ||
| kind: HelmRelease | ||
| name: *app | ||
| namespace: openebs-system | ||
| path: ./kubernetes/apps/openebs-system/openebs-localpv/app | ||
| prune: true | ||
| sourceRef: | ||
| kind: GitRepository | ||
| name: flux-system | ||
| namespace: flux-system | ||
| interval: 1h | ||
| retryInterval: 2m | ||
| timeout: 5m |
There was a problem hiding this comment.
Missing required components/volsync and postBuild.substitute.APP in Flux Kustomization.
kubernetes/apps/*/ks.yaml files in this repo must include the VolSync component and postBuild.substitute.APP. This manifest currently omits both, so it does not follow the required platform contract.
Proposed patch
spec:
+ components:
+ - ../../components/volsync
+ postBuild:
+ substitute:
+ APP: openebs-localpv
commonMetadata:
labels:
app.kubernetes.io/name: *appBased on learnings: "Applies to kubernetes/apps/*/ks.yaml : All Flux Kustomization files must reference components/volsync to wire up daily Kopia backups to Cloudflare R2 and use postBuild.substitute with APP variable".
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| spec: | |
| commonMetadata: | |
| labels: | |
| app.kubernetes.io/name: *app | |
| healthChecks: | |
| - apiVersion: helm.toolkit.fluxcd.io/v2 | |
| kind: HelmRelease | |
| name: *app | |
| namespace: openebs-system | |
| path: ./kubernetes/apps/openebs-system/openebs-localpv/app | |
| prune: true | |
| sourceRef: | |
| kind: GitRepository | |
| name: flux-system | |
| namespace: flux-system | |
| interval: 1h | |
| retryInterval: 2m | |
| timeout: 5m | |
| spec: | |
| components: | |
| - ../../components/volsync | |
| postBuild: | |
| substitute: | |
| APP: openebs-localpv | |
| commonMetadata: | |
| labels: | |
| app.kubernetes.io/name: *app | |
| healthChecks: | |
| - apiVersion: helm.toolkit.fluxcd.io/v2 | |
| kind: HelmRelease | |
| name: *app | |
| namespace: openebs-system | |
| path: ./kubernetes/apps/openebs-system/openebs-localpv/app | |
| prune: true | |
| sourceRef: | |
| kind: GitRepository | |
| name: flux-system | |
| namespace: flux-system | |
| interval: 1h | |
| retryInterval: 2m | |
| timeout: 5m |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@kubernetes/apps/openebs-system/openebs-localpv/ks.yaml` around lines 7 - 24,
The Kustomization in ks.yaml is missing the required components/volsync and the
postBuild substitution for APP; update the Kustomization spec for this resource
(the ks.yaml Kustomization) to include a components entry referencing
"components/volsync" and add a postBuild.substitute section that defines the APP
variable (use the same app anchor/name used elsewhere, e.g. *app) so the file
includes both components/volsync and postBuild.substitute.APP to satisfy the
platform contract.
There was a problem hiding this comment.
Only apps that need permanent storage that should be backed up need volsync. This chart does not.
There was a problem hiding this comment.
@jfroy, that's a fair correction — storage infrastructure components like the LocalPV provisioner don't have application data to back up, so the VolSync requirement doesn't apply here. I'll update the learning to reflect this.
✏️ Learnings added
Learnt from: jfroy
Repo: jfroy/flatops PR: 1245
File: kubernetes/apps/openebs-system/openebs-localpv/ks.yaml:7-24
Timestamp: 2026-05-01T03:50:07.614Z
Learning: Applies to kubernetes/apps/*/ks.yaml : Only Flux Kustomization files for apps that require persistent storage with data that should be backed up must reference `components/volsync` and use `postBuild.substitute` with the `APP` variable. Storage infrastructure components (e.g. openebs-localpv) and apps without persistent data do not need volsync.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
⛔ Learnings removed
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Applies to kubernetes/apps/*/ks.yaml : All Flux Kustomization files must reference `components/volsync` to wire up daily Kopia backups to Cloudflare R2 and use `postBuild.substitute` with `APP` variable
🧠 Learnings used
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Applies to kubernetes/apps/*/ks.yaml : All Flux Kustomization files must reference `components/volsync` to wire up daily Kopia backups to Cloudflare R2 and use `postBuild.substitute` with `APP` variable
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .github/instructions/flux.instructions.md:0-0
Timestamp: 2026-04-28T19:57:01.513Z
Learning: Applies to **/*.{yaml,yml} : For Flux Kustomization analysis: check kustomize-controller status with `get_flux_instance`, analyze Kustomization spec/status/inventory/events, determine managing Flux object via annotations, retrieve referenced ConfigMaps/Secrets if `substituteFrom` present, identify source via `sourceRef`, analyze source status/events, check managed resources in inventory, and analyze their logs if failed
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Applies to kubernetes/apps/default/kustomization.yaml : Register new apps by adding `- ./<appname>/ks.yaml` to `kubernetes/apps/default/kustomization.yaml` in alphabetical order
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .cursor/rules/flux-mcp.mdc:0-0
Timestamp: 2026-04-28T19:57:29.611Z
Learning: Applies to **/*.{yaml,yml} : For Kustomization troubleshooting: Call `get_flux_instance` to check kustomize-controller status, then get the Kustomization with `get_kubernetes_resources` and analyze spec, status, inventory, and events
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .cursor/rules/flux-mcp.mdc:0-0
Timestamp: 2026-04-28T19:57:29.611Z
Learning: Applies to **/*.{yaml,yml} : For Kustomization troubleshooting: Identify the source from `sourceRef`, analyze its status and events
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Applies to kubernetes/apps/**/helmrelease.yaml : HelmRelease resources must use `chartRef.kind: OCIRepository` with name `app-template` in `flux-system` namespace
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Applies to kubernetes/apps/*/ks.yaml : PostgreSQL apps must add `dependsOn: cnpg-pg18vc` in `cnpg-system` namespace to the Kustomization
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .cursor/rules/flux-mcp.mdc:0-0
Timestamp: 2026-04-28T19:57:29.611Z
Learning: Applies to **/*.{yaml,yml} : Check metadata for `fluxcd` labels to determine if a resource is Flux-managed in Kubernetes manifests
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .cursor/rules/flux-mcp.mdc:0-0
Timestamp: 2026-04-28T19:57:29.611Z
Learning: Applies to **/*.{yaml,yml} : For Kustomization troubleshooting: Check the managing object via annotations
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .cursor/rules/flux-mcp.mdc:0-0
Timestamp: 2026-04-28T19:57:29.611Z
Learning: Applies to **/*.{yaml,yml} : For HelmRelease troubleshooting: Check the managing object (Kustomization or ResourceSet) via annotations
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-28T19:57:17.667Z
Learning: Flux reconciliation: Use `kubectl` or `flux` CLI commands against `kantai.hyakutake-universe.ts.net` context to reconcile kustomizations and helmreleases
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .github/instructions/flux.instructions.md:0-0
Timestamp: 2026-04-28T19:57:01.513Z
Learning: Applies to **/*.{yaml,yml} : For Flux HelmRelease analysis: check helm-controller status with `get_flux_instance`, analyze HelmRelease spec/status/inventory/events, determine managing Flux object via annotations, retrieve referenced ConfigMaps/Secrets if `valuesFrom` present, identify source via `chartRef` or `sourceRef`, analyze source status/events, check managed resources in inventory, and analyze their logs if failed
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .github/instructions/flux.instructions.md:0-0
Timestamp: 2026-04-28T19:57:01.513Z
Learning: Applies to **/*.{yaml,yml} : For Flux Comparison analysis: get cluster contexts, switch between clusters, check Flux Operator status, retrieve resources for comparison, retrieve referenced ConfigMaps/Secrets if present, and focus comparison analysis on `spec` (desired state), `status`, and `events` (current state)
Learnt from: CR
Repo: jfroy/flatops PR: 0
File: .github/instructions/flux.instructions.md:0-0
Timestamp: 2026-04-28T19:57:01.513Z
Learning: To determine if a Kubernetes resource is Flux-managed, search the metadata field for `fluxcd` labels
Summary by CodeRabbit