aboutsummaryrefslogtreecommitdiff
path: root/deploy
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2023-01-20 01:52:14 -0800
committerchrislu <chris.lu@gmail.com>2023-01-20 01:52:14 -0800
commit925fb86e857467b2589cbd5985ba2965050d280b (patch)
treeccfb60e474b36f69ad92bffa8d365853dc7642b4 /deploy
parent8620e287b2706e800cd9e6d76c650403f0d6ea00 (diff)
parent9e412bac1bfad86fa49749233d0775b4229dd88e (diff)
downloadseaweedfs-csi-driver-925fb86e857467b2589cbd5985ba2965050d280b.tar.xz
seaweedfs-csi-driver-925fb86e857467b2589cbd5985ba2965050d280b.zip
Merge branch 'master' of https://github.com/seaweedfs/seaweedfs-csi-driver
Diffstat (limited to 'deploy')
-rw-r--r--deploy/helm/seaweedfs-csi-driver/templates/daemonset.yml16
-rw-r--r--deploy/helm/seaweedfs-csi-driver/templates/kubemod_modrule.yml28
-rw-r--r--deploy/helm/seaweedfs-csi-driver/values.yaml14
3 files changed, 58 insertions, 0 deletions
diff --git a/deploy/helm/seaweedfs-csi-driver/templates/daemonset.yml b/deploy/helm/seaweedfs-csi-driver/templates/daemonset.yml
index f0596bb..8d90cd3 100644
--- a/deploy/helm/seaweedfs-csi-driver/templates/daemonset.yml
+++ b/deploy/helm/seaweedfs-csi-driver/templates/daemonset.yml
@@ -14,6 +14,11 @@ spec:
metadata:
labels:
app: {{ template "seaweedfs-csi-driver.name" . }}-node
+ {{- if .Values.node.injectTopologyInfoFromNodeLabel.enabled }}
+ annotations:
+ # Tell KubeMod to make node metadata available to pod ModRules.
+ ref.kubemod.io/inject-node-ref: "true"
+ {{- end }}
spec:
priorityClassName: system-node-critical
serviceAccountName: {{ template "seaweedfs-csi-driver.name" . }}-node-sa
@@ -59,6 +64,10 @@ spec:
- "--filer=$(SEAWEEDFS_FILER)"
- "--nodeid=$(NODE_ID)"
- "--cacheDir=/var/cache/seaweedfs"
+ - "--dataLocality={{ .Values.dataLocality }}"
+ {{- if .Values.node.injectTopologyInfoFromNodeLabel.enabled }}
+ - "--dataCenter=$(DATACENTER)"
+ {{- end }}
env:
- name: CSI_ENDPOINT
value: unix:///csi/csi.sock
@@ -68,6 +77,13 @@ spec:
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ {{- if .Values.node.injectTopologyInfoFromNodeLabel.enabled }}
+ - name: DATACENTER
+ valueFrom:
+ fieldRef:
+ # Injected by ModRule 'inject-topology-labels'
+ fieldPath: metadata.labels['dataCenter']
+ {{- end }}
{{- if .Values.tlsSecret }}
- name: WEED_GRPC_CLIENT_KEY
value: /var/run/secrets/app/tls/tls.key
diff --git a/deploy/helm/seaweedfs-csi-driver/templates/kubemod_modrule.yml b/deploy/helm/seaweedfs-csi-driver/templates/kubemod_modrule.yml
new file mode 100644
index 0000000..af8cf39
--- /dev/null
+++ b/deploy/helm/seaweedfs-csi-driver/templates/kubemod_modrule.yml
@@ -0,0 +1,28 @@
+# Based on https://github.com/kubernetes/kubernetes/issues/40610#issuecomment-1364368282
+{{- if .Values.node.injectTopologyInfoFromNodeLabel.enabled }}
+apiVersion: api.kubemod.io/v1beta1
+kind: ModRule
+metadata:
+ name: inject-topology-labels
+spec:
+ type: Patch
+ targetNamespaceRegex: ".*"
+ admissionOperations:
+ - UPDATE
+
+ match:
+ # Match pods...
+ - select: '$.kind'
+ matchValue: 'Pod'
+ # ... with label app = seaweedfs-csi-driver ...
+ - select: '$.metadata.labels.app'
+ matchValue: '{{ template "seaweedfs-csi-driver.name" . }}-node'
+ # ...which have access to the node's manifest through the synthetic ref injected by KubeMod.
+ - select: '$.syntheticRefs.node.metadata.labels'
+
+ patch:
+ # Grab the node's region and zone and put them in the pod's corresponding labels.
+ - op: add
+ path: /metadata/labels/dataCenter
+ value: '{{`{{`}} index .Target.syntheticRefs.node.metadata.labels "{{ .Values.node.injectTopologyInfoFromNodeLabel.labels.dataCenter }}" {{`}}`}}'
+{{- end }}
diff --git a/deploy/helm/seaweedfs-csi-driver/values.yaml b/deploy/helm/seaweedfs-csi-driver/values.yaml
index d76030e..bb29782 100644
--- a/deploy/helm/seaweedfs-csi-driver/values.yaml
+++ b/deploy/helm/seaweedfs-csi-driver/values.yaml
@@ -42,6 +42,12 @@ controller:
affinity: {}
tolerations: {}
+# DataLocality (inspired by Longhorn) allows instructing the storage-driver which volume-locations will be used or preferred in Pods to read & write.
+# e.g. Allows Pods to write preferrably to its local dataCenter volume-servers
+# Requires Volume-Servers to be correctly labelled and matching Topology-Info to be passed into seaweedfs-csi-driver node
+# Example-Value: "write_preferlocaldc"
+dataLocality: "none"
+
node:
# Deploy node daemonset
enabled: true
@@ -54,6 +60,14 @@ node:
affinity: {}
tolerations: {}
+ # Auto-Inject Topology-Info from Kubernetes node-labels using KubeMod (https://github.com/kubemod/kubemod)
+ # Necessary because DownwardAPI doesnt support passing node-labels (see: https://github.com/kubernetes/kubernetes/issues/40610)
+ # Requires KubeMod to be installed
+ injectTopologyInfoFromNodeLabel:
+ enabled: false
+ labels:
+ dataCenter: "topology.kubernetes.io/zone"
+
## Change if not using standard kubernetes deployments, like k0s
volumes:
registration_dir: /var/lib/kubelet/plugins_registry