parts/k8s/addons/azurefile-csi-driver-deployment.yaml (760 lines of code) (raw):

--- # Source: azurefile-csi-driver/templates/serviceaccount-csi-azurefile-controller.yaml apiVersion: v1 kind: ServiceAccount metadata: name: csi-azurefile-controller-sa namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile --- # Source: azurefile-csi-driver/templates/serviceaccount-csi-azurefile-node.yaml apiVersion: v1 kind: ServiceAccount metadata: name: csi-azurefile-node-sa namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-external-provisioner-role labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["get", "list", "watch", "create", "update", "patch"] - apiGroups: ["storage.k8s.io"] resources: ["csinodes"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["get", "list", "watch", "create", "update", "patch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshots"] verbs: ["get", "list"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents"] verbs: ["get", "list"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-external-attacher-role labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "update"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: ["csi.storage.k8s.io"] resources: ["csinodeinfos"] verbs: ["get", "list", "watch"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "update", "patch"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments/status"] verbs: ["get", "list", "watch", "update", "patch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["get", "list", "watch", "create", "update", "patch"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-external-snapshotter-role labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotclasses"] verbs: ["get", "list", "watch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents"] verbs: ["create", "get", "list", "watch", "update", "delete"] - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["create", "list", "watch", "delete"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents/status"] verbs: ["update"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["get", "watch", "list", "delete", "update", "create", "patch"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-external-resizer-role namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "update", "patch"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["persistentvolumeclaims/status"] verbs: ["update", "patch"] - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: csi-azurefile-controller-secret-role namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "create"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-csi-provisioner-binding namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-controller-sa namespace: kube-system roleRef: kind: ClusterRole name: azurefile-external-provisioner-role apiGroup: rbac.authorization.k8s.io --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-csi-attacher-binding namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-controller-sa namespace: kube-system roleRef: kind: ClusterRole name: azurefile-external-attacher-role apiGroup: rbac.authorization.k8s.io --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-csi-snapshotter-binding namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-controller-sa namespace: kube-system roleRef: kind: ClusterRole name: azurefile-external-snapshotter-role apiGroup: rbac.authorization.k8s.io --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: azurefile-csi-resizer-role namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-controller-sa namespace: kube-system roleRef: kind: ClusterRole name: azurefile-external-resizer-role apiGroup: rbac.authorization.k8s.io --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: csi-azurefile-controller-secret-binding namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-controller-sa namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: csi-azurefile-controller-secret-role --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-node.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: csi-azurefile-node-secret-role labels: addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list"] --- # Source: azurefile-csi-driver/templates/rbac-csi-azurefile-controller.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: csi-azurefile-node-secret-binding namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: csi-azurefile-node-sa namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: csi-azurefile-node-secret-role {{if and (IsKubernetesVersionGe "1.18.0") HasWindows}} --- # Source: azurefile-csi-driver/templates/csi-azurefile-node-windows.yaml kind: DaemonSet apiVersion: apps/v1 metadata: name: csi-azurefile-node-windows namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile spec: updateStrategy: type: RollingUpdate rollingUpdate: maxUnavailable: 50% selector: matchLabels: app: csi-azurefile-node-windows template: metadata: labels: app: csi-azurefile-node-windows spec: nodeSelector: kubernetes.io/os: windows priorityClassName: system-node-critical tolerations: - key: "node.kubernetes.io/os" operator: "Exists" effect: "NoSchedule" containers: - name: liveness-probe volumeMounts: - mountPath: C:\csi name: plugin-dir image: {{ContainerImage "livenessprobe-windows"}} args: - "--csi-address=$(CSI_ENDPOINT)" - "--probe-timeout=3s" - "--health-port=29613" - "--v=2" env: - name: CSI_ENDPOINT value: unix://C:\\csi\\csi.sock resources: limits: cpu: {{ContainerCPULimits "livenessprobe-windows"}} memory: {{ContainerMemLimits "livenessprobe-windows"}} requests: cpu: {{ContainerCPUReqs "livenessprobe-windows"}} memory: {{ContainerMemReqs "livenessprobe-windows"}} - name: node-driver-registrar image: {{ContainerImage "csi-node-driver-registrar-windows"}} args: - --v=2 - --csi-address=$(CSI_ENDPOINT) - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) livenessProbe: exec: command: - /csi-node-driver-registrar.exe - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) - --mode=kubelet-registration-probe initialDelaySeconds: 60 timeoutSeconds: 30 env: - name: CSI_ENDPOINT value: unix://C:\\csi\\csi.sock - name: DRIVER_REG_SOCK_PATH value: C:\\var\\lib\\kubelet\\plugins\\file.csi.azure.com\\csi.sock - name: KUBE_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName volumeMounts: - name: kubelet-dir mountPath: "C:\\var\\lib\\kubelet" - name: plugin-dir mountPath: C:\csi - name: registration-dir mountPath: C:\registration resources: limits: cpu: {{ContainerCPULimits "csi-node-driver-registrar-windows"}} memory: {{ContainerMemLimits "csi-node-driver-registrar-windows"}} requests: cpu: {{ContainerCPUReqs "csi-node-driver-registrar-windows"}} memory: {{ContainerMemReqs "csi-node-driver-registrar-windows"}} - name: azurefile image: {{ContainerImage "azurefile-csi"}} args: - --v=5 - --endpoint=$(CSI_ENDPOINT) - --nodeid=$(KUBE_NODE_NAME) - --kubeconfig=C:\\k\\config - --metrics-address=0.0.0.0:29615 - --user-agent-suffix=aks-engine ports: - containerPort: 29613 name: healthz protocol: TCP livenessProbe: failureThreshold: 5 httpGet: path: /healthz port: healthz initialDelaySeconds: 30 timeoutSeconds: 10 periodSeconds: 30 env: - name: AZURE_CREDENTIAL_FILE value: "C:\\k\\azure.json" - name: CSI_ENDPOINT value: unix://C:\\csi\\csi.sock - name: KUBE_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName imagePullPolicy: volumeMounts: - name: kubelet-dir mountPath: "C:\\var\\lib\\kubelet" - name: plugin-dir mountPath: C:\csi - name: azure-config mountPath: C:\k - name: csi-proxy-fs-pipe-v1 mountPath: \\.\pipe\csi-proxy-filesystem-v1 - name: csi-proxy-smb-pipe-v1 mountPath: \\.\pipe\csi-proxy-smb-v1 # these paths are still included for compatibility, they're used # only if the node has still the beta version of the CSI proxy - name: csi-proxy-fs-pipe-v1beta1 mountPath: \\.\pipe\csi-proxy-filesystem-v1beta1 - name: csi-proxy-smb-pipe-v1beta1 mountPath: \\.\pipe\csi-proxy-smb-v1beta1 resources: limits: cpu: {{ContainerCPULimits "azurefile-csi"}} memory: {{ContainerMemLimits "azurefile-csi"}} requests: cpu: {{ContainerCPUReqs "azurefile-csi"}} memory: {{ContainerMemReqs "azurefile-csi"}} volumes: - name: csi-proxy-fs-pipe-v1 hostPath: path: \\.\pipe\csi-proxy-filesystem-v1 - name: csi-proxy-smb-pipe-v1 hostPath: path: \\.\pipe\csi-proxy-smb-v1 # these paths are still included for compatibility, they're used # only if the node has still the beta version of the CSI proxy - name: csi-proxy-fs-pipe-v1beta1 hostPath: path: \\.\pipe\csi-proxy-filesystem-v1beta1 - name: csi-proxy-smb-pipe-v1beta1 hostPath: path: \\.\pipe\csi-proxy-smb-v1beta1 - name: registration-dir hostPath: path: C:\var\lib\kubelet\plugins_registry\ type: Directory - name: kubelet-dir hostPath: path: C:\var\lib\kubelet\ type: Directory - name: plugin-dir hostPath: path: C:\var\lib\kubelet\plugins\file.csi.azure.com\ type: DirectoryOrCreate - name: azure-config hostPath: path: C:\k type: DirectoryOrCreate {{end}} {{if HasLinux}} --- # Source: azurefile-csi-driver/templates/csi-azurefile-node.yaml kind: DaemonSet apiVersion: apps/v1 metadata: name: csi-azurefile-node namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile spec: updateStrategy: type: RollingUpdate rollingUpdate: maxUnavailable: 50% selector: matchLabels: app: csi-azurefile-node template: metadata: labels: app: csi-azurefile-node spec: hostNetwork: true dnsPolicy: Default serviceAccountName: csi-azurefile-node-sa nodeSelector: kubernetes.io/os: linux priorityClassName: system-node-critical tolerations: - operator: "Exists" containers: - name: liveness-probe volumeMounts: - mountPath: /csi name: socket-dir image: {{ContainerImage "livenessprobe"}} args: - --csi-address=/csi/csi.sock - --probe-timeout=3s - --health-port=29613 - --v=2 resources: limits: cpu: {{ContainerCPULimits "livenessprobe"}} memory: {{ContainerMemLimits "livenessprobe"}} requests: cpu: {{ContainerCPUReqs "livenessprobe"}} memory: {{ContainerMemReqs "livenessprobe"}} - name: node-driver-registrar image: {{ContainerImage "csi-node-driver-registrar"}} args: - --csi-address=$(ADDRESS) - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) - --v=2 livenessProbe: exec: command: - /csi-node-driver-registrar - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) - --mode=kubelet-registration-probe initialDelaySeconds: 30 timeoutSeconds: 15 env: - name: ADDRESS value: /csi/csi.sock - name: DRIVER_REG_SOCK_PATH value: /var/lib/kubelet/plugins/file.csi.azure.com/csi.sock volumeMounts: - name: socket-dir mountPath: /csi - name: registration-dir mountPath: /registration resources: limits: cpu: {{ContainerCPULimits "csi-node-driver-registrar"}} memory: {{ContainerMemLimits "csi-node-driver-registrar"}} requests: cpu: {{ContainerCPUReqs "csi-node-driver-registrar"}} memory: {{ContainerMemReqs "csi-node-driver-registrar"}} - name: azurefile image: {{ContainerImage "azurefile-csi"}} args: - "--v=5" - "--endpoint=$(CSI_ENDPOINT)" - "--nodeid=$(KUBE_NODE_NAME)" - "--metrics-address=0.0.0.0:29615" - "--user-agent-suffix=aks-engine" ports: - containerPort: 29613 name: healthz protocol: TCP livenessProbe: failureThreshold: 5 httpGet: path: /healthz port: healthz initialDelaySeconds: 30 timeoutSeconds: 10 periodSeconds: 30 env: - name: AZURE_CREDENTIAL_FILE value: "/etc/kubernetes/azure.json" - name: CSI_ENDPOINT value: unix:///csi/csi.sock - name: KUBE_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName securityContext: privileged: true volumeMounts: - mountPath: /csi name: socket-dir - mountPath: /var/lib/kubelet/ mountPropagation: Bidirectional name: mountpoint-dir - mountPath: /etc/kubernetes/ name: azure-cred - mountPath: /dev name: device-dir resources: limits: cpu: {{ContainerCPULimits "azurefile-csi"}} memory: {{ContainerMemLimits "azurefile-csi"}} requests: cpu: {{ContainerCPUReqs "azurefile-csi"}} memory: {{ContainerMemReqs "azurefile-csi"}} volumes: - hostPath: path: /var/lib/kubelet/plugins/file.csi.azure.com type: DirectoryOrCreate name: socket-dir - hostPath: path: /var/lib/kubelet/ type: DirectoryOrCreate name: mountpoint-dir - hostPath: path: /var/lib/kubelet/plugins_registry/ type: DirectoryOrCreate name: registration-dir - hostPath: path: /etc/kubernetes/ type: DirectoryOrCreate name: azure-cred - hostPath: path: /dev type: Directory name: device-dir {{end}} --- # Source: azurefile-csi-driver/templates/csi-azurefile-controller.yaml kind: Deployment apiVersion: apps/v1 metadata: name: csi-azurefile-controller namespace: kube-system labels: addonmanager.kubernetes.io/mode: Reconcile spec: replicas: {{CSIControllerReplicas}} selector: matchLabels: app: csi-azurefile-controller template: metadata: labels: app: csi-azurefile-controller spec: hostNetwork: true # only required for MSI enabled cluster serviceAccountName: csi-azurefile-controller-sa nodeSelector: kubernetes.io/os: linux kubernetes.io/role: master priorityClassName: system-cluster-critical tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" - key: "node-role.kubernetes.io/controlplane" operator: "Exists" effect: "NoSchedule" containers: - name: csi-provisioner image: {{ContainerImage "csi-provisioner"}} args: - "-v=2" - "--csi-address=$(ADDRESS)" - "--leader-election" - "--timeout=300s" - "--extra-create-metadata=true" env: - name: ADDRESS value: /csi/csi.sock volumeMounts: - mountPath: /csi name: socket-dir resources: limits: cpu: {{ContainerCPULimits "csi-provisioner"}} memory: {{ContainerMemLimits "csi-provisioner"}} requests: cpu: {{ContainerCPUReqs "csi-provisioner"}} memory: {{ContainerMemReqs "csi-provisioner"}} - name: csi-attacher image: {{ContainerImage "csi-attacher"}} args: - "-v=2" - "-csi-address=$(ADDRESS)" - "-timeout=120s" - "-leader-election" env: - name: ADDRESS value: /csi/csi.sock volumeMounts: - mountPath: /csi name: socket-dir resources: limits: cpu: {{ContainerCPULimits "csi-attacher"}} memory: {{ContainerMemLimits "csi-attacher"}} requests: cpu: {{ContainerCPUReqs "csi-attacher"}} memory: {{ContainerMemReqs "csi-attacher"}} {{if ShouldEnableCSISnapshotFeature "azurefile-csi-driver"}} - name: csi-snapshotter image: {{ContainerImage "csi-snapshotter"}} args: - "-v=2" - "-csi-address=$(ADDRESS)" - "-leader-election" env: - name: ADDRESS value: /csi/csi.sock volumeMounts: - name: socket-dir mountPath: /csi resources: limits: cpu: {{ContainerCPULimits "csi-snapshotter"}} memory: {{ContainerMemLimits "csi-snapshotter"}} requests: cpu: {{ContainerCPUReqs "csi-snapshotter"}} memory: {{ContainerMemReqs "csi-snapshotter"}} {{end}} - name: csi-resizer image: {{ContainerImage "csi-resizer"}} args: - "-csi-address=$(ADDRESS)" - "-v=2" - "-leader-election" - '-handle-volume-inuse-error=false' env: - name: ADDRESS value: /csi/csi.sock volumeMounts: - name: socket-dir mountPath: /csi resources: limits: cpu: {{ContainerCPULimits "csi-resizer"}} memory: {{ContainerMemLimits "csi-resizer"}} requests: cpu: {{ContainerCPUReqs "csi-resizer"}} memory: {{ContainerMemReqs "csi-resizer"}} - name: liveness-probe image: {{ContainerImage "livenessprobe"}} args: - --csi-address=/csi/csi.sock - --probe-timeout=3s - --health-port=29612 - --v=2 volumeMounts: - name: socket-dir mountPath: /csi resources: limits: cpu: {{ContainerCPULimits "livenessprobe"}} memory: {{ContainerMemLimits "livenessprobe"}} requests: cpu: {{ContainerCPUReqs "livenessprobe"}} memory: {{ContainerMemReqs "livenessprobe"}} - name: azurefile image: {{ContainerImage "azurefile-csi"}} args: - "--v=5" - "--endpoint=$(CSI_ENDPOINT)" - "--metrics-address=0.0.0.0:29614" - "--user-agent-suffix=aks-engine" ports: - containerPort: 29612 name: healthz protocol: TCP - containerPort: 29614 name: metrics protocol: TCP livenessProbe: failureThreshold: 5 httpGet: path: /healthz port: healthz initialDelaySeconds: 30 timeoutSeconds: 10 periodSeconds: 30 env: - name: AZURE_CREDENTIAL_FILE value: "/etc/kubernetes/azure.json" - name: CSI_ENDPOINT value: unix:///csi/csi.sock volumeMounts: - mountPath: /csi name: socket-dir - mountPath: /etc/kubernetes/ name: azure-cred resources: limits: cpu: {{ContainerCPULimits "azurefile-csi"}} memory: {{ContainerMemLimits "azurefile-csi"}} requests: cpu: {{ContainerCPUReqs "azurefile-csi"}} memory: {{ContainerMemReqs "azurefile-csi"}} volumes: - name: socket-dir emptyDir: {} - name: azure-cred hostPath: path: /etc/kubernetes/ type: DirectoryOrCreate --- # Source: azurefile-csi-driver/templates/csi-azurefile-driver.yaml apiVersion: storage.k8s.io/v1 kind: CSIDriver metadata: name: file.csi.azure.com labels: addonmanager.kubernetes.io/mode: Reconcile spec: attachRequired: false podInfoOnMount: true volumeLifecycleModes: - Persistent - Ephemeral