diff --git a/deploy/deployment.yaml b/deploy/deployment.yaml new file mode 100644 index 000000000..748fd4b9b --- /dev/null +++ b/deploy/deployment.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kdmp-operator + namespace: kube-system + labels: + name: kdmp-operator +spec: + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + replicas: 1 + selector: + matchLabels: + name: kdmp-operator + template: + metadata: + labels: + name: kdmp-operator + spec: + containers: + - name: kdmp-operator + image: portworx/kdmp:latest + imagePullPolicy: Always + resources: + requests: + cpu: 0.5 + memory: 200Mi + limits: + cpu: 1 + memory: 500Mi + serviceAccountName: kdmp-operator diff --git a/pkg/drivers/kopiabackup/kopiabackup.go b/pkg/drivers/kopiabackup/kopiabackup.go index d50220e0f..70264b239 100644 --- a/pkg/drivers/kopiabackup/kopiabackup.go +++ b/pkg/drivers/kopiabackup/kopiabackup.go @@ -402,10 +402,6 @@ func jobFor( } } - if len(nodeName) != 0 { - job.Spec.Template.Spec.NodeName = nodeName - } - // Add the image secret in job spec only if it is present in the stork deployment. if len(imageRegistrySecret) != 0 { job.Spec.Template.Spec.ImagePullSecrets = utils.ToImagePullSecret(utils.GetImageSecretName(jobName)) @@ -417,6 +413,24 @@ func jobFor( if err != nil { return nil, err } + } else { + accessModes, err := utils.GetAccessModeFromPvc(jobOption.SourcePVCName, jobOption.SourcePVCNamespace) + if err != nil { + return nil, err + } + for _, val := range accessModes { + if val == "ReadOnlyMany" || val == "ReadWriteMany" { + job, err = utils.AddNodeAffinityToJob(job, jobOption) + if err != nil { + return nil, err + } + break + } + } + + if job.Spec.Template.Spec.Affinity == nil && len(nodeName) != 0 { + job.Spec.Template.Spec.NodeName = nodeName + } } if len(jobOption.NfsServer) != 0 { diff --git a/pkg/drivers/utils/utils.go b/pkg/drivers/utils/utils.go index 2341d6e70..5ffb0b55e 100644 --- a/pkg/drivers/utils/utils.go +++ b/pkg/drivers/utils/utils.go @@ -1168,3 +1168,12 @@ func AddNodeAffinityToJob(job *batchv1.Job, jobOption drivers.JobOpts) (*batchv1 } return job, nil } + +func GetAccessModeFromPvc(srcPvcName, srcPvcNameSpace string) ([]corev1.PersistentVolumeAccessMode, error) { + srcPvc, err := core.Instance().GetPersistentVolumeClaim(srcPvcName, srcPvcNameSpace) + if err != nil { + return nil, err + } + accessModes := srcPvc.Spec.AccessModes + return accessModes, nil +}