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 statically provisioned CPFS 1.0 volumes to a Container
Service for Kubernetes (ACK) cluster.
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.
In this topic, alibaba-cloud-csi-driver is used to mount CPFS 1.0 volumes. For more
information, see
alibaba-cloud-csi-driver.
Notice 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-plugin in your ACK cluster:
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
Run the following command to check the status of the application:
kubectl get pod -nkube-system |grep cpfs
Expected output:
csi-cpfsplugin-8t585 2/2 Running 0 4h43m
csi-cpfsplugin-9z5xj 2/2 Running 0 4h43m
csi-cpfsplugin-bdm22 2/2 Running 0 4h43m
csi-cpfsplugin-bjnlx 2/2 Running 0 4h44m
csi-cpfsplugin-nv7vg 2/2 Running 0 4h43m
csi-cpfsplugin-zc7z5 2/2 Running 0 4h43m
- Mount a CPFS 1.0 volume.
- Create a CPFS file system.
- Create a PV and a PVC.
Use the following template to create a PV and a PVC for the CPFS file system:
apiVersion: v1
kind: PersistentVolume
metadata:
name: cpfs-csi-pv
labels:
alicloud-pvname: cpfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: cpfsplugin.csi.alibabacloud.com
volumeHandle: cpfs-csi-pv
volumeAttributes:
server: "xxxxxx@tcp:xxxxxx@tcp"
fileSystem: "xxxxxx"
subPath: "/k8s"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cpfs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: cpfs-pv
- Create an application.
Use the following template to reference the PVC and create an application:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-cpfs
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: cpfs-pvc
mountPath: "/data"
volumes:
- name: cpfs-pvc
persistentVolumeClaim:
claimName: cpfs-pvc