Alibaba Cloud disks are block-level data storage products for Elastic Compute Service
(ECS). Alibaba Cloud disks provide low latency, high performance, high durability,
and high reliability. Container Service for Kubernetes (ACK) allows you to use the
Container Storage Interface (CSI) plug-in to statically and dynamically provision
disk volumes. This topic describes how to use the CSI plug-in to mount a statically
provisioned disk volume and how to enable persistent storage by using a statically
provisioned disk volume.
Prerequisites
- An ACK cluster is created and the CSI plug-in is deployed in the cluster. For more
information, see Create a managed Kubernetes cluster.
- A pay-as-you-go disk is created. The disk ID is
d-wz92s6d95go6ki9x****
. For more information, see Create a disk.
Note The disk that you create must meet the following requirements:
- An ultra disk must have a minimum capacity of 20 GiB.
- A standard SSD must have a minimum capacity of 20 GiB.
- An enhanced SSD (ESSD) must have a minimum capacity of 20 GiB.
- Step 2: Select a type of cluster credentials.
Background information
Scenarios:
- You want to create applications that require high disk I/O and do not require data
sharing. The applications can use storage services such as MySQL and Redis.
- You want to write logs at high speeds.
- You want to persist data in a way that is independent of the pod lifecycle.
To mount a disk as a statically provisioned volume, make sure that you have purchased
a disk.
Manually create a persistent volume (PV) and a persistent volume claim (PVC) that
are used to statically provision a disk.
Limits
- Alibaba Cloud disks cannot be shared. A disk can be mounted only to one pod.
- A disk can be mounted only to a node that is deployed in the same zone as the disk.
Mount a statically provisioned disk volume in the ACK console
Step 1: Create a PV
- Log on to the ACK console.
- In the left-side navigation pane of the ACK console, click Clusters.
- On the Clusters page, find the cluster that you want to manage and click the name of the cluster
or click Details in the Actions column. The details page of the cluster appears.
- In the left-side navigation pane of the details page, choose .
- In the upper-right corner of the Persistent Volumes page, click Create.
- In the Create PV dialog box, set the parameters.
Parameter |
Description |
PV Type |
You can select Cloud Disk, NAS, or OSS. In this example, Cloud Disk is selected.
|
Volume Plug-in |
You can select FlexVolume or CSI. In this example, CSI is selected.
|
Access Mode |
By default, this parameter is set to ReadWriteOnce. |
Disk ID |
Select a mountable disk that is deployed in the same region and zone as your cluster.
|
File System Type |
Select the file system of the disk. Valid values: ext4, ext3, xfs, and vfat. Default value: ext4.
|
Label |
Add labels to the PV. |
- Click Create.
Step 2: Create a PVC
- In the left-side navigation pane of the details page, choose .
- In the upper-right corner of the Persistent Volume Claims page, click Create.
- In the Create PVC dialog box, set the following parameters:
Parameter |
Description |
PVC Type |
You can select Cloud Disk, NAS, or OSS. In this example, Cloud Disk is selected.
|
Name |
The name of the PVC. The name must be unique in the namespace. |
Allocation Mode |
In this example, Existing Volumes is selected.
Note If no PV is created, you can set Allocation Mode to Create Volume, and set other parameters to create a PV. For more information, see Create a PV.
|
Existing Volumes |
Click Select PV. In the dialog box that appears, find the PV that you want to use and click Select in the Actions column.
|
Capacity |
The capacity of the PV that you created.
Note The capacity of a PV cannot be greater than the capacity of the disk that is associated
with the PV.
|
Access Mode |
By default, this parameter is set to ReadWriteOnce. |
- Click Create.
After the PVC is created, you can view the PVC in the list of PVCs. The PVC is bound
to the specified PV.
Step 3: Create an application
- In the left-side navigation pane of the details page, choose .
- In the upper-right corner of the StatefulSets page, click Create from Image.
- Set the application parameters.
This example shows how to set the volume parameters. For more information about other
parameters, see
Use a StatefulSet to create a stateful application.
You can configure local storage volumes and cloud storage volumes for an ACK cluster.
In this example, Cloud Storage is selected.
Mount the disk volume that is created in this example to the
/tmp path of the container. After the disk volume is mounted, the container data that
is generated in the /tmp path is stored in the disk volume.

- Set other parameters and click Create.
After the application is created, you can use the disk volume to store application
data.
Mount a statically provisioned disk volume by using kubectl
Step 1: Create a PV
- Use the following template to create a pv-static.yaml file:
apiVersion: v1
kind: PersistentVolume
metadata:
name: csi-pv
labels:
alicloud-pvname: static-disk-pv
spec:
capacity:
storage: 25Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: diskplugin.csi.alibabacloud.com
volumeHandle: "<your-disk-id>"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.diskplugin.csi.alibabacloud.com/zone
operator: In
values:
- "<your-node-zone-id>"
Parameter |
Description |
name |
The name of the PV |
labels |
The labels that you want to add to the PV |
storage |
The available storage of the disk |
accessModes |
The access mode of the PV |
persistentVolumeReclaimPolicy |
The reclaim policy of the PV |
driver |
The type of the volume driver that you want to use. This parameter is set to diskplugin.csi.alibabacloud.com . This value indicates that the Alibaba Cloud CSI plug-in is used.
|
volumeHandle |
The ID of the disk associated with the PV |
nodeAffinity |
Information about the zone to which the PV and PVC belong.
You can set this parameter to specify the zone to which the pod that uses the PV and
PVC is scheduled.
|
- Run the following command to create the PV:
kubectl create -f pv-static.yaml
- View the PV that you created.
- Log on to the ACK console.
- In the left-side navigation pane of the ACK console, click Clusters.
- On the Clusters page, find the cluster that you want to manage and click the name of the cluster
or click Details in the Actions column. The details page of the cluster appears.
- In the left-side navigation pane of the cluster details page, choose .
On the Persistent Volumes page, verify that the newly created PV is displayed.
Step 2: Create a PVC
- Use the following template to create a pvc-static.yaml file:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 25Gi
selector:
matchLabels:
alicloud-pvname: static-disk-pv
Parameter |
Description |
name |
The name of the PVC |
accessModes |
The access mode of the PVC |
storage |
The capacity claimed by the PVC. The claimed capacity cannot exceed the capacity of
the PV that is bound to the PVC.
|
matchLabels |
The labels that are used to select a PV and bind it to the PVC. The labels must be
the same as those of the PV.
|
- Run the following command to create the PVC:
kubectl create -f pvc-static.yaml
- In the left-side navigation pane of the cluster details page, choose .
On the Persistent Volume Claims page, verify that the newly created PVC is displayed.
Step 3: Create an application
In this example, a web application is created and mounted with the PVC you created.
- Use the following template to create a web.yaml file:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: pvc-disk
mountPath: /data
volumes:
- name: pvc-disk
persistentVolumeClaim:
claimName: csi-pvc
- mountPath: the path where you want to mount the disk in the container.
- claimName: the name of the PVC that you want to mount to the application.
- Run the following command to create an application and mount the statically provisioned
PV by using the PVC:
kubectl apply -f web.yaml
- In the left-side navigation pane of the cluster details page, choose .
On the SratefulSets page, verify that the newly created web application is displayed.
Verify that the statically provisioned disk can be used to persist data
- View the pods that run the web application and the files in the mounted disk.
- Run the following command to query the pods that run the web application:
kubectl get pod | grep web
Expected output:
web-1**** 1/1 Running 0 32s
- Run the following command to check whether a new disk is mounted to the /data path:
kubectl exec web-1**** df | grep data
Expected output:
/dev/vdf 20511312 45080 20449848 1% /data
- Run the following command to query files in the /data path:
kubectl exec web-1**** ls /data
Expected output:
lost+found
- Run the following command to create a file named static in the /data path:
kubectl exec web-1**** touch /data/static
- Run the following command to query files in the /data path:
kubectl exec web-1**** ls /data
Expected output:
lost+found
static
- Run the following command to delete the
web-1****
pod: kubectl delete pod web-1****
Expected output:
pod "web-1****" deleted
- Verify that the file still exists in the disk after the pod is deleted.
- Run the following command to query the pod that is recreated:
kubectl get pod
Expected output:
NAME READY STATUS RESTARTS AGE
web-2**** 1/1 Running 0 14s
- Run the following command to query files in the /data path:
kubectl exec web-2**** ls /data
Expected output:
lost+found
static
The static file still exists in the disk. This indicates that data is persisted to the statically
provisioned disk.