Conversation
| if cluster.CompareVersion("2.9.0") >= 0 { | ||
| for _, p := range spec.SidecarPVCs { | ||
| instance.Spec.VolumeClaimTemplates = append(instance.Spec.VolumeClaimTemplates, corev1.PersistentVolumeClaim{ | ||
| ObjectMeta: metav1.ObjectMeta{Name: p.Name}, | ||
| Spec: p.Spec, | ||
| }) | ||
| } | ||
| } |
There was a problem hiding this comment.
does this mean that users can only add sidecar PVCs while creating clusters? i guess we had the same limitation in other operators.
percona/controller/pgcluster/pvc.go
Outdated
| if err := cl.Create(ctx, pvc); err != nil { | ||
| return errors.Wrapf(err, "create PVC %s", client.ObjectKeyFromObject(pvc).String()) | ||
| } |
There was a problem hiding this comment.
but if we are creating PVCs ourselves why don't we just add them into statefulset volumes so they can also be added after cluster creation?
There was a problem hiding this comment.
ok, i now realized we're doing this only for pgbouncer because it's a deployment. but if we do this for all, we'd overcome the limitation of adding sidecar pvcs after creation
There was a problem hiding this comment.
i don't think we should downgrade
percona/controller/pgcluster/pvc.go
Outdated
| pvc := new(corev1.PersistentVolumeClaim) | ||
| pvc.Name = sidecarPVC.Name | ||
| pvc.Namespace = namespace | ||
| pvc.Spec = sidecarPVC.Spec |
There was a problem hiding this comment.
should we have some sort of labels added here so that we know that these pvcs are created by the operator?
| err := cl.Get(ctx, client.ObjectKeyFromObject(pvc), &corev1.PersistentVolumeClaim{}) | ||
| if err == nil { | ||
| // already exists | ||
| continue |
There was a problem hiding this comment.
What should happen if the pvcs are updated in terms of specs? should we update them of skip?
|
let's check also why unit tests are failing on this pr |
There was a problem hiding this comment.
Pull request overview
Adds support for configuring extra volumes and operator-managed PVCs for sidecar containers across instance pods, pgBouncer, and pgBackRest repoHost, along with the necessary API/plumbing, RBAC, and tests.
Changes:
- Extend CRDs/types with
sidecarVolumesandsidecarPVCsfor instances, pgBouncer, and pgBackRest repoHost. - Reconcile pod specs to mount the configured sidecar volumes/PVCs, and add a controller reconciler to create/update the defined PVCs.
- Update RBAC and sidecar-related unit/E2E tests to cover the new fields.
Reviewed changes
Copilot reviewed 20 out of 28 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go | Deepcopy updates for new fields and new SidecarPVC type. |
| pkg/apis/postgres-operator.crunchydata.com/v1beta1/postgrescluster_types.go | Adds sidecarVolumes/sidecarPVCs to instance set spec + defines SidecarPVC. |
| pkg/apis/postgres-operator.crunchydata.com/v1beta1/pgbouncer_types.go | Adds sidecarVolumes/sidecarPVCs to pgBouncer pod spec. |
| pkg/apis/postgres-operator.crunchydata.com/v1beta1/pgbackrest_types.go | Adds sidecarVolumes/sidecarPVCs to pgBackRest repoHost spec. |
| pkg/apis/pgv2.percona.com/v2/zz_generated.deepcopy.go | Deepcopy updates for new Percona API fields. |
| pkg/apis/pgv2.percona.com/v2/perconapgcluster_types.go | Adds Percona-level fields and maps them through ToCrunchy(). |
| percona/controller/pgcluster/pvc.go | New reconciler to create/update PVCs declared via sidecarPVCs. |
| percona/controller/pgcluster/controller_test.go | Extends sidecar tests to assert volumes + PVC-backed volumes are present. |
| percona/controller/pgcluster/controller.go | Calls PVC reconciler and adds PVC RBAC marker. |
| internal/postgres/reconcile.go | Adds sidecarVolumes to instance pods (version-gated). |
| internal/pgbouncer/reconcile.go | Adds sidecarVolumes and PVC-backed volumes to pgBouncer pod spec (version-gated). |
| internal/controller/postgrescluster/pgbackrest.go | Adds sidecarVolumes and PVC-backed volumes to repoHost pod template (version-gated). |
| internal/controller/postgrescluster/instance.go | Adds PVC-backed volumes to instance StatefulSet pod template (version-gated). |
| e2e-tests/tests/sidecars/01-create-cluster.yaml | Sets sidecarVolumes/sidecarPVCs fields in the sidecars E2E test. |
| e2e-tests/tests/sidecars/01-assert.yaml | Adds assertions for PVC creation/binding in the sidecars E2E test. |
| deploy/rbac.yaml | Grants PVC verbs in deployment RBAC. |
| deploy/cw-rbac.yaml | Same RBAC updates for cw deployment. |
| config/rbac/namespace/role.yaml | Grants PVC verbs in generated namespace Role. |
| config/rbac/cluster/role.yaml | Grants PVC verbs in generated cluster Role. |
| Makefile | Minor formatting/line fix in after-release target. |
pkg/apis/postgres-operator.crunchydata.com/v1beta1/postgrescluster_types.go
Show resolved
Hide resolved
pkg/apis/postgres-operator.crunchydata.com/v1beta1/postgrescluster_types.go
Show resolved
Hide resolved
pkg/apis/postgres-operator.crunchydata.com/v1beta1/postgrescluster_types.go
Show resolved
Hide resolved
commit: 4866e97 |
The current implementation of |
https://perconadev.atlassian.net/browse/K8SPG-864
DESCRIPTION
This PR adds the following fields to the
cr.yaml:.spec.instances[].sidecarPVCs.spec.instances[].sidecarVolumes.spec.proxy.pgBouncer.sidecarPVCs.spec.proxy.pgBouncer.sidecarVolumes.spec.backups.pgbackrest.repoHost.sidecarPVCs.spec.backups.pgbackrest.repoHost.sidecarVolumesThe
sidecarPVCsfield definesPersistentVolumeClaimsthat should be created and associated with a specific resource. Example:The
sidecarVolumesfield defines volumes that should be attached to a specific resource. Example:Helm PR: percona/percona-helm-charts#783
CHECKLIST
Jira
Needs Doc) and QA (Needs QA)?Tests
Config/Logging/Testability