From 4bcbd75164aa6af053f6d01ac750420c2e4c0bcd Mon Sep 17 00:00:00 2001 From: Benjamin Runnels Date: Sat, 20 Jan 2024 19:23:33 -0600 Subject: [PATCH] feat: added csi_driver_smb addon (#1213) --- .github/tests/addons.yaml | 12 +++++++++ .../csi-driver-smb/app/helmrelease.yaml.j2 | 27 +++++++++++++++++++ .../csi-driver-smb/app/kustomization.yaml.j2 | 9 +++++++ .../csi-driver-smb/app/secrets.sops.yaml.j2 | 12 +++++++++ .../csi-driver-smb/app/storageclass.yaml.j2 | 26 ++++++++++++++++++ .../apps/storage/csi-driver-smb/ks.yaml.j2 | 22 +++++++++++++++ .../apps/storage/kustomization.yaml.j2 | 10 ++++--- .../repositories/helm/csi-driver-smb.yaml.j2 | 9 +++++++ .../repositories/helm/kustomization.yaml.j2 | 1 + bootstrap/vars/addons.sample.yaml | 14 ++++++++++ 10 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/helmrelease.yaml.j2 create mode 100644 bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/kustomization.yaml.j2 create mode 100644 bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/secrets.sops.yaml.j2 create mode 100644 bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/storageclass.yaml.j2 create mode 100644 bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/ks.yaml.j2 create mode 100644 bootstrap/templates/kubernetes/flux/repositories/helm/csi-driver-smb.yaml.j2 diff --git a/.github/tests/addons.yaml b/.github/tests/addons.yaml index 786cb02b..c1b44a1b 100644 --- a/.github/tests/addons.yaml +++ b/.github/tests/addons.yaml @@ -23,6 +23,18 @@ csi_driver_nfs: server: fake share: /fake +csi_driver_smb: + enabled: true + storage_class: + - name: fake + source: //localhost/fake + username: fake + password: fake + file_mode: 0755 + dir_mode: 0644 + uid: 100 + gid: 100 + system_upgrade_controller: enabled: true diff --git a/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/helmrelease.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/helmrelease.yaml.j2 new file mode 100644 index 00000000..9c76839e --- /dev/null +++ b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/helmrelease.yaml.j2 @@ -0,0 +1,27 @@ +#% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta2 +kind: HelmRelease +metadata: + name: csi-driver-smb +spec: + interval: 30m + chart: + spec: + chart: csi-driver-smb + version: v1.14.0 + sourceRef: + kind: HelmRepository + name: csi-driver-smb + namespace: flux-system + install: + remediation: + retries: 3 + upgrade: + cleanupOnFail: true + remediation: + retries: 3 + uninstall: + keepHistory: false + values: {} +#% endif %# diff --git a/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/kustomization.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/kustomization.yaml.j2 new file mode 100644 index 00000000..7a7e7ec2 --- /dev/null +++ b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/kustomization.yaml.j2 @@ -0,0 +1,9 @@ +#% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./helmrelease.yaml + - ./storageclass.yaml + - ./secrets.sops.yaml +#% endif %# diff --git a/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/secrets.sops.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/secrets.sops.yaml.j2 new file mode 100644 index 00000000..ce71f8ef --- /dev/null +++ b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/secrets.sops.yaml.j2 @@ -0,0 +1,12 @@ +#% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# +#% for item in csi_driver_smb.storage_class %# +--- +apiVersion: v1 +kind: Secret +metadata: + name: "#{ item.name }#-secret" +stringData: + username: "#{ item.username }#" + password: "#{ item.password }#" +#% endfor %# +#% endif %# diff --git a/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/storageclass.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/storageclass.yaml.j2 new file mode 100644 index 00000000..44ee3432 --- /dev/null +++ b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/app/storageclass.yaml.j2 @@ -0,0 +1,26 @@ +#% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# +#% for item in csi_driver_smb.storage_class %# +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: "#{ item.name }#" +provisioner: smb.csi.k8s.io +parameters: + source: "#{ item.source }#" + csi.storage.k8s.io/node-stage-secret-name: "#{ item.name }#-secret" + csi.storage.k8s.io/node-stage-secret-namespace: "storage" + createSubDir: "false" +reclaimPolicy: Retain +volumeBindingMode: Immediate +mountOptions: + - dir_mode=#{ item.dir_mode|default("0777") }# + - file_mode=#{ item.file_mode|default("0666") }# + - uid=#{ item.uid|default("1000") }# + - gid=#{ item.gid|default("1000") }# + - noperm + - mfsymlinks + - cache=strict + - noserverino # required to prevent data corruption +#% endfor %# +#% endif %# diff --git a/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/ks.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/ks.yaml.j2 new file mode 100644 index 00000000..57735bd7 --- /dev/null +++ b/bootstrap/templates/kubernetes/apps/storage/csi-driver-smb/ks.yaml.j2 @@ -0,0 +1,22 @@ +#% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: &app csi-driver-smb + namespace: flux-system +spec: + targetNamespace: storage + commonMetadata: + labels: + app.kubernetes.io/name: *app + path: ./kubernetes/apps/storage/csi-driver-smb/app + prune: true + sourceRef: + kind: GitRepository + name: home-kubernetes + wait: true + interval: 30m + retryInterval: 1m + timeout: 5m +#% endif %# diff --git a/bootstrap/templates/kubernetes/apps/storage/kustomization.yaml.j2 b/bootstrap/templates/kubernetes/apps/storage/kustomization.yaml.j2 index 22c64e37..5964fd23 100644 --- a/bootstrap/templates/kubernetes/apps/storage/kustomization.yaml.j2 +++ b/bootstrap/templates/kubernetes/apps/storage/kustomization.yaml.j2 @@ -3,10 +3,14 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ./namespace.yaml + #% if csi_driver_nfs|default({}) and csi_driver_nfs.enabled|default(false) %# + - ./csi-driver-nfs/ks.yaml + #% endif %# + #% if csi_driver_smb|default({}) and csi_driver_smb.enabled|default(false) %# + - ./csi-driver-smb/ks.yaml + #% endif %# - ./openebs/ks.yaml #% if volsync|default({}) and volsync.enabled|default(false) %# - ./volsync/ks.yaml #% endif %# - #% if csi_driver_nfs|default({}) and csi_driver_nfs.enabled|default(false) %# - - ./csi-driver-nfs/ks.yaml - #% endif %# + diff --git a/bootstrap/templates/kubernetes/flux/repositories/helm/csi-driver-smb.yaml.j2 b/bootstrap/templates/kubernetes/flux/repositories/helm/csi-driver-smb.yaml.j2 new file mode 100644 index 00000000..a35bd825 --- /dev/null +++ b/bootstrap/templates/kubernetes/flux/repositories/helm/csi-driver-smb.yaml.j2 @@ -0,0 +1,9 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: csi-driver-smb + namespace: flux-system +spec: + interval: 1h + url: https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts diff --git a/bootstrap/templates/kubernetes/flux/repositories/helm/kustomization.yaml.j2 b/bootstrap/templates/kubernetes/flux/repositories/helm/kustomization.yaml.j2 index 03d1929b..29df8aaa 100644 --- a/bootstrap/templates/kubernetes/flux/repositories/helm/kustomization.yaml.j2 +++ b/bootstrap/templates/kubernetes/flux/repositories/helm/kustomization.yaml.j2 @@ -8,6 +8,7 @@ resources: - ./cilium.yaml - ./coredns.yaml - ./csi-driver-nfs.yaml + - ./csi-driver-smb.yaml - ./descheduler.yaml - ./external-dns.yaml - ./grafana.yaml diff --git a/bootstrap/vars/addons.sample.yaml b/bootstrap/vars/addons.sample.yaml index e2e3628c..c2ff7ed2 100644 --- a/bootstrap/vars/addons.sample.yaml +++ b/bootstrap/vars/addons.sample.yaml @@ -36,6 +36,20 @@ csi_driver_nfs: # share: # exported share (path) # ... +# https://github.com/kubernetes-csi/csi-driver-smb +csi_driver_smb: + enabled: false + storage_class: + # - name: # name of the storage class (must match [a-z0-9-]+) + # source: # network path of the smb share ie: //192.168.0.5/downloads + # username: # share credentials + # password: # share credentials + # dir_mode: # default 0777 + # file_mode: # default 0666 + # uid: # default 1000 + # gid: # default 1000 + # ... + # https://github.com/rancher/system-upgrade-controller system_upgrade_controller: # IMPORTANT: Only enable this if you also track the version of k3s in the