diff --git a/inventory/sample/group_vars/k8s_cluster/addons.yml b/inventory/sample/group_vars/k8s_cluster/addons.yml
index 4d875e175d3327ba701237d39befffdf37199297..dd3fb83ba4963c58c02c5d6d2a0f707188d68ff8 100644
--- a/inventory/sample/group_vars/k8s_cluster/addons.yml
+++ b/inventory/sample/group_vars/k8s_cluster/addons.yml
@@ -57,6 +57,8 @@ local_volume_provisioner_enabled: false
 # currently, setting cinder_csi_enabled=true would automatically enable the snapshot controller
 # Longhorn is an extenal CSI that would also require setting this to true but it is not included in kubespray
 # csi_snapshot_controller_enabled: false
+# csi snapshot namespace
+# snapshot_controller_namespace: kube-system
 
 # CephFS provisioner deployment
 cephfs_provisioner_enabled: false
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/defaults/main.yml b/roles/kubernetes-apps/snapshots/snapshot-controller/defaults/main.yml
index 9c757fb60ccfd9d1a57cab0552ae097392a67209..c72dfb2441e1168555242011f520c8e7a62b7d5d 100644
--- a/roles/kubernetes-apps/snapshots/snapshot-controller/defaults/main.yml
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/defaults/main.yml
@@ -1,2 +1,3 @@
 ---
 snapshot_controller_replicas: 1
+snapshot_controller_namespace: kube-system
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml b/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
index c76eec6a266e0440230e202b51a12f604c1285ed..9b25c721eb3cc4b5fa759a836d1914ac41b8364f 100644
--- a/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
@@ -5,6 +5,7 @@
     dest: "{{ kube_config_dir }}/{{ item.file }}"
     mode: 0644
   with_items:
+    - {name: snapshot-ns, file: snapshot-ns.yml}
     - {name: rbac-snapshot-controller, file: rbac-snapshot-controller.yml}
     - {name: snapshot-controller, file: snapshot-controller.yml}
   register: snapshot_controller_manifests
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/templates/rbac-snapshot-controller.yml.j2 b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/rbac-snapshot-controller.yml.j2
index 277b87b843e0fc7418639c43d3a15b34bb36e92f..9413376869ae3111ca4106959ff199da325de76f 100644
--- a/roles/kubernetes-apps/snapshots/snapshot-controller/templates/rbac-snapshot-controller.yml.j2
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/rbac-snapshot-controller.yml.j2
@@ -9,7 +9,7 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: snapshot-controller
-  namespace: kube-system
+  namespace: {{ snapshot_controller_namespace }}
 
 ---
 kind: ClusterRole
@@ -51,7 +51,7 @@ metadata:
 subjects:
   - kind: ServiceAccount
     name: snapshot-controller
-    namespace: kube-system
+    namespace: {{ snapshot_controller_namespace }}
 roleRef:
   kind: ClusterRole
   # change the name also here if the ClusterRole gets renamed
@@ -62,7 +62,7 @@ roleRef:
 kind: Role
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
-  namespace: kube-system
+  namespace: {{ snapshot_controller_namespace }}
   name: snapshot-controller-leaderelection
 rules:
 - apiGroups: ["coordination.k8s.io"]
@@ -74,11 +74,11 @@ kind: RoleBinding
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: snapshot-controller-leaderelection
-  namespace: kube-system
+  namespace: {{ snapshot_controller_namespace }}
 subjects:
   - kind: ServiceAccount
     name: snapshot-controller
-    namespace: kube-system
+    namespace: {{ snapshot_controller_namespace }}
 roleRef:
   kind: Role
   name: snapshot-controller-leaderelection
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-controller.yml.j2 b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-controller.yml.j2
index a18244bfde01eeae275337620d976a7e3668d95f..d17ffb368b43879842cf756cd8fbdbadeacab8af 100644
--- a/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-controller.yml.j2
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-controller.yml.j2
@@ -10,7 +10,7 @@ kind: Deployment
 apiVersion: apps/v1
 metadata:
   name: snapshot-controller
-  namespace: kube-system
+  namespace: {{ snapshot_controller_namespace }}
 spec:
   replicas: {{ snapshot_controller_replicas }}
   selector:
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-ns.yml.j2 b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-ns.yml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..bb30d60e2144fb6aaffd61591ba836f9fa4ac6d8
--- /dev/null
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/templates/snapshot-ns.yml.j2
@@ -0,0 +1,7 @@
+---
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: {{ snapshot_controller_namespace }}
+  labels:
+    name: {{ snapshot_controller_namespace }}