Cloud Paralleled File System (CPFS) is a type of parallel file system. CPFS stores data across multiple data nodes in a cluster and allows multiple clients to simultaneously access the data. Therefore, CPFS can provide data storage services with high IOPS, high throughput, and low latency for large-scale and high-performance computing clusters. This topic describes how to mount dynamically provisioned CPFS 1.0 volumes to a Container Service for Kubernetes (ACK) cluster.
Prerequisites
CPFS is activated.When you log on to NAS console for the first time, activate the CPFS service according to the instructions on the page.
Background information
ACK allows you to mount CPFS 1.0 file systems as statically and dynamically provisioned volumes. To mount a CPFS 1.0 file system as a statically provisioned volume, you must manually create a persistent volume (PV) and a persistent volume claim (PVC). This procedure can be time-consuming when large numbers of PVs and PVCs are required. In this case, you can mount the CPFS 1.0 file system as a dynamically provisioned volume. This topic describes how to use alibaba-cloud-csi-driver to mount a CPFS 1.0 volume to an ACK cluster. For more information, see
alibaba-cloud-csi-driver.
Important CPFS is updated to CPFS 2.0. You cannot mount new CPFS 1.0 volumes to ACK clusters.
Procedure
- Deploy the CSI-CPFS component.
To mount CPFS 1.0 volumes, you must first perform the following steps to deploy cpfs-provisioner and cpfs-plugin in your ACK cluster:
- Use the following sample template to deploy cpfs-provisioner:
kind: Deployment apiVersion: apps/v1 metadata: name: csi-cpfs-provisioner namespace: kube-system spec: selector: matchLabels: app: csi-cpfs-provisioner replicas: 2 template: metadata: labels: app: csi-cpfs-provisioner spec: tolerations: - operator: "Exists" affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: node-role.kubernetes.io/master operator: Exists priorityClassName: system-node-critical serviceAccount: admin hostNetwork: true containers: - name: external-cpfs-provisioner image: registry.cn-hangzhou.aliyuncs.com/acs/csi-provisioner:v1.6.0-e360c7e43-aliyun args: - "--provisioner=cpfsplugin.csi.alibabacloud.com" - "--csi-address=$(ADDRESS)" - "--volume-name-prefix=cpfs" - "--timeout=150s" - "--enable-leader-election=true" - "--leader-election-type=leases" - "--retry-interval-start=500ms" - "--v=5" env: - name: ADDRESS value: /socketDir/csi.sock imagePullPolicy: "Always" volumeMounts: - name: socket-dir mountPath: /socketDir volumes: - name: socket-dir hostPath: path: /var/lib/kubelet/csi-plugins/cpfsplugin.csi.alibabacloud.com type: DirectoryOrCreate
- Use the following sample template to deploy csi-plugin:
apiVersion: storage.k8s.io/v1 kind: CSIDriver metadata: name: cpfsplugin.csi.alibabacloud.com spec: attachRequired: false podInfoOnMount: true --- # This YAML defines all API objects to create RBAC roles for csi node plugin. kind: DaemonSet apiVersion: apps/v1 metadata: name: csi-cpfsplugin namespace: kube-system spec: selector: matchLabels: app: csi-cpfsplugin template: metadata: labels: app: csi-cpfsplugin spec: tolerations: - operator: Exists priorityClassName: system-node-critical serviceAccount: admin hostNetwork: true hostPID: true containers: - name: driver-registrar image: registry.cn-hangzhou.aliyuncs.com/acs/csi-node-driver-registrar:v1.2.0 imagePullPolicy: Always args: - "--v=5" - "--csi-address=/var/lib/kubelet/csi-plugins/cpfsplugin.csi.alibabacloud.com/csi.sock" - "--kubelet-registration-path=/var/lib/kubelet/csi-plugins/cpfsplugin.csi.alibabacloud.com/csi.sock" volumeMounts: - name: kubelet-dir mountPath: /var/lib/kubelet/ - name: registration-dir mountPath: /registration - name: csi-cpfsplugin securityContext: privileged: true capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true image: registry.cn-hangzhou.aliyuncs.com/acs/csi-cpfsplugin:v1.20.4-3220e46-aliyun imagePullPolicy: "Always" args: - "--endpoint=$(CSI_ENDPOINT)" - "--v=5" - "--driver=cpfsplugin.csi.alibabacloud.com" env: - name: CSI_ENDPOINT value: unix://var/lib/kubelet/csi-plugins/cpfsplugin.csi.alibabacloud.com/csi.sock volumeMounts: - name: kubelet-dir mountPath: /var/lib/kubelet/ mountPropagation: "Bidirectional" - mountPath: /var/log/ name: host-log - name: etc mountPath: /host/etc volumes: - name: kubelet-dir hostPath: path: /var/lib/kubelet/ type: Directory - name: registration-dir hostPath: path: /var/lib/kubelet/plugins_registry type: DirectoryOrCreate - name: host-log hostPath: path: /var/log/ - name: etc hostPath: path: /etc updateStrategy: type: RollingUpdate
- Use the following sample template to deploy cpfs-provisioner:
- Mount a dynamically provisioned CPFS 1.0 volume.