Repository: rook/rook
Pull request #6137 (2020-08-20 17:04:57)

ceph: use proper log functions in object package
There is incorrect usage of log functions in object directory, changing those instances

Signed-off-by: Jiffin Tony Thottan <thottanjiffin@gmail.com>

<!-- Please take a look at our [Contributing](https://rook.io/docs/rook/master/development-flow.html)
documentation before submitting a Pull Request!
Thank you for contributing to Rook! -->

**Which issue is resolved by this Pull Request:**
Resolves #

**Checklist:**

- [ ] **Commit Message Formatting**: Commit titles and messages follow guidelines in the [developer guide](https://rook.io/docs/rook/master/development-flow.html#commit-structure).
- [ ] **Skip Tests for Docs**: Add the flag for skipping the build if this is only a documentation change. See [here](https://github.com/rook/rook/blob/master/INSTALL.md#skip-ci) for the flag.
- [ ] **Skip Unrelated Tests**: Add a flag to run tests for a specific storage provider. See [test options](https://github.com/rook/rook/blob/master/INSTALL.md#test-storage-provider).
- [ ] Reviewed the developer guide on [Submitting a Pull Request](https://rook.io/docs/rook/master/development-flow.html#submitting-a-pull-request)
- [ ] Documentation has been updated, if necessary.
- [ ] Unit tests have been added, if necessary.
- [ ] Integration tests have been added, if necessary.
- [ ] Pending release notes updated with breaking and/or notable changes, if necessary.
- [ ] Upgrade from previous release is tested and upgrade user guide is updated, if necessary.
- [ ] Code generation (`make codegen`) has been run to update object specifications, if necessary.



Patch:
diff --git a/Documentation/ceph-cluster-crd.md b/Documentation/ceph-cluster-crd.md
index 2f8f5204d..4c0a93600 100755
--- a/Documentation/ceph-cluster-crd.md
+++ b/Documentation/ceph-cluster-crd.md
@@ -219,7 +219,6 @@ To use host networking, set `provider: host`.
 #### Multus (EXPERIMENTAL)
 
 Rook has experimental support for Multus.
-Currently there is an [open issue](https://github.com/ceph/ceph-csi/issues/1323) in ceph-csi which explains the csi-rbdPlugin issue while using multus network.
 
 The selector keys are required to be `public` and `cluster` where each represent:
 
@@ -310,13 +309,11 @@ The following are the settings for Storage Class Device Sets which can be config
 
   However, if there are more OSDs than nodes, this anti-affinity will not be effective. Another placement scheme to consider is to add labels to the nodes in such a way that the OSDs can be grouped on those nodes, create multiple storageClassDeviceSets, and add node affinity to each of the device sets that will place the OSDs in those sets of nodes.
 
-* `preparePlacement`: The placement criteria for the preparation of the OSD devices. Creating OSDs is a two-step process and the prepare job may require different placement than the OSD daemons. If the `preparePlacement` is not specified, the `placement` will instead be applied for consistent placement for the OSD prepare jobs and OSD deployments. The `preparePlacement` is only useful for `portable` OSDs in the device sets. OSDs that are not portable will be tied to the host where the OSD prepare job initially runs.
-   * For example, provisioning may require topology spread constraints across zones, but the OSD daemons may require constraints across hosts within the zones.
 * `portable`: If `true`, the OSDs will be allowed to move between nodes during failover. This requires a storage class that supports portability (e.g. `aws-ebs`, but not the local storage provisioner). If `false`, the OSDs will be assigned to a node permanently. Rook will configure Ceph's CRUSH map to support the portability.
 * `tuneDeviceClass`: If `true`, because the OSD can be on a slow device class, Rook will adapt to that by tuning the OSD process. This will make Ceph perform better under that slow device.
 * `volumeClaimTemplates`: A list of PVC templates to use for provisioning the underlying storage devices.
   * `resources.requests.storage`: The desired capacity for the underlying storage devices.
-  * `storageClassName`: The StorageClass to provision PVCs from. Default would be to use the cluster-default StorageClass. This StorageClass should provide a raw block device, multipath device, or logical volume. Other types are not supported. If you want to use logical volume, please see [known issue of OSD on LV-backed PVC](ceph-common-issues.md#lvm-metadata-can-be-corrupted-with-osd-on-lv-backed-pvc)
+  * `storageClassName`: The StorageClass to provision PVCs from. Default would be to use the cluster-default StorageClass. This StorageClass should provide a raw block device, multipath device, or logical volume. Other types are not supported.
   * `volumeMode`: The volume mode to be set for the PVC. Which should be Block
   * `accessModes`: The access mode for the PVC to be bound by OSD.
 * `schedulerName`: Scheduler name for OSD pod placement. (Optional)
@@ -424,15 +421,19 @@ It scrapes for Ceph daemon core dumps and sends them to the Ceph manager crash m
 You can read more about the [Ceph Crash module](https://docs.ceph.com/docs/master/mgr/crash/).
 * `cleanup`: Set resource requests/limits for cleanup job, responsible for wiping cluster's data after uninstall
 
-In order to provide the best possible experience running Ceph in containers, Rook internally recommends minimum memory limits if resource limits are passed.
-If a user configures a limit or request value that is too low, Rook will still run the pod(s) and print a warning to the operator log.
+In order to provide the best possible experience running Ceph in containers, Rook internally enforces minimum memory limits if resource limits are passed.
+If a user configures a limit or request value that is too low, Rook will refuse to run the pod(s).
+Here are the current minimum amounts of memory in MB to apply so that Rook will agree to run Ceph pods:
 
 * `mon`: 1024MB
 * `mgr`: 512MB
 * `osd`: 2048MB
 * `mds`: 4096MB
-* `prepareosd`: 50MB
-* `crashcollector`: 60MB
+
+Rook does not enforce any minimum limit nor request on the following:
+
+* prepare OSD pod: This pod commonly takes up to 50MB, but depending on the OSD scenario may need more memory. 100MB would be more conservative.
+* crashcollector pod: This pod commonly takes around 60MB.
 
 ### Resource Requirements/Limits
 
@@ -1145,8 +1146,8 @@ In Ceph Cluster let us list the pools available:
 
 ```console
 rados df
-POOL_NAME     USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS  RD WR_OPS  WR USED COMPR UNDER COMPR
-replicated_2g  0 B       0      0      0                  0       0        0      0 0 B      0 0 B        0 B         0 B
+POOL_NAME     USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS  RD WR_OPS  WR USED COMPR UNDER COMPR 
+replicated_2g  0 B       0      0      0                  0       0        0      0 0 B      0 0 B        0 B         0 B 
 ```
 
 Here is an example StorageClass configuration that uses the `replicated_2g` pool from the external cluster:
diff --git a/Documentation/ceph-common-issues.md b/Documentation/ceph-common-issues.md
index 2648deb8b..7862cf0be 100644
--- a/Documentation/ceph-common-issues.md
+++ b/Documentation/ceph-common-issues.md
@@ -27,7 +27,6 @@ If after trying the suggestions found on this page and the problem is not resolv
 * [Flex storage class versus Ceph CSI storage class](#flex-storage-class-versus-ceph-csi-storage-class)
 * [A worker node using RBD devices hangs up](#a-worker-node-using-rbd-devices-hangs-up)
 * [Too few PGs per OSD warning is shown](#too-few-pgs-per-osd-warning-is-shown)
-* [LVM metadata can be corrupted with OSD on LV-backed PVC](#lvm-metadata-can-be-corrupted-with-osd-on-lv-backed-pvc)
 
 ## Troubleshooting Techniques
 
@@ -801,16 +800,3 @@ You can bypass this problem by using ext4 or any other filesystems rather than X
 The meaning of this warning is written in [the document](https://docs.ceph.com/docs/master/rados/operations/health-checks#too-few-pgs).
 However, in many cases it is benign. For more information, please see [the blog entry](http://ceph.com/community/new-luminous-pg-overdose-protection/).
 Please refer to [Configuring Pools](ceph-advanced-configuration.md#configuring-pools) if you want to know the proper `pg_num` of pools and change these values.
-
-## LVM metadata can be corrupted with OSD on LV-backed PVC
-
-### Symptoms
-
-There is a critical flaw in OSD on LV-backed PVC. LVM metadata can be corrupted if both the host and OSD container modify it simultaneously. For example, the administrator might modify it on the host, while the OSD initialization process in a container could modify it too. If you still decide to configure an OSD on LVM, please keep the following in mind to reduce the probability of this issue.
-
-### Solution
-
-- Avoid configuration of LVs from the host. In addition, don't touch the VGs and physical volumes that back these LVs. 
-- Avoid incrementing the `count` field of `storageClassDeviceSets` and create a new LV that backs a OSD simultaneously.
-
-You can know whether the above-mentioned tag exists tag with the command: `sudo lvs -o lv_name,lv_tags`. If the `lv_tag` field is empty in an LV corresponding to the OSD lv_tags, this OSD encountered the problem. In this case, please [retire this OSD](ceph-osd-mgmt.md#remove-an-osd) or replace with other new OSD before restarting.
diff --git a/Documentation/development-environment.md b/Documentation/development-environment.md
index 81d4d61a9..2f910d0e7 100644
--- a/Documentation/development-environment.md
+++ b/Documentation/development-environment.md
@@ -214,7 +214,3 @@ For more information or if you are experiencing issues, please create an issue a
 ## Using Vagrant on Linux with libvirt
 
 See https://github.com/noahdesu/kubensis.
-
-## Using CodeReady Containers for setting up single node openshift 4.x cluster
-
-See https://code-ready.github.io/crc/
diff --git a/Documentation/development-flow.md b/Documentation/development-flow.md
index f5a58bbf3..030cee45a 100644
--- a/Documentation/development-flow.md
+++ b/Documentation/development-flow.md
@@ -50,8 +50,6 @@ make IMAGES="cassandra" build
 make IMAGES="cassandra ceph" build
 ```
 
-If you want to use `podman` instead of `docker` then uninstall `docker` packages from your machine, make will automatically pick up `podman`.
-
 ### Development Settings
 
 To provide consistent whitespace and other formatting in your `go` and other source files (e.g., Markdown), it is recommended you apply
diff --git a/cluster/examples/kubernetes/ceph/cluster-on-pvc.yaml b/cluster/examples/kubernetes/ceph/cluster-on-pvc.yaml
index f44b9762c..fcabe9339 100644
--- a/cluster/examples/kubernetes/ceph/cluster-on-pvc.yaml
+++ b/cluster/examples/kubernetes/ceph/cluster-on-pvc.yaml
@@ -62,20 +62,13 @@ spec:
       encrypted: false
       # Since the OSDs could end up on any node, an effort needs to be made to spread the OSDs
       # across nodes as much as possible. Unfortunately the pod anti-affinity breaks down
-      # as soon as you have more than one OSD per node. The topology spread constraints will
-      # give us an even spread on K8s 1.18 or newer.
+      # as soon as you have more than one OSD per node. If you have more OSDs than nodes, K8s may
+      # choose to schedule many of them on the same node. What we need is the Pod Topology
+      # Spread Constraints.
+      # Another approach for a small number of OSDs is to create a separate device set for each
+      # zone (or other set of nodes with a common label) so that the OSDs will end up on different
+      # nodes. This would require adding nodeAffinity to the placement here.
       placement:
-        topologySpreadConstraints:
-        - maxSkew: 1
-          topologyKey: kubernetes.io/hostname
-          whenUnsatisfiable: ScheduleAnyway
-          labelSelector:
-            matchExpressions:
-            - key: app
-              operator: In
-              values:
-              - rook-ceph-osd
-      preparePlacement:
         podAntiAffinity:
           preferredDuringSchedulingIgnoredDuringExecution:
           - weight: 100
@@ -93,16 +86,16 @@ spec:
               topologyKey: kubernetes.io/hostname
         topologySpreadConstraints:
         - maxSkew: 1
-          topologyKey: topology.kubernetes.io/zone
-          whenUnsatisfiable: ScheduleAnyway
+          topologyKey: kubernetes.io/hostname
+          whenUnsatisfiable: DoNotSchedule
           labelSelector:
             matchExpressions:
             - key: app
               operator: In
               values:
+              - rook-ceph-osd
               - rook-ceph-osd-prepare
       resources:
-      # These are the OSD daemon limits. For OSD prepare limits, see the separate section below for "prepareosd" resources
       #   limits:
       #     cpu: "500m"
       #     memory: "4Gi"
@@ -152,14 +145,6 @@ spec:
       #       - ReadWriteOnce
       # Scheduler name for OSD pod placement
       # schedulerName: osd-scheduler
-  resources:
-  #  prepareosd:
-  #    limits:
-  #      cpu: "200m"
-  #      memory: "200Mi"
-  #   requests:
-  #      cpu: "200m"
-  #      memory: "200Mi"
   disruptionManagement:
     managePodBudgets: false
     osdMaintenanceTimeout: 30
diff --git a/cluster/examples/kubernetes/ceph/object-ec.yaml b/cluster/examples/kubernetes/ceph/object-ec.yaml
index 83d83a041..ddc31a7a2 100644
--- a/cluster/examples/kubernetes/ceph/object-ec.yaml
+++ b/cluster/examples/kubernetes/ceph/object-ec.yaml
@@ -15,29 +15,14 @@ spec:
     failureDomain: host
     replicated:
       size: 3
-      # Disallow setting pool with replica 1, this could lead to data loss without recovery.
-      # Make sure you're *ABSOLUTELY CERTAIN* that is what you want
-      requireSafeReplicaSize: true
-    parameters:
-      # Inline compression mode for the data pool
-      # Further reference: https://docs.ceph.com/docs/nautilus/rados/configuration/bluestore-config-ref/#inline-compression
-      compression_mode: none
-      # gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity of a given pool
-      # for more info: https://docs.ceph.com/docs/master/rados/operations/placement-groups/#specifying-expected-pool-size
-      #target_size_ratio: ".5"
   # The pool spec used to create the data pool. Can use replication or erasure coding.
   dataPool:
     failureDomain: host
     erasureCoded:
       dataChunks: 2
       codingChunks: 1
-    parameters:
-      # Inline compression mode for the data pool
-      # Further reference: https://docs.ceph.com/docs/nautilus/rados/configuration/bluestore-config-ref/#inline-compression
-      compression_mode: none
-      # gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity of a given pool
-      # for more info: https://docs.ceph.com/docs/master/rados/operations/placement-groups/#specifying-expected-pool-size
-      #target_size_ratio: ".5"
+    # Inline compression mode for the data pool
+    compressionMode: none
   # Whether to preserve metadata and data pools on object store deletion
   preservePoolsOnDelete: true
   # The gateway service configuration
@@ -49,7 +34,7 @@ spec:
     # The port that RGW pods will listen on (http)
     port: 80
     # The port that RGW pods will listen on (https). An ssl certificate is required.
-    # securePort: 443
+    securePort:
     # The number of pods in the rgw deployment
     instances: 1
     # The affinity rules to apply to the rgw deployment or daemonset.
@@ -79,13 +64,3 @@ spec:
     #    cpu: "500m"
     #    memory: "1024Mi"
     # priorityClassName: my-priority-class
-  #zone:
-    #name: zone-a
-  # service endpoint healthcheck
-  healthCheck:
-    bucket:
-      disabled: false
-      interval: 60s
-    # Configure the pod liveness probe for the rgw daemon
-    livenessProbe:
-      disabled: false
diff --git a/cluster/examples/kubernetes/ceph/object-openshift.yaml b/cluster/examples/kubernetes/ceph/object-openshift.yaml
index eac4a42af..1da122f56 100644
--- a/cluster/examples/kubernetes/ceph/object-openshift.yaml
+++ b/cluster/examples/kubernetes/ceph/object-openshift.yaml
@@ -15,31 +15,13 @@ spec:
     failureDomain: host
     replicated:
       size: 3
-      # Disallow setting pool with replica 1, this could lead to data loss without recovery.
-      # Make sure you're *ABSOLUTELY CERTAIN* that is what you want
-      requireSafeReplicaSize: true
-    parameters:
-      # Inline compression mode for the data pool
-      # Further reference: https://docs.ceph.com/docs/nautilus/rados/configuration/bluestore-config-ref/#inline-compression
-      compression_mode: none
-      # gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity of a given pool
-      # for more info: https://docs.ceph.com/docs/master/rados/operations/placement-groups/#specifying-expected-pool-size
-      #target_size_ratio: ".5"
   # The pool spec used to create the data pool. Can use replication or erasure coding.
   dataPool:
     failureDomain: host
     replicated:
       size: 3
-      # Disallow setting pool with replica 1, this could lead to data loss without recovery.
-      # Make sure you're *ABSOLUTELY CERTAIN* that is what you want
-      requireSafeReplicaSize: true
-    parameters:
-      # Inline compression mode for the data pool
-      # Further reference: https://docs.ceph.com/docs/nautilus/rados/configuration/bluestore-config-ref/#inline-compression
-      compression_mode: none
-      # gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity of a given pool
-      # for more info: https://docs.ceph.com/docs/master/rados/operations/placement-groups/#specifying-expected-pool-size
-      #target_size_ratio: ".5"
+    # Inline compression mode for the data pool
+    compressionMode: none
   # Whether to preserve metadata and data pools on object store deletion
   preservePoolsOnDelete: true
   # The gateway service configuration
@@ -51,7 +33,7 @@ spec:
     # The port that RGW pods will listen on (http)
     port: 8080
     # The port that RGW pods will listen on (https). An ssl certificate is required.
-    # securePort: 443
+    securePort:
     # The number of pods in the rgw deployment
     instances: 1
     # The affinity rules to apply to the rgw deployment or daemonset.
@@ -82,13 +64,3 @@ spec:
     #    cpu: "500m"
     #    memory: "1024Mi"
     # priorityClassName: my-priority-class
-   #zone:
-    #name: zone-a
-  # service endpoint healthcheck
-  healthCheck:
-    bucket:
-      disabled: false
-      interval: 60s
-    # Configure the pod liveness probe for the rgw daemon
-    livenessProbe:
-      disabled: false
diff --git a/pkg/apis/ceph.rook.io/v1/resources.go b/pkg/apis/ceph.rook.io/v1/resources.go
index f735b75d6..c53c5d9f7 100644
--- a/pkg/apis/ceph.rook.io/v1/resources.go
+++ b/pkg/apis/ceph.rook.io/v1/resources.go
@@ -30,12 +30,8 @@ const (
 	ResourcesKeyOSD = "osd"
 	// ResourcesKeyPrepareOSD represents the name of resource in the CR for the osd prepare job
 	ResourcesKeyPrepareOSD = "prepareosd"
-	// ResourcesKeyMDS represents the name of resource in the CR for the mds
-	ResourcesKeyMDS = "mds"
 	// ResourcesKeyCrashCollector represents the name of resource in the CR for the crash
 	ResourcesKeyCrashCollector = "crashcollector"
-	// ResourcesKeyRBDMirror represents the name of resource in the CR for the rbd mirror
-	ResourcesKeyRBDMirror = "rbdmirror"
 	// ResourcesKeyCleanup represents the name of resource in the CR for the cleanup
 	ResourcesKeyCleanup = "cleanup"
 )
diff --git a/pkg/apis/rook.io/v1/types.go b/pkg/apis/rook.io/v1/types.go
index 0193f16f3..36306b428 100644
--- a/pkg/apis/rook.io/v1/types.go
+++ b/pkg/apis/rook.io/v1/types.go
@@ -119,8 +119,7 @@ type StorageClassDeviceSet struct {
 	Name                 string                     `json:"name,omitempty"`                 // A unique identifier for the set
 	Count                int                        `json:"count,omitempty"`                // Number of devices in this set
 	Resources            v1.ResourceRequirements    `json:"resources,omitempty"`            // Requests/limits for the devices
-	Placement            Placement                  `json:"placement,omitempty"`            // Placement constraints for the device daemons
-	PreparePlacement     *Placement                 `json:"preparePlacement,omitempty"`     // Placement constraints for the device preparation
+	Placement            Placement                  `json:"placement,omitempty"`            // Placement constraints for the devices
 	Config               map[string]string          `json:"config,omitempty"`               // Provider-specific device configuration
 	VolumeClaimTemplates []v1.PersistentVolumeClaim `json:"volumeClaimTemplates,omitempty"` // List of PVC templates for the underlying storage devices
 	Portable             bool                       `json:"portable,omitempty"`             // OSD portability across the hosts
@@ -135,7 +134,6 @@ type VolumeSource struct {
 	PVCSources          map[string]v1.PersistentVolumeClaimVolumeSource `json:"pvcSources,omitempty"`
 	Resources           v1.ResourceRequirements                         `json:"resources,omitempty"`
 	Placement           Placement                                       `json:"placement,omitempty"`
-	PreparePlacement    *Placement                                      `json:"preparePlacement,omitempty"`
 	Config              map[string]string                               `json:"config,omitempty"`
 	Portable            bool                                            `json:"portable,omitempty"`         // Portable OSD portability across the hosts
 	TuneSlowDeviceClass bool                                            `json:"tuneDeviceClass,omitempty"`  // TuneSlowDeviceClass Tune the OSD when running on a slow Device Class
diff --git a/pkg/daemon/ceph/osd/daemon.go b/pkg/daemon/ceph/osd/daemon.go
index 33fe4d6fd..a1d3d163e 100644
--- a/pkg/daemon/ceph/osd/daemon.go
+++ b/pkg/daemon/ceph/osd/daemon.go
@@ -438,6 +438,12 @@ func getAvailableDevices(context *clusterd.Context, agent *OsdAgent) (*DeviceOsd
 				}
 				matchedDevice = desiredDevice
 
+				// On PVC, we must use the real name not the /mnt name since c-v calls udev
+				// udevadm will fail with
+				// stderr Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
+				if agent.pvcBacked {
+					matchedDevice.Name = device.RealPath
+				}
 				if matched {
 					break
 				}
diff --git a/pkg/operator/ceph/cluster/mgr/mgr.go b/pkg/operator/ceph/cluster/mgr/mgr.go
index 84c9c2b2e..46763a024 100644
--- a/pkg/operator/ceph/cluster/mgr/mgr.go
+++ b/pkg/operator/ceph/cluster/mgr/mgr.go
@@ -103,7 +103,7 @@ func (c *Cluster) getDaemonIDs() []string {
 // Start begins the process of running a cluster of Ceph mgrs.
 func (c *Cluster) Start() error {
 	// Validate pod's memory if specified
-	err := controller.CheckPodMemory(cephv1.ResourcesKeyMgr, cephv1.GetMgrResources(c.spec.Resources), cephMgrPodMinimumMemory)
+	err := controller.CheckPodMemory(cephv1.GetMgrResources(c.spec.Resources), cephMgrPodMinimumMemory)
 	if err != nil {
 		return errors.Wrap(err, "error checking pod memory")
 	}
diff --git a/pkg/operator/ceph/cluster/mon/mon.go b/pkg/operator/ceph/cluster/mon/mon.go
index 0755a7ad9..f0fbf192e 100644
--- a/pkg/operator/ceph/cluster/mon/mon.go
+++ b/pkg/operator/ceph/cluster/mon/mon.go
@@ -200,7 +200,7 @@ func (c *Cluster) Start(clusterInfo *cephclient.ClusterInfo, rookVersion string,
 	}
 
 	// Validate pod's memory if specified
-	err := controller.CheckPodMemory(cephv1.ResourcesKeyMon, cephv1.GetMonResources(c.spec.Resources), cephMonPodMinimumMemory)
+	err := controller.CheckPodMemory(cephv1.GetMonResources(c.spec.Resources), cephMonPodMinimumMemory)
 	if err != nil {
 		return nil, errors.Wrap(err, "error checking pod memory")
 	}
diff --git a/pkg/operator/ceph/cluster/osd/deviceSet.go b/pkg/operator/ceph/cluster/osd/deviceSet.go
index 7aa81c4fb..df21b92e6 100644
--- a/pkg/operator/ceph/cluster/osd/deviceSet.go
+++ b/pkg/operator/ceph/cluster/osd/deviceSet.go
@@ -21,7 +21,6 @@ import (
 	"strings"
 
 	"github.com/pkg/errors"
-	cephv1 "github.com/rook/rook/pkg/apis/ceph.rook.io/v1"
 	rookv1 "github.com/rook/rook/pkg/apis/rook.io/v1"
 	"github.com/rook/rook/pkg/operator/ceph/controller"
 	v1 "k8s.io/api/core/v1"
@@ -33,7 +32,7 @@ func (c *Cluster) prepareStorageClassDeviceSets(config *provisionConfig) []rookv
 
 	// Iterate over storageClassDeviceSet
 	for _, storageClassDeviceSet := range c.spec.Storage.StorageClassDeviceSets {
-		if err := controller.CheckPodMemory(cephv1.ResourcesKeyPrepareOSD, storageClassDeviceSet.Resources, cephOsdPodMinimumMemory); err != nil {
+		if err := controller.CheckPodMemory(storageClassDeviceSet.Resources, cephOsdPodMinimumMemory); err != nil {
 			config.addError("cannot use storageClassDeviceSet %q for creating osds %v", storageClassDeviceSet.Name, err)
 			continue
 		}
@@ -76,7 +75,6 @@ func (c *Cluster) prepareStorageClassDeviceSets(config *provisionConfig) []rookv
 				Name:                storageClassDeviceSet.Name,
 				Resources:           storageClassDeviceSet.Resources,
 				Placement:           storageClassDeviceSet.Placement,
-				PreparePlacement:    storageClassDeviceSet.PreparePlacement,
 				Config:              storageClassDeviceSet.Config,
 				Size:                dataSize,
 				PVCSources:          pvcSources,
diff --git a/pkg/operator/ceph/cluster/osd/osd.go b/pkg/operator/ceph/cluster/osd/osd.go
index 7d85a9fc7..a327d369b 100644
--- a/pkg/operator/ceph/cluster/osd/osd.go
+++ b/pkg/operator/ceph/cluster/osd/osd.go
@@ -134,7 +134,6 @@ type osdProperties struct {
 	resources           v1.ResourceRequirements
 	storeConfig         osdconfig.StoreConfig
 	placement           rookv1.Placement
-	preparePlacement    *rookv1.Placement
 	metadataDevice      string
 	location            string
 	portable            bool
@@ -158,21 +157,12 @@ func (osdProps osdProperties) onPVCWithWal() bool {
 	return osdProps.walPVC.ClaimName != ""
 }
 
-func (osdProps osdProperties) getPreparePlacement() rookv1.Placement {
-	// If the osd prepare placement is specified, use it
-	if osdProps.preparePlacement != nil {
-		return *osdProps.preparePlacement
-	}
-	// Fall back to use the same placement as requested for the osd daemons
-	return osdProps.placement
-}
-
 // Start the osd management
 func (c *Cluster) Start() error {
 	config := c.newProvisionConfig()
 
 	// Validate pod's memory if specified
-	err := controller.CheckPodMemory(cephv1.ResourcesKeyOSD, cephv1.GetOSDResources(c.spec.Resources), cephOsdPodMinimumMemory)
+	err := controller.CheckPodMemory(cephv1.GetOSDResources(c.spec.Resources), cephOsdPodMinimumMemory)
 	if err != nil {
 		return errors.Wrap(err, "failed to check pod memory")
 	}
@@ -254,7 +244,6 @@ func (c *Cluster) startProvisioningOverPVCs(config *provisionConfig) {
 			walPVC:           walSource,
 			resources:        volume.Resources,
 			placement:        volume.Placement,
-			preparePlacement: volume.PreparePlacement,
 			portable:         volume.Portable,
 			crushDeviceClass: volume.CrushDeviceClass,
 			schedulerName:    volume.SchedulerName,
@@ -263,15 +252,18 @@ func (c *Cluster) startProvisioningOverPVCs(config *provisionConfig) {
 
 		logger.Debugf("osdProps are %+v", osdProps)
 
+		// If the deviceSet template has "encrypted" but the Ceph version is not compatible
 		if osdProps.encrypted {
-			// If the deviceSet template has "encrypted" but the Ceph version is not compatible
 			if !c.isCephVolumeRawModeSupported() {
 				errMsg := fmt.Sprintf("failed to validate storageClassDeviceSet %q. min required ceph version to support encryption is %q or %q", volume.Name, cephVolumeRawEncryptionModeMinNautilusCephVersion.String(), cephVolumeRawEncryptionModeMinOctopusCephVersion.String())
 				config.addError(errMsg)
 				continue
 			}
+		}
 
-			// create encryption Kubernetes Secret if the PVC is encrypted
+		// create encryption Kubernetes Secret if the PVC is encrypted
+		if osdProps.encrypted {
+			// Generate dmcrypt key
 			key, err := generateDmCryptKey()
 			if err != nil {
 				errMsg := fmt.Sprintf("failed to generate dmcrypt key for osd claim %q. %v", osdProps.pvc.ClaimName, err)
@@ -723,7 +715,6 @@ func (c *Cluster) getOSDPropsForPVC(pvcName string) (osdProperties, error) {
 				walPVC:              walSource,
 				resources:           volumeSource.Resources,
 				placement:           volumeSource.Placement,
-				preparePlacement:    volumeSource.PreparePlacement,
 				portable:            volumeSource.Portable,
 				tuneSlowDeviceClass: volumeSource.TuneSlowDeviceClass,
 				pvcSize:             volumeSource.Size,
diff --git a/pkg/operator/ceph/cluster/osd/provision_spec.go b/pkg/operator/ceph/cluster/osd/provision_spec.go
index 2b76e07c6..01d0138dd 100644
--- a/pkg/operator/ceph/cluster/osd/provision_spec.go
+++ b/pkg/operator/ceph/cluster/osd/provision_spec.go
@@ -72,22 +72,9 @@ func (c *Cluster) makeJob(osdProps osdProperties, provisionConfig *provisionConf
 	k8sutil.AddRookVersionLabelToJob(job)
 	controller.AddCephVersionLabelToJob(c.clusterInfo.CephVersion, job)
 	k8sutil.SetOwnerRef(&job.ObjectMeta, &c.clusterInfo.OwnerRef)
-
-	// override the resources of all the init containers and main container with the expected osd prepare resources
-	c.applyResourcesToAllContainers(&podSpec.Spec, cephv1.GetPrepareOSDResources(c.spec.Resources))
 	return job, nil
 }
 
-// applyResourcesToAllContainers applies consistent resource requests for all containers and all init containers in the pod
-func (c *Cluster) applyResourcesToAllContainers(spec *v1.PodSpec, resources v1.ResourceRequirements) {
-	for i := range spec.InitContainers {
-		spec.InitContainers[i].Resources = resources
-	}
-	for i := range spec.Containers {
-		spec.Containers[i].Resources = resources
-	}
-}
-
 func (c *Cluster) provisionPodTemplateSpec(osdProps osdProperties, restart v1.RestartPolicy, provisionConfig *provisionConfig) (*v1.PodTemplateSpec, error) {
 	copyBinariesVolume, copyBinariesContainer := c.getCopyBinariesContainer()
 
@@ -141,7 +128,7 @@ func (c *Cluster) provisionPodTemplateSpec(osdProps osdProperties, restart v1.Re
 	if !osdProps.onPVC() {
 		cephv1.GetOSDPlacement(c.spec.Placement).ApplyToPodSpec(&podSpec)
 	} else {
-		osdProps.getPreparePlacement().ApplyToPodSpec(&podSpec)
+		osdProps.placement.ApplyToPodSpec(&podSpec)
 	}
 
 	podMeta := metav1.ObjectMeta{
diff --git a/pkg/operator/ceph/cluster/osd/spec.go b/pkg/operator/ceph/cluster/osd/spec.go
index 56110913a..647820ced 100644
--- a/pkg/operator/ceph/cluster/osd/spec.go
+++ b/pkg/operator/ceph/cluster/osd/spec.go
@@ -50,8 +50,6 @@ const (
 	blockPVCWalMapperInitContainer                = "blkdevmapper-wal"
 	activatePVCOSDInitContainer                   = "activate"
 	expandPVCOSDInitContainer                     = "expand-bluefs"
-	expandEncryptedPVCOSDInitContainer            = "expand-encrypted-bluefs"
-	encryptedPVCStatusOSDInitContainer            = "encrypted-block-status"
 	encryptionKeyFileName                         = "luks_key"
 	// DmcryptBlockType is a portion of the device mapper name for the encrypted OSD on PVC block.db (rocksdb db)
 	DmcryptBlockType = "block-dmcrypt"
@@ -112,22 +110,6 @@ else
 	ceph-volume "$CV_MODE" activate "${ARGS[@]}"
 fi
 
-`
-
-	openEncryptedBlock = `
-set -xe
-
-KEY_FILE_PATH=%s
-BLOCK_PATH=%s
-DM_NAME=%s
-DM_PATH=%s
-
-if [ -b "$DM_PATH" ]; then
-	echo "Encrypted device "$BLOCK_PATH" already opened at "$DM_PATH""
-else
-  echo "Opening encrypted device "$BLOCK_PATH" at "$DM_PATH""
-  cryptsetup luksOpen --verbose --allow-discards --key-file "$KEY_FILE_PATH" "$BLOCK_PATH" "$DM_NAME"
-fi
 `
 )
 
@@ -350,14 +332,9 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd OSDInfo, provisionC
 
 	if osdProps.onPVC() && osd.CVMode == "raw" {
 		if osdProps.encrypted {
-			// Open the encrypted disk
+			// Add a new init container to open the encrypted disk!
 			initContainers = append(initContainers, c.getPVCEncryptionOpenInitContainerActivate(osdProps)...)
-			// Copy the encrypted block to the osd data location, e,g: /var/lib/ceph/osd/ceph-0/block
 			initContainers = append(initContainers, c.getPVCEncryptionInitContainerActivate(osdDataDirPath, osdProps)...)
-			// Print the encrypted block status
-			initContainers = append(initContainers, c.getEncryptedStatusPVCInitContainer(osdDataDirPath, osdProps))
-			// Resize the encrypted device if necessary, this must be done after the encrypted block is opened
-			initContainers = append(initContainers, c.getExpandEncryptedPVCInitContainer(osdDataDirPath, osdProps))
 		} else {
 			initContainers = append(initContainers, c.getPVCInitContainerActivate(osdDataDirPath, osdProps))
 			if osdProps.onPVCWithMetadata() {
@@ -368,8 +345,10 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd OSDInfo, provisionC
 			}
 		}
 		initContainers = append(initContainers, c.getActivatePVCInitContainer(osdProps, osdID))
-		initContainers = append(initContainers, c.getExpandPVCInitContainer(osdProps, osdID))
-
+		// Expansion is not supported on encrypted device
+		if !osdProps.encrypted {
+			initContainers = append(initContainers, c.getExpandPVCInitContainer(osdProps, osdID))
+		}
 	}
 	if doActivateOSDInit {
 		initContainers = append(initContainers, *activateOSDContainer)
@@ -597,12 +576,18 @@ func (c *Cluster) generateEncryptionOpenBlockContainer(resources v1.ResourceRequ
 	return v1.Container{
 		Name:  containerName,
 		Image: c.spec.CephVersion.Image,
-		// Running via bash allows us to check whether the device is already opened or not
-		// If we don't the cryptsetup command will fail saying the device is already opened
 		Command: []string{
-			"/bin/bash",
-			"-c",
-			fmt.Sprintf(openEncryptedBlock, encryptionKeyPath(), fmt.Sprintf("/%s", pvcName), encryptionDMName(pvcName, blockType), encryptionDMPath(pvcName, blockType)),
+			"cryptsetup",
+		},
+		// Runs "cryptsetup --verbose --key-file /etc/ceph/luks_key --allow-discards luksOpen /set1-data-0-7dwll set1-data-0-7dwll-block-dmcrypt"
+		Args: []string{
+			"--verbose",
+			"--key-file",
+			encryptionKeyPath(),
+			"--allow-discards",
+			"luksOpen",
+			fmt.Sprintf("/%s", pvcName),
+			encryptionDMName(pvcName, blockType),
 		},
 		VolumeDevices: []v1.VolumeDevice{
 			{
@@ -803,19 +788,9 @@ func (c *Cluster) getActivatePVCInitContainer(osdProps osdProperties, osdID stri
 }
 
 func (c *Cluster) getExpandPVCInitContainer(osdProps osdProperties, osdID string) v1.Container {
-	/* Output example from 10GiB to 20GiB:
-
-	   inferring bluefs devices from bluestore path
-	   1 : device size 0x4ffe00000 : own 0x[11ff00000~40000000] = 0x40000000 : using 0x470000(4.4 MiB) : bluestore has 0x23fdd0000(9.0 GiB) available
-	   Expanding DB/WAL...
-	   Expanding Main...
-	   1 : expanding  from 0x27fe00000 to 0x4ffe00000
-	   1 : size label updated to 21472739328
-
-	*/
 	osdDataPath := activateOSDMountPath + osdID
 
-	return v1.Container{
+	container := v1.Container{
 		Name:  expandPVCOSDInitContainer,
 		Image: c.spec.CephVersion.Image,
 		Command: []string{
@@ -826,53 +801,6 @@ func (c *Cluster) getExpandPVCInitContainer(osdProps osdProperties, osdID string
 		SecurityContext: PrivilegedContext(),
 		Resources:       osdProps.resources,
 	}
-}
-
-func (c *Cluster) getExpandEncryptedPVCInitContainer(mountPath string, osdProps osdProperties) v1.Container {
-	/* Command example
-	   [root@rook-ceph-osd-0-59b9947547-w8mdq /]# cryptsetup resize set1-data-2-8n462-block-dmcrypt
-	   Command successful.
-	*/
 
-	return v1.Container{
-		Name:  expandEncryptedPVCOSDInitContainer,
-		Image: c.spec.CephVersion.Image,
-		Command: []string{
-			"cryptsetup",
-		},
-		Args:            []string{"--verbose", "resize", encryptionDMName(osdProps.pvc.ClaimName, DmcryptBlockType)},
-		VolumeMounts:    []v1.VolumeMount{getPvcOSDBridgeMountActivate(mountPath, osdProps.pvc.ClaimName)},
-		SecurityContext: PrivilegedContext(),
-		Resources:       osdProps.resources,
-	}
-}
-
-func (c *Cluster) getEncryptedStatusPVCInitContainer(mountPath string, osdProps osdProperties) v1.Container {
-	/* Command example:
-		root@rook-ceph-osd-0-59b9947547-w8mdq /]# cryptsetup status set1-data-2-8n462-block-dmcrypt -v
-	   /dev/mapper/set1-data-2-8n462-block-dmcrypt is active and is in use.
-	     type:    LUKS1
-	     cipher:  aes-xts-plain64
-	     keysize: 256 bits
-	     key location: dm-crypt
-	     device:  /dev/xvdbv
-	     sector size:  512
-	     offset:  4096 sectors
-	     size:    20967424 sectors
-	     mode:    read/write
-	     flags:   discards
-	   Command successful.
-	*/
-
-	return v1.Container{
-		Name:  encryptedPVCStatusOSDInitContainer,
-		Image: c.spec.CephVersion.Image,
-		Command: []string{
-			"cryptsetup",
-		},
-		Args:            []string{"--verbose", "status", encryptionDMName(osdProps.pvc.ClaimName, DmcryptBlockType)},
-		VolumeMounts:    []v1.VolumeMount{getPvcOSDBridgeMountActivate(mountPath, osdProps.pvc.ClaimName)},
-		SecurityContext: PrivilegedContext(),
-		Resources:       osdProps.resources,
-	}
+	return container
 }
diff --git a/pkg/operator/ceph/cluster/rbd/mirror.go b/pkg/operator/ceph/cluster/rbd/mirror.go
index 429b6e574..a8ddc5d7b 100644
--- a/pkg/operator/ceph/cluster/rbd/mirror.go
+++ b/pkg/operator/ceph/cluster/rbd/mirror.go
@@ -45,7 +45,7 @@ var updateDeploymentAndWait = mon.UpdateCephDeploymentAndWait
 // Start begins the process of running rbd mirroring daemons.
 func (r *ReconcileCephRBDMirror) start(cephRBDMirror *cephv1.CephRBDMirror) error {
 	// Validate pod's memory if specified
-	err := controller.CheckPodMemory(cephv1.ResourcesKeyRBDMirror, cephRBDMirror.Spec.Resources, cephRbdMirrorPodMinimumMemory)
+	err := controller.CheckPodMemory(cephRBDMirror.Spec.Resources, cephRbdMirrorPodMinimumMemory)
 	if err != nil {
 		return errors.Wrap(err, "error checking pod memory")
 	}
diff --git a/pkg/operator/ceph/controller/spec.go b/pkg/operator/ceph/controller/spec.go
index 2a071c6d4..e48f0d3a1 100644
--- a/pkg/operator/ceph/controller/spec.go
+++ b/pkg/operator/ceph/controller/spec.go
@@ -324,10 +324,11 @@ func CephDaemonAppLabels(appName, namespace, daemonType, daemonID string, includ
 }
 
 // CheckPodMemory verify pod's memory limit is valid
-func CheckPodMemory(name string, resources v1.ResourceRequirements, cephPodMinimumMemory uint64) error {
+func CheckPodMemory(resources v1.ResourceRequirements, cephPodMinimumMemory uint64) error {
 	// Ceph related PR: https://github.com/ceph/ceph/pull/26856
 	podMemoryLimit := resources.Limits.Memory()
 	podMemoryRequest := resources.Requests.Memory()
+	errorMessage := `refuse to run the pod with %dmb of ram, provide at least %dmb.`
 
 	// If nothing was provided let's just return
 	// This means no restrictions on pod's resources
@@ -338,8 +339,7 @@ func CheckPodMemory(name string, resources v1.ResourceRequirements, cephPodMinim
 	if !podMemoryLimit.IsZero() {
 		// This means LIMIT and REQUEST are either identical or different but still we use LIMIT as a reference
 		if uint64(podMemoryLimit.Value()) < display.MbTob(cephPodMinimumMemory) {
-			// allow the configuration if less than the min, but print a warning
-			logger.Warningf("running the %q daemon(s) with %dmb of ram, but at least %dmb is recommended", name, display.BToMb(uint64(podMemoryLimit.Value())), cephPodMinimumMemory)
+			return errors.Errorf(errorMessage, display.BToMb(uint64(podMemoryLimit.Value())), cephPodMinimumMemory)
 		}
 
 		// This means LIMIT < REQUEST
diff --git a/pkg/operator/ceph/csi/csi.go b/pkg/operator/ceph/csi/csi.go
index b65e9fe5a..b0a58cd3d 100644
--- a/pkg/operator/ceph/csi/csi.go
+++ b/pkg/operator/ceph/csi/csi.go
@@ -20,7 +20,6 @@ import (
 	"strconv"
 
 	"github.com/pkg/errors"
-	rookclient "github.com/rook/rook/pkg/client/clientset/versioned"
 	controllerutil "github.com/rook/rook/pkg/operator/ceph/controller"
 	"github.com/rook/rook/pkg/operator/k8sutil"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -28,7 +27,7 @@ import (
 	"k8s.io/client-go/kubernetes"
 )
 
-func ValidateAndConfigureDrivers(clientset kubernetes.Interface, rookclientset rookclient.Interface, namespace, rookImage, securityAccount string, serverVersion *version.Info, ownerRef *metav1.OwnerReference) {
+func ValidateAndConfigureDrivers(clientset kubernetes.Interface, namespace, rookImage, securityAccount string, serverVersion *version.Info, ownerRef *metav1.OwnerReference) {
 	if !AllowUnsupported {
 		if err := validateCSIVersion(clientset, namespace, rookImage, securityAccount, ownerRef); err != nil {
 			logger.Errorf("invalid csi version. %+v", err)
@@ -38,7 +37,7 @@ func ValidateAndConfigureDrivers(clientset kubernetes.Interface, rookclientset r
 		logger.Info("Skipping csi version check, since unsupported versions are allowed")
 	}
 
-	if err := startDrivers(clientset, rookclientset, namespace, serverVersion, ownerRef); err != nil {
+	if err := startDrivers(clientset, namespace, serverVersion, ownerRef); err != nil {
 		logger.Errorf("failed to start Ceph csi drivers. %v", err)
 		return
 	}
diff --git a/pkg/operator/ceph/csi/spec.go b/pkg/operator/ceph/csi/spec.go
index 5b5a33327..000a875bc 100644
--- a/pkg/operator/ceph/csi/spec.go
+++ b/pkg/operator/ceph/csi/spec.go
@@ -22,7 +22,6 @@ import (
 	"strings"
 	"time"
 
-	rookclient "github.com/rook/rook/pkg/client/clientset/versioned"
 	controllerutil "github.com/rook/rook/pkg/operator/ceph/controller"
 	"github.com/rook/rook/pkg/operator/k8sutil"
 	"github.com/rook/rook/pkg/operator/k8sutil/cmdreporter"
@@ -199,7 +198,7 @@ func ValidateCSIParam() error {
 	return nil
 }
 
-func startDrivers(clientset kubernetes.Interface, rookclientset rookclient.Interface, namespace string, ver *version.Info, ownerRef *metav1.OwnerReference) error {
+func startDrivers(clientset kubernetes.Interface, namespace string, ver *version.Info, ownerRef *metav1.OwnerReference) error {
 	var (
 		err                                                   error
 		rbdPlugin, cephfsPlugin                               *apps.DaemonSet
@@ -362,13 +361,6 @@ func startDrivers(clientset kubernetes.Interface, rookclientset rookclient.Inter
 		// apply resource request and limit to rbdplugin containers
 		applyResourcesToContainers(clientset, rbdPluginResource, &rbdPlugin.Spec.Template.Spec)
 		k8sutil.SetOwnerRef(&rbdPlugin.ObjectMeta, ownerRef)
-		multusApplied, err := applyCephClusterNetworkConfig(&rbdPlugin.Spec.Template.ObjectMeta, rookclientset)
-		if err != nil {
-			return errors.Wrapf(err, "failed to apply network config to rbd plugin daemonset: %+v", rbdPlugin)
-		}
-		if multusApplied {
-			rbdPlugin.Spec.Template.Spec.HostNetwork = false
-		}
 		err = k8sutil.CreateDaemonSet(csiRBDPlugin, namespace, clientset, rbdPlugin)
 		if err != nil {
 			return errors.Wrapf(err, "failed to start rbdplugin daemonset: %+v", rbdPlugin)
@@ -387,10 +379,6 @@ func startDrivers(clientset kubernetes.Interface, rookclientset rookclient.Inter
 			Type: apps.RecreateDeploymentStrategyType,
 		}
 
-		_, err = applyCephClusterNetworkConfig(&rbdProvisionerDeployment.Spec.Template.ObjectMeta, rookclientset)
-		if err != nil {
-			return errors.Wrapf(err, "failed to apply network config to rbd plugin provisioner deployment: %+v", rbdProvisionerDeployment)
-		}
 		err = k8sutil.CreateDeployment(clientset, csiRBDProvisioner, namespace, rbdProvisionerDeployment)
 		if err != nil {
 			return errors.Wrapf(err, "failed to start rbd provisioner deployment: %+v", rbdProvisionerDeployment)
@@ -411,13 +399,6 @@ func startDrivers(clientset kubernetes.Interface, rookclientset rookclient.Inter
 		// apply resource request and limit to cephfs plugin containers
 		applyResourcesToContainers(clientset, cephFSPluginResource, &cephfsPlugin.Spec.Template.Spec)
 		k8sutil.SetOwnerRef(&cephfsPlugin.ObjectMeta, ownerRef)
-		multusApplied, err := applyCephClusterNetworkConfig(&cephfsPlugin.Spec.Template.ObjectMeta, rookclientset)
-		if err != nil {
-			return errors.Wrapf(err, "failed to apply network config to cephfs plugin daemonset: %+v", cephfsPlugin)
-		}
-		if multusApplied {
-			cephfsPlugin.Spec.Template.Spec.HostNetwork = false
-		}
 		err = k8sutil.CreateDaemonSet(csiCephFSPlugin, namespace, clientset, cephfsPlugin)
 		if err != nil {
 			return errors.Wrapf(err, "failed to start cephfs plugin daemonset: %+v", cephfsPlugin)
@@ -436,11 +417,6 @@ func startDrivers(clientset kubernetes.Interface, rookclientset rookclient.Inter
 		cephfsProvisionerDeployment.Spec.Strategy = apps.DeploymentStrategy{
 			Type: apps.RecreateDeploymentStrategyType,
 		}
-
-		_, err = applyCephClusterNetworkConfig(&cephfsProvisionerDeployment.Spec.Template.ObjectMeta, rookclientset)
-		if err != nil {
-			return errors.Wrapf(err, "failed to apply network config to cephfs plugin provisioner deployment: %+v", cephfsProvisionerDeployment)
-		}
 		err = k8sutil.CreateDeployment(clientset, csiCephFSProvisioner, namespace, cephfsProvisionerDeployment)
 		if err != nil {
 			return errors.Wrapf(err, "failed to start cephfs provisioner deployment: %+v", cephfsProvisionerDeployment)
@@ -522,23 +498,6 @@ func deleteCSIDriverResources(
 	return succeeded
 }
 
-func applyCephClusterNetworkConfig(objectMeta *metav1.ObjectMeta, rookclientset rookclient.Interface) (bool, error) {
-	cephClusters, err := rookclientset.CephV1().CephClusters(objectMeta.Namespace).List(metav1.ListOptions{})
-	if err != nil {
-		return false, errors.Errorf("failed to find CephClusters in namespace %q", objectMeta.Namespace)
-	}
-	for _, cephCluster := range cephClusters.Items {
-		if cephCluster.Spec.Network.IsMultus() {
-			err = k8sutil.ApplyMultus(cephCluster.Spec.Network.NetworkSpec, objectMeta)
-			if err != nil {
-				return false, errors.Wrapf(err, "failed to apply multus configuration to CephCluster %q", cephCluster.Name)
-			}
-		}
-	}
-
-	return true, nil
-}
-
 // createCSIDriverInfo Registers CSI driver by creating a CSIDriver object
 func createCSIDriverInfo(clientset kubernetes.Interface, name string, ownerRef *metav1.OwnerReference) error {
 	attach := true
diff --git a/pkg/operator/ceph/file/mds/mds.go b/pkg/operator/ceph/file/mds/mds.go
index 746b13b4c..21f8eb7ee 100644
--- a/pkg/operator/ceph/file/mds/mds.go
+++ b/pkg/operator/ceph/file/mds/mds.go
@@ -102,7 +102,7 @@ var UpdateDeploymentAndWait = mon.UpdateCephDeploymentAndWait
 // Start starts or updates a Ceph mds cluster in Kubernetes.
 func (c *Cluster) Start() error {
 	// Validate pod's memory if specified
-	err := controller.CheckPodMemory(cephv1.ResourcesKeyMDS, c.fs.Spec.MetadataServer.Resources, cephMdsPodMinimumMemory)
+	err := controller.CheckPodMemory(c.fs.Spec.MetadataServer.Resources, cephMdsPodMinimumMemory)
 	if err != nil {
 		return errors.Wrap(err, "error checking pod memory")
 	}
diff --git a/pkg/operator/ceph/object/bucket/provisioner.go b/pkg/operator/ceph/object/bucket/provisioner.go
index 05b260203..37fb796bc 100644
--- a/pkg/operator/ceph/object/bucket/provisioner.go
+++ b/pkg/operator/ceph/object/bucket/provisioner.go
@@ -311,7 +311,7 @@ func (p Provisioner) Revoke(ob *bktv1alpha1.ObjectBucket) error {
 // initializeCreateOrGrant sets common provisioner receiver fields and
 // the services and sessions needed to provision.
 func (p *Provisioner) initializeCreateOrGrant(options *apibkt.BucketOptions) error {
-	logger.Infof("initializing and setting CreateOrGrant services")
+	logger.Info("initializing and setting CreateOrGrant services")
 
 	// set the bucket name
 	obc := options.ObjectBucketClaim
diff --git a/pkg/operator/ceph/object/health.go b/pkg/operator/ceph/object/health.go
index 02207e942..5f702b3dc 100644
--- a/pkg/operator/ceph/object/health.go
+++ b/pkg/operator/ceph/object/health.go
@@ -168,7 +168,7 @@ func (c *bucketChecker) checkObjectStoreHealth() error {
 		return errors.Wrapf(err, "failed to run bucket health checks for object store %q", c.namespacedName.Name)
 	}
 
-	logger.Debug("successfully checked object store endpoint for object store %q", c.namespacedName.Name)
+	logger.Debugf("successfully checked object store endpoint for object store %q", c.namespacedName.Name)
 
 	// Update the EndpointStatus in the CR to reflect the healthyness
 	updateStatusBucket(c.client, c.namespacedName, cephv1.ConditionConnected, "")
diff --git a/pkg/operator/ceph/object/objectstore.go b/pkg/operator/ceph/object/objectstore.go
index ae6b23618..4bd89fddd 100644
--- a/pkg/operator/ceph/object/objectstore.go
+++ b/pkg/operator/ceph/object/objectstore.go
@@ -699,7 +699,7 @@ func GetObjectBucketProvisioner(c *clusterd.Context, namespace string) string {
 	provName := bucketProvisionerName
 	obcWatchOnNamespace, err := k8sutil.GetOperatorSetting(c.Clientset, opcontroller.OperatorSettingConfigMapName, "ROOK_OBC_WATCH_OPERATOR_NAMESPACE", "false")
 	if err != nil {
-		logger.Warningf("failed to verify if obc should watch the operator namespace or all of them, watching all")
+		logger.Warning("failed to verify if obc should watch the operator namespace or all of them, watching all")
 	} else {
 		if strings.EqualFold(obcWatchOnNamespace, "true") {
 			provName = fmt.Sprintf("%s.%s", namespace, bucketProvisionerName)
diff --git a/pkg/operator/ceph/object/rgw.go b/pkg/operator/ceph/object/rgw.go
index 12f41de99..dd0764031 100644
--- a/pkg/operator/ceph/object/rgw.go
+++ b/pkg/operator/ceph/object/rgw.go
@@ -91,7 +91,7 @@ func (c *clusterConfig) startRGWPods(realmName, zoneGroupName, zoneName string)
 	}
 	if c.store.Spec.Gateway.Instances < 1 {
 		// Set the minimum of at least one instance
-		logger.Warningf("spec.gateway.instances must be set to at least 1")
+		logger.Warning("spec.gateway.instances must be set to at least 1")
 		c.store.Spec.Gateway.Instances = 1
 	}
 
@@ -182,7 +182,7 @@ func (c *clusterConfig) startRGWPods(realmName, zoneGroupName, zoneName string)
 	// scale down scenario
 	deps, err := k8sutil.GetDeployments(c.context.Clientset, c.store.Namespace, c.storeLabelSelector())
 	if err != nil {
-		logger.Warning("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
+		logger.Warningf("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
 	}
 
 	currentRgwInstances := int(len(deps.Items))
@@ -213,7 +213,7 @@ func (c *clusterConfig) startRGWPods(realmName, zoneGroupName, zoneName string)
 		// verify scale down was successful
 		deps, err = k8sutil.GetDeployments(c.context.Clientset, c.store.Namespace, c.storeLabelSelector())
 		if err != nil {
-			logger.Warning("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
+			logger.Warningf("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
 		}
 		currentRgwInstances = len(deps.Items)
 		if currentRgwInstances == desiredRgwInstances {
@@ -251,7 +251,7 @@ func (c *clusterConfig) deleteLegacyDaemons() {
 	logger.Debugf("looking for legacy deployment in object store %q", c.store.Name)
 	deps, err := k8sutil.GetDeployments(c.context.Clientset, c.store.Namespace, c.storeLabelSelector())
 	if err != nil {
-		logger.Warning("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
+		logger.Warningf("could not get deployments for object store %q (matching label selector %q). %v", c.store.Name, c.storeLabelSelector(), err)
 	}
 	for _, d := range deps.Items {
 		if d.Name == instanceName(c.store.Name) {
diff --git a/pkg/operator/ceph/operator.go b/pkg/operator/ceph/operator.go
index 5b21fbb3c..0cbe566b5 100644
--- a/pkg/operator/ceph/operator.go
+++ b/pkg/operator/ceph/operator.go
@@ -251,7 +251,7 @@ func (o *Operator) updateDrivers() error {
 		return errors.Wrap(err, "invalid csi params")
 	}
 
-	go csi.ValidateAndConfigureDrivers(o.context.Clientset, o.context.RookClientset, o.operatorNamespace, o.rookImage, o.securityAccount, serverVersion, ownerRef)
+	go csi.ValidateAndConfigureDrivers(o.context.Clientset, o.operatorNamespace, o.rookImage, o.securityAccount, serverVersion, ownerRef)
 	return nil
 }
 
diff --git a/pkg/operator/k8sutil/network.go b/pkg/operator/k8sutil/network.go
index ba6584419..0eb62860b 100644
--- a/pkg/operator/k8sutil/network.go
+++ b/pkg/operator/k8sutil/network.go
@@ -26,11 +26,6 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
-const (
-	// publicNetworkSelectorKeyName is the network selector key for the ceph public network
-	publicNetworkSelectorKeyName = "public"
-)
-
 // NetworkAttachmentConfig represents the configuration of the NetworkAttachmentDefinitions object
 type NetworkAttachmentConfig struct {
 	CniVersion string `json:"cniVersion"`
@@ -115,7 +110,7 @@ func ApplyMultus(net rookv1.NetworkSpec, objectMeta *metav1.ObjectMeta) error {
 	shortSyntax := false
 	jsonSyntax := false
 
-	for k, ns := range net.Selectors {
+	for _, ns := range net.Selectors {
 		var multusMap map[string]string
 		err := json.Unmarshal([]byte(ns), &multusMap)
 
@@ -125,14 +120,7 @@ func ApplyMultus(net rookv1.NetworkSpec, objectMeta *metav1.ObjectMeta) error {
 			shortSyntax = true
 		}
 
-		isCsi := strings.Contains(objectMeta.Labels["app"], "csi-")
-		if isCsi {
-			if k == publicNetworkSelectorKeyName {
-				v = append(v, string(ns))
-			}
-		} else {
-			v = append(v, string(ns))
-		}
+		v = append(v, string(ns))
 	}
 
 	if shortSyntax && jsonSyntax {


Test patch:
diff --git a/pkg/operator/ceph/cluster/mon/node_test.go b/pkg/operator/ceph/cluster/mon/node_test.go
index eb031885e..6ae072080 100644
--- a/pkg/operator/ceph/cluster/mon/node_test.go
+++ b/pkg/operator/ceph/cluster/mon/node_test.go
@@ -74,7 +74,7 @@ func TestNodeAffinity(t *testing.T) {
 func TestHostNetworkSameNode(t *testing.T) {
 	namespace := "ns"
 	context, err := newTestStartCluster(t, namespace)
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 	// cluster host networking
 	c := newCluster(context, namespace, true, v1.ResourceRequirements{})
 	c.spec.Network.HostNetwork = true
@@ -88,7 +88,7 @@ func TestHostNetworkSameNode(t *testing.T) {
 func TestPodMemory(t *testing.T) {
 	namespace := "ns"
 	context, err := newTestStartCluster(t, namespace)
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 	// Test memory limit alone
 	r := v1.ResourceRequirements{
 		Limits: v1.ResourceList{
@@ -100,7 +100,7 @@ func TestPodMemory(t *testing.T) {
 	c.ClusterInfo = clienttest.CreateTestClusterInfo(1)
 	// start a basic cluster
 	_, err = c.Start(c.ClusterInfo, c.rookVersion, cephver.Nautilus, c.spec)
-	assert.NoError(t, err)
+	assert.Error(t, err)
 
 	// Test REQUEST == LIMIT
 	r = v1.ResourceRequirements{
@@ -116,7 +116,7 @@ func TestPodMemory(t *testing.T) {
 	c.ClusterInfo = clienttest.CreateTestClusterInfo(1)
 	// start a basic cluster
 	_, err = c.Start(c.ClusterInfo, c.rookVersion, cephver.Nautilus, c.spec)
-	assert.NoError(t, err)
+	assert.Error(t, err)
 
 	// Test LIMIT != REQUEST but obviously LIMIT > REQUEST
 	r = v1.ResourceRequirements{
@@ -132,9 +132,9 @@ func TestPodMemory(t *testing.T) {
 	c.ClusterInfo = clienttest.CreateTestClusterInfo(1)
 	// start a basic cluster
 	_, err = c.Start(c.ClusterInfo, c.rookVersion, cephver.Nautilus, c.spec)
-	assert.NoError(t, err)
+	assert.Error(t, err)
 
-	// Test valid case where pod resource is set appropriately
+	// Test valid case where pod resource is set approprietly
 	r = v1.ResourceRequirements{
 		Limits: v1.ResourceList{
 			v1.ResourceMemory: *resource.NewQuantity(1073741824, resource.BinarySI), // size in Bytes
@@ -148,7 +148,7 @@ func TestPodMemory(t *testing.T) {
 	c.ClusterInfo = clienttest.CreateTestClusterInfo(1)
 	// start a basic cluster
 	_, err = c.Start(c.ClusterInfo, c.rookVersion, cephver.Nautilus, c.spec)
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 
 	// Test no resources were specified on the pod
 	r = v1.ResourceRequirements{}
@@ -156,7 +156,7 @@ func TestPodMemory(t *testing.T) {
 	c.ClusterInfo = clienttest.CreateTestClusterInfo(1)
 	// start a basic cluster
 	_, err = c.Start(c.ClusterInfo, c.rookVersion, cephver.Nautilus, c.spec)
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 
 }
 
@@ -203,7 +203,7 @@ func extractArgValue(args []string, name string) (string, string) {
 func TestGetNodeInfoFromNode(t *testing.T) {
 	clientset := test.New(t, 1)
 	node, err := clientset.CoreV1().Nodes().Get("node0", metav1.GetOptions{})
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 	assert.NotNil(t, node)
 
 	node.Status = v1.NodeStatus{}
@@ -221,6 +221,6 @@ func TestGetNodeInfoFromNode(t *testing.T) {
 	node.Status.Addresses[0].Type = v1.NodeInternalIP
 	node.Status.Addresses[0].Address = "172.17.0.1"
 	info, err = getNodeInfoFromNode(*node)
-	assert.NoError(t, err)
+	assert.Nil(t, err)
 	assert.Equal(t, "172.17.0.1", info.Address)
 }
diff --git a/pkg/operator/ceph/cluster/osd/osd_test.go b/pkg/operator/ceph/cluster/osd/osd_test.go
index e356e2899..dcc89df6c 100644
--- a/pkg/operator/ceph/cluster/osd/osd_test.go
+++ b/pkg/operator/ceph/cluster/osd/osd_test.go
@@ -404,53 +404,3 @@ func TestGetOSDInfo(t *testing.T) {
 	assert.Equal(t, 0, len(osds3))
 	assert.NotNil(t, err)
 }
-
-func TestOSDPlacement(t *testing.T) {
-	// no placement
-	prop := osdProperties{}
-	result := prop.getPreparePlacement()
-	assert.Nil(t, result.NodeAffinity)
-
-	// the osd daemon placement is specified
-	prop.placement = rookv1.Placement{NodeAffinity: &v1.NodeAffinity{
-		RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
-			NodeSelectorTerms: []v1.NodeSelectorTerm{
-				{
-					MatchExpressions: []v1.NodeSelectorRequirement{
-						{
-							Key:      "label1",
-							Operator: v1.NodeSelectorOpIn,
-							Values:   []string{"bar", "baz"},
-						},
-					},
-				},
-			},
-		},
-	},
-	}
-
-	result = prop.getPreparePlacement()
-	assert.Equal(t, 1, len(result.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms))
-	assert.Equal(t, "label1", result.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Key)
-
-	// The prepare placement is specified and takes precedence over the osd placement
-	prop.preparePlacement = &rookv1.Placement{NodeAffinity: &v1.NodeAffinity{
-		RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
-			NodeSelectorTerms: []v1.NodeSelectorTerm{
-				{
-					MatchExpressions: []v1.NodeSelectorRequirement{
-						{
-							Key:      "label2",
-							Operator: v1.NodeSelectorOpIn,
-							Values:   []string{"foo", "bar"},
-						},
-					},
-				},
-			},
-		},
-	},
-	}
-	result = prop.getPreparePlacement()
-	assert.Equal(t, 1, len(result.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms))
-	assert.Equal(t, "label2", result.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms[0].MatchExpressions[0].Key)
-}
diff --git a/pkg/operator/ceph/cluster/osd/spec_test.go b/pkg/operator/ceph/cluster/osd/spec_test.go
index 3b261ac58..87103b578 100644
--- a/pkg/operator/ceph/cluster/osd/spec_test.go
+++ b/pkg/operator/ceph/cluster/osd/spec_test.go
@@ -205,77 +205,7 @@ func testPodDevices(t *testing.T, dataDir, deviceName string, allDevices bool) {
 	cont = deployment.Spec.Template.Spec.Containers[0]
 	assert.Equal(t, 6, len(cont.VolumeMounts), cont.VolumeMounts)
 
-	// Test with encrypted OSD on PVC with RAW
-	osdProp.encrypted = true
-	deployment, err = c.makeDeployment(osdProp, osd, dataPathMap)
-	assert.Nil(t, err)
-	assert.NotNil(t, deployment)
-	assert.Equal(t, 7, len(deployment.Spec.Template.Spec.InitContainers), deployment.Spec.Template.Spec.InitContainers[2].Name)
-	assert.Equal(t, "encryption-open", deployment.Spec.Template.Spec.InitContainers[0].Name)
-	assert.Equal(t, "blkdevmapper-encryption", deployment.Spec.Template.Spec.InitContainers[1].Name)
-	assert.Equal(t, "encrypted-block-status", deployment.Spec.Template.Spec.InitContainers[2].Name)
-	assert.Equal(t, "expand-encrypted-bluefs", deployment.Spec.Template.Spec.InitContainers[3].Name)
-	assert.Equal(t, "activate", deployment.Spec.Template.Spec.InitContainers[4].Name)
-	assert.Equal(t, "expand-bluefs", deployment.Spec.Template.Spec.InitContainers[5].Name)
-	assert.Equal(t, "chown-container-data-dir", deployment.Spec.Template.Spec.InitContainers[6].Name)
-	assert.Equal(t, 1, len(deployment.Spec.Template.Spec.Containers))
-	cont = deployment.Spec.Template.Spec.Containers[0]
-	assert.Equal(t, 7, len(cont.VolumeMounts), cont.VolumeMounts)
-	osdProp.encrypted = false
-
-	// // Test OSD on PVC with RAW and metadata device
-	osd = OSDInfo{
-		ID:     0,
-		CVMode: "raw",
-	}
-	osdProp.metadataPVC = v1.PersistentVolumeClaimVolumeSource{ClaimName: "mypvc-metadata"}
-	deployment, err = c.makeDeployment(osdProp, osd, dataPathMap)
-	assert.Nil(t, err)
-	assert.NotNil(t, deployment)
-	assert.Equal(t, 5, len(deployment.Spec.Template.Spec.InitContainers))
-	assert.Equal(t, "blkdevmapper", deployment.Spec.Template.Spec.InitContainers[0].Name)
-	assert.Equal(t, "blkdevmapper-metadata", deployment.Spec.Template.Spec.InitContainers[1].Name)
-	assert.Equal(t, "activate", deployment.Spec.Template.Spec.InitContainers[2].Name)
-	assert.Equal(t, "expand-bluefs", deployment.Spec.Template.Spec.InitContainers[3].Name)
-	assert.Equal(t, "chown-container-data-dir", deployment.Spec.Template.Spec.InitContainers[4].Name)
-	assert.Equal(t, 1, len(deployment.Spec.Template.Spec.Containers))
-	cont = deployment.Spec.Template.Spec.Containers[0]
-	assert.Equal(t, 6, len(cont.VolumeMounts), cont.VolumeMounts)
-	blkInitCont = deployment.Spec.Template.Spec.InitContainers[1]
-	assert.Equal(t, 1, len(blkInitCont.VolumeDevices))
-	blkMetaInitCont := deployment.Spec.Template.Spec.InitContainers[2]
-	assert.Equal(t, 1, len(blkMetaInitCont.VolumeDevices))
-
-	// // Test encrypted OSD on PVC with RAW and metadata device
-	osd = OSDInfo{
-		ID:     0,
-		CVMode: "raw",
-	}
-	osdProp.encrypted = true
-	osdProp.metadataPVC = v1.PersistentVolumeClaimVolumeSource{ClaimName: "mypvc-metadata"}
-	deployment, err = c.makeDeployment(osdProp, osd, dataPathMap)
-	assert.Nil(t, err)
-	assert.NotNil(t, deployment)
-	assert.Equal(t, 9, len(deployment.Spec.Template.Spec.InitContainers))
-	assert.Equal(t, "encryption-open", deployment.Spec.Template.Spec.InitContainers[0].Name)
-	assert.Equal(t, "encryption-open-metadata", deployment.Spec.Template.Spec.InitContainers[1].Name)
-	assert.Equal(t, "blkdevmapper-encryption", deployment.Spec.Template.Spec.InitContainers[2].Name)
-	assert.Equal(t, "blkdevmapper-metadata-encryption", deployment.Spec.Template.Spec.InitContainers[3].Name)
-	assert.Equal(t, "encrypted-block-status", deployment.Spec.Template.Spec.InitContainers[4].Name)
-	assert.Equal(t, "expand-encrypted-bluefs", deployment.Spec.Template.Spec.InitContainers[5].Name)
-	assert.Equal(t, "activate", deployment.Spec.Template.Spec.InitContainers[6].Name)
-	assert.Equal(t, "expand-bluefs", deployment.Spec.Template.Spec.InitContainers[7].Name)
-	assert.Equal(t, "chown-container-data-dir", deployment.Spec.Template.Spec.InitContainers[8].Name)
-	assert.Equal(t, 1, len(deployment.Spec.Template.Spec.Containers))
-	cont = deployment.Spec.Template.Spec.Containers[0]
-	assert.Equal(t, 7, len(cont.VolumeMounts), cont.VolumeMounts)
-	blkInitCont = deployment.Spec.Template.Spec.InitContainers[1]
-	assert.Equal(t, 1, len(blkInitCont.VolumeDevices))
-	blkMetaInitCont = deployment.Spec.Template.Spec.InitContainers[6]
-	assert.Equal(t, 1, len(blkMetaInitCont.VolumeDevices))
-	osdProp.encrypted = false
-
-	// // Test OSD on PVC with RAW / metadata and wal device
+	// Test OSD on PVC with RAW and metadata device
 	osd = OSDInfo{
 		ID:     0,
 		CVMode: "raw",
@@ -297,38 +227,7 @@ func testPodDevices(t *testing.T, dataDir, deviceName string, allDevices bool) {
 	assert.Equal(t, 6, len(cont.VolumeMounts), cont.VolumeMounts)
 	blkInitCont = deployment.Spec.Template.Spec.InitContainers[1]
 	assert.Equal(t, 1, len(blkInitCont.VolumeDevices))
-	blkMetaInitCont = deployment.Spec.Template.Spec.InitContainers[2]
-	assert.Equal(t, 1, len(blkMetaInitCont.VolumeDevices))
-
-	// // Test encrypted OSD on PVC with RAW / metadata and wal device
-	osd = OSDInfo{
-		ID:     0,
-		CVMode: "raw",
-	}
-	osdProp.encrypted = true
-	osdProp.metadataPVC = v1.PersistentVolumeClaimVolumeSource{ClaimName: "mypvc-metadata"}
-	osdProp.walPVC = v1.PersistentVolumeClaimVolumeSource{ClaimName: "mypvc-wal"}
-	deployment, err = c.makeDeployment(osdProp, osd, dataPathMap)
-	assert.Nil(t, err)
-	assert.NotNil(t, deployment)
-	assert.Equal(t, 11, len(deployment.Spec.Template.Spec.InitContainers))
-	assert.Equal(t, "encryption-open", deployment.Spec.Template.Spec.InitContainers[0].Name)
-	assert.Equal(t, "encryption-open-metadata", deployment.Spec.Template.Spec.InitContainers[1].Name)
-	assert.Equal(t, "encryption-open-wal", deployment.Spec.Template.Spec.InitContainers[2].Name)
-	assert.Equal(t, "blkdevmapper-encryption", deployment.Spec.Template.Spec.InitContainers[3].Name)
-	assert.Equal(t, "blkdevmapper-metadata-encryption", deployment.Spec.Template.Spec.InitContainers[4].Name)
-	assert.Equal(t, "blkdevmapper-wal-encryption", deployment.Spec.Template.Spec.InitContainers[5].Name)
-	assert.Equal(t, "encrypted-block-status", deployment.Spec.Template.Spec.InitContainers[6].Name)
-	assert.Equal(t, "expand-encrypted-bluefs", deployment.Spec.Template.Spec.InitContainers[7].Name)
-	assert.Equal(t, "activate", deployment.Spec.Template.Spec.InitContainers[8].Name)
-	assert.Equal(t, "expand-bluefs", deployment.Spec.Template.Spec.InitContainers[9].Name)
-	assert.Equal(t, "chown-container-data-dir", deployment.Spec.Template.Spec.InitContainers[10].Name)
-	assert.Equal(t, 1, len(deployment.Spec.Template.Spec.Containers))
-	cont = deployment.Spec.Template.Spec.Containers[0]
-	assert.Equal(t, 7, len(cont.VolumeMounts), cont.VolumeMounts)
-	blkInitCont = deployment.Spec.Template.Spec.InitContainers[1]
-	assert.Equal(t, 1, len(blkInitCont.VolumeDevices))
-	blkMetaInitCont = deployment.Spec.Template.Spec.InitContainers[8]
+	blkMetaInitCont := deployment.Spec.Template.Spec.InitContainers[2]
 	assert.Equal(t, 1, len(blkMetaInitCont.VolumeDevices))
 }
 
diff --git a/pkg/operator/ceph/controller/spec_test.go b/pkg/operator/ceph/controller/spec_test.go
index 6d637c05b..153777181 100644
--- a/pkg/operator/ceph/controller/spec_test.go
+++ b/pkg/operator/ceph/controller/spec_test.go
@@ -66,7 +66,6 @@ func TestMountsMatchVolumes(t *testing.T) {
 func TestCheckPodMemory(t *testing.T) {
 	// This value is in MB
 	const PodMinimumMemory uint64 = 1024
-	name := "test"
 
 	// A value for the memory used in the tests
 	var memory_value = int64(PodMinimumMemory * 8 * uint64(math.Pow10(6)))
@@ -74,7 +73,7 @@ func TestCheckPodMemory(t *testing.T) {
 	// Case 1: No memory limits, no memory requested
 	test_resource := v1.ResourceRequirements{}
 
-	if err := CheckPodMemory(name, test_resource, PodMinimumMemory); err != nil {
+	if err := CheckPodMemory(test_resource, PodMinimumMemory); err != nil {
 		t.Errorf("Error case 1: %s", err.Error())
 	}
 
@@ -88,7 +87,7 @@ func TestCheckPodMemory(t *testing.T) {
 		},
 	}
 
-	if err := CheckPodMemory(name, test_resource, PodMinimumMemory); err != nil {
+	if err := CheckPodMemory(test_resource, PodMinimumMemory); err != nil {
 		t.Errorf("Error case 2: %s", err.Error())
 	}
 
@@ -99,7 +98,7 @@ func TestCheckPodMemory(t *testing.T) {
 		},
 	}
 
-	if err := CheckPodMemory(name, test_resource, PodMinimumMemory); err != nil {
+	if err := CheckPodMemory(test_resource, PodMinimumMemory); err != nil {
 		t.Errorf("Error case 3: %s", err.Error())
 	}
 }
diff --git a/pkg/operator/ceph/csi/spec_test.go b/pkg/operator/ceph/csi/spec_test.go
index 491386f06..7d389c30d 100644
--- a/pkg/operator/ceph/csi/spec_test.go
+++ b/pkg/operator/ceph/csi/spec_test.go
@@ -19,7 +19,6 @@ package csi
 import (
 	"testing"
 
-	rookclient "github.com/rook/rook/pkg/client/clientset/versioned"
 	"github.com/rook/rook/pkg/operator/test"
 
 	"github.com/stretchr/testify/assert"
@@ -39,11 +38,10 @@ func TestStartCSI(t *testing.T) {
 		SnapshotterImage: "image",
 	}
 	clientset := test.New(t, 3)
-	var rookclientset rookclient.Interface
 	serverVersion, err := clientset.Discovery().ServerVersion()
 	if err != nil {
 		assert.Nil(t, err)
 	}
-	err = startDrivers(clientset, rookclientset, "ns", serverVersion, nil)
+	err = startDrivers(clientset, "ns", serverVersion, nil)
 	assert.Nil(t, err)
 }
diff --git a/tests/integration/ceph_smoke_test.go b/tests/integration/ceph_smoke_test.go
index 22d548c33..85ddfbfbf 100644
--- a/tests/integration/ceph_smoke_test.go
+++ b/tests/integration/ceph_smoke_test.go
@@ -88,7 +88,7 @@ func (suite *SmokeSuite) SetupSuite() {
 		usePVC:                  false,
 		mons:                    3,
 		rbdMirrorWorkers:        1,
-		rookCephCleanup:         true,
+		rookCephCleanup:         false,
 		skipOSDCreation:         false,
 		minimalMatrixK8sVersion: smokeSuiteMinimalTestVersion,
 		rookVersion:             installer.VersionMaster,
@@ -302,9 +302,6 @@ func (suite *SmokeSuite) TestCreateRBDMirrorClient() {
 
 	err := suite.helper.RBDMirrorClient.Create(suite.namespace, rbdMirrorName, 1)
 	require.Nil(suite.T(), err)
-
-	err = suite.helper.RBDMirrorClient.Delete(suite.namespace, rbdMirrorName)
-	require.Nil(suite.T(), err)
 }
 
 func (suite *SmokeSuite) getNonCanaryMonDeployments() ([]appsv1.Deployment, error) {