diff options
| author | chrislu <chris.lu@gmail.com> | 2023-01-20 01:52:14 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2023-01-20 01:52:14 -0800 |
| commit | 925fb86e857467b2589cbd5985ba2965050d280b (patch) | |
| tree | ccfb60e474b36f69ad92bffa8d365853dc7642b4 /deploy | |
| parent | 8620e287b2706e800cd9e6d76c650403f0d6ea00 (diff) | |
| parent | 9e412bac1bfad86fa49749233d0775b4229dd88e (diff) | |
| download | seaweedfs-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')
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 |
