Skip to content

Commit 0784a09

Browse files
committed
feat: add support for extraPVCs
This commit introduces the `extraPVCs` field in CRD, allowing users to attach additional PVC to main container. #2126 Signed-off-by: Emin Aktas <[email protected]>
1 parent 92f6521 commit 0784a09

File tree

7 files changed

+2791
-16
lines changed

7 files changed

+2791
-16
lines changed

config/crd/bases/pxc.percona.com_perconaxtradbclusters.yaml

Lines changed: 678 additions & 0 deletions
Large diffs are not rendered by default.

deploy/bundle.yaml

Lines changed: 678 additions & 0 deletions
Large diffs are not rendered by default.

deploy/crd.yaml

Lines changed: 678 additions & 0 deletions
Large diffs are not rendered by default.

deploy/cw-bundle.yaml

Lines changed: 678 additions & 0 deletions
Large diffs are not rendered by default.

pkg/apis/pxc/v1/pxc_types.go

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -547,22 +547,31 @@ type PodSpec struct {
547547
// Deprecated: Use ServiceExpose.Labels instead
548548
ReplicasServiceLabels map[string]string `json:"replicasServiceLabels,omitempty"`
549549

550-
SchedulerName string `json:"schedulerName,omitempty"`
551-
ReadinessInitialDelaySeconds *int32 `json:"readinessDelaySec,omitempty"`
552-
ReadinessProbes corev1.Probe `json:"readinessProbes,omitempty"`
553-
LivenessInitialDelaySeconds *int32 `json:"livenessDelaySec,omitempty"`
554-
LivenessProbes corev1.Probe `json:"livenessProbes,omitempty"`
555-
PodSecurityContext *corev1.PodSecurityContext `json:"podSecurityContext,omitempty"`
556-
ContainerSecurityContext *corev1.SecurityContext `json:"containerSecurityContext,omitempty"`
557-
ServiceAccountName string `json:"serviceAccountName,omitempty"`
558-
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
559-
Sidecars []corev1.Container `json:"sidecars,omitempty"`
560-
SidecarVolumes []corev1.Volume `json:"sidecarVolumes,omitempty"`
561-
SidecarPVCs []corev1.PersistentVolumeClaim `json:"sidecarPVCs,omitempty"`
562-
RuntimeClassName *string `json:"runtimeClassName,omitempty"`
563-
HookScript string `json:"hookScript,omitempty"`
564-
Lifecycle corev1.Lifecycle `json:"lifecycle,omitempty"`
565-
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
550+
SchedulerName string `json:"schedulerName,omitempty"`
551+
ReadinessInitialDelaySeconds *int32 `json:"readinessDelaySec,omitempty"`
552+
ReadinessProbes corev1.Probe `json:"readinessProbes,omitempty"`
553+
LivenessInitialDelaySeconds *int32 `json:"livenessDelaySec,omitempty"`
554+
LivenessProbes corev1.Probe `json:"livenessProbes,omitempty"`
555+
PodSecurityContext *corev1.PodSecurityContext `json:"podSecurityContext,omitempty"`
556+
ContainerSecurityContext *corev1.SecurityContext `json:"containerSecurityContext,omitempty"`
557+
ServiceAccountName string `json:"serviceAccountName,omitempty"`
558+
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
559+
Sidecars []corev1.Container `json:"sidecars,omitempty"`
560+
SidecarVolumes []corev1.Volume `json:"sidecarVolumes,omitempty"`
561+
// +kubebuilder:validation:items:XEmbeddedResource
562+
SidecarPVCs []corev1.PersistentVolumeClaim `json:"sidecarPVCs,omitempty"`
563+
RuntimeClassName *string `json:"runtimeClassName,omitempty"`
564+
HookScript string `json:"hookScript,omitempty"`
565+
Lifecycle corev1.Lifecycle `json:"lifecycle,omitempty"`
566+
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
567+
ExtraPVCs []ExtraPVC `json:"extraPVCs,omitempty"`
568+
}
569+
570+
type ExtraPVC struct {
571+
// +kubebuilder:validation:EmbeddedResource
572+
VolumeClaimTemplate corev1.PersistentVolumeClaim `json:"volumeClaimTemplate,omitempty"`
573+
MountPath string `json:"mountPath,omitempty"`
574+
ReadOnly *bool `json:"readOnly,omitempty"`
566575
}
567576

568577
func (spec *PodSpec) HasSidecarInternalSecret(secret *corev1.Secret) bool {
@@ -1522,6 +1531,14 @@ func AddSidecarContainers(log logr.Logger, existing, sidecars []corev1.Container
15221531
return existing
15231532
}
15241533

1534+
func AddExtraVolumes(log logr.Logger, existing []corev1.Volume, extraVolumes []ExtraPVC) []corev1.Volume {
1535+
if len(extraVolumes) == 0 {
1536+
return existing
1537+
}
1538+
1539+
return existing
1540+
}
1541+
15251542
func AddSidecarVolumes(log logr.Logger, existing, sidecarVolumes []corev1.Volume) []corev1.Volume {
15261543
if len(sidecarVolumes) == 0 {
15271544
return existing

pkg/apis/pxc/v1/zz_generated.deepcopy.go

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/pxc/statefulset.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@ func StatefulSet(
5555
return nil, fmt.Errorf("failed to get volumes %v", err)
5656
}
5757

58+
var extraPVCMounts []corev1.VolumeMount
59+
if cr.Spec.PXC.ExtraPVCs != nil {
60+
for _, extraPVC := range cr.Spec.PXC.ExtraPVCs {
61+
sfsVolume.PVCs = append(sfsVolume.PVCs, extraPVC.VolumeClaimTemplate)
62+
pvcMount := corev1.VolumeMount{
63+
Name: extraPVC.VolumeClaimTemplate.GetName(),
64+
MountPath: extraPVC.MountPath,
65+
ReadOnly: *extraPVC.ReadOnly,
66+
}
67+
extraPVCMounts = append(extraPVCMounts, pvcMount)
68+
}
69+
}
70+
5871
if sfsVolume != nil && sfsVolume.Volumes != nil {
5972
pod.Volumes = sfsVolume.Volumes
6073
}
@@ -64,6 +77,11 @@ func StatefulSet(
6477
return nil, errors.Wrap(err, "app container")
6578
}
6679

80+
// Attach extraPVCs mounts
81+
if extraPVCMounts != nil {
82+
appC.VolumeMounts = append(appC.VolumeMounts, extraPVCMounts...)
83+
}
84+
6785
pmmC, err := sfs.PMMContainer(ctx, cl, cr.Spec.PMM, secret, cr)
6886
if err != nil {
6987
log.Info(`"pmm container error"`, "secrets", cr.Spec.SecretsName, "internalSecrets", "internal-"+cr.Name, "error", err)

0 commit comments

Comments
 (0)