Alibaba Cloud disks are block-level data storage resources for Elastic Compute Service (ECS). Alibaba Cloud disks provide low latency, high performance, high durability, and high reliability. ACK Serverless allows you to use the Container Storage Interface (CSI) plug-in to create dynamically provisioned disk volumes. This topic describes how to use a dynamically provisioned disk volume and how to verify that a dynamically provisioned disk volume can be used for persistent storage.
Prerequisites
An ACK Serverless cluster is created. For more information, see Create an ACK Serverless cluster.
A kubectl client is connected to the ACK Serverless cluster. For more information, see Connect to an ACK cluster by using kubectl.
The CSI plug-in is manually installed. For more information, see Install and update csi-provisioner.
Background information
For more information about StorageClasses, see StorageClasses.
Procedure
Use a dynamically provisioned disk volume in the ACK console
Step 1: Create a StorageClass
Log on to the ACK console. In the left-side navigation pane, click Clusters.
On the Clusters page, click the name of the cluster that you want to manage and choose in the left-side navigation pane.
In the upper-right corner of the StorageClasses page, click Create.
In the Create dialog box, configure the parameters.
The following table describes the parameters.
Parameter
Description
Name
The name of the StorageClass.
The name must start with a lowercase letter and can contain only lowercase letters, digits, periods (.), and hyphens (-).
PV Type
The type of the persistent volume (PV). Select Cloud Disk.
Parameter
By default, the type parameter is added and set to cloud_essd. The type parameter specifies the disk types. Valid values: cloud_efficiency, cloud_ssd, cloud_essd, and available. You can specify one or more values. However, if you specify available, you cannot specify other values. For example, if you specify
type: cloud_efficiency, cloud_ssd, cloud_essd
, the system attempts to create a disk of the specified types in sequence. The system stops trying if a disk is created. If you set the parameter to available, the system first attempts to create a standard SSD. If the attempt fails, the system attempts to create an ultra disk. The system stops trying if a disk is created.NoteSome ECS instance types do not support Enterprise SSDs (ESSDs). For more information, see FAQ.
You can add custom parameters. For example, you can add the zoneId parameter to specify the IDs of the zones in which you want to create the disk. If your cluster is deployed in a single zone, set the value to the ID of the zone. Example:
cn-beijing-a
. If your cluster is deployed across zones, you can set the zoneId parameter to multiple zone IDs based on your business requirements. Example:cn-beijing-a, cn-beijing-b
.Reclaim Policy
The reclaim policy of the disk. By default, this parameter is set to Delete. You can also set this parameter to Retain.
Delete mode: When persistent volume claims (PVCs) are deleted, the related PVs and disks are also deleted.
Retain mode: When PVCs are deleted, the related PVs and disks are retained. The PVs and disk data can only be manually deleted.
If you require higher data security, we recommend that you use the Retain mode to prevent data from being accidentally deleted.
Binding Mode
The mount mode of the disk. Default value: Immediate, which specifies that the system creates a disk before it creates a pod.
After you configure the parameters, click Create.
You can find the created StorageClass in the StorageClasses list.
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, configure the parameters that are described in the following table.
Parameter
Description
PVC Type
The type of the PVC. You can set this parameter to Cloud Disk or NAS. In this example, this parameter is set to Cloud Disk.
Name
The name of the PVC. The name must be unique in the namespace.
Allocation Mode
In this example, Use StorageClass is selected.
Existing Storage Class
Click Select. In the Select Storage Class dialog box, find the StorageClass that you want to use and click Select in the Actions column.
Capacity
The capacity claimed by the PVC.
Access mode
The access mode of the PV. By default, this parameter is set to ReadWriteOnce.
Click Create.
After the PVC is created, you can view the PVC in the PVC list. The PVC is bound to a 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.
- Configure the application parameters. This example shows how to configure 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. - Configure other parameters and click Create. After the application is created, you can use the volume to store application data.
Use a dynamically provisioned disk volume by using kubectl
Step 1: Create a StorageClass
In a multi-zone cluster, you can create a StorageClass by first creating a cloud disk and then creating a pod.
Use the following template to create a file named storage-class-csi.yaml:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-ssd-b provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_ssd encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: Immediate
Parameter
Description
provisioner
Set the value to
diskplugin.csi.alibabacloud.com
. This specifies that the provisioner plug-in for Alibaba Cloud disks is used to create the StorageClass.type
The type of disk. Valid values: cloud_efficiency, cloud_ssd, cloud_essd, and available. You can specify one or more values. However, if you specify available, you cannot specify other values. For example, if you specify
type: cloud_efficiency, cloud_ssd, cloud_essd
, the system attempts to create a disk of the specified types in sequence. The system stops creating disks until a disk is created. If you set this parameter to available, the system first attempts to create a standard SSD. If the attempt fails, the system attempts to create an ultra disk. The system stops creating disks until a disk is created.NoteSome ECS instance types do not support ESSDs. For more information, see FAQ.
encrypted
Optional. This parameter specifies whether the disk is encrypted. The default value is false, which indicates that the disk is not encrypted.
reclaimPolicy
The reclaim policy of the disk. By default, this parameter is set to Delete. You can also set this parameter to Retain.
Delete mode: When PVCs are deleted, the related PVs and disks are also deleted.
Retain mode: When PVCs are deleted, the related PVs and disks are retained. The PVs and disk data can only be manually deleted.
If you require high data security, we recommend that you use the Retain mode to prevent data from being accidentally deleted.
allowVolumeExpansion
If you set this parameter to true, the disk can be automatically expanded.
volumeBindingMode
The mount mode of the disk. Default value: Immediate, which specifies that the system creates a disk before it creates a pod.
Run the following command to create a StorageClass:
kubectl apply -f storage-class-csi.yaml
View the created StorageClass.
Log on to the ACK console. In the left-side navigation pane, click Clusters.
On the Clusters page, click the name of the cluster that you want to manage and choose in the left-side navigation pane.
You can view the created StorageClass on the StorageClasses page.
Step 2: Create a PVC
Use the following template to create a file named pvc-ssd.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-ssd-b
Parameter
Description
name
The name of the PVC.
accessModes
The access mode of the PV.
volumeMode
Optional. The format in which the disk is mounted. File systems are supported.
storageClassName
The name of the StorageClass that you want to associate with the PVC.
storage
The disk size claimed by the PVC. The minimum capacity is 20 GiB.
Run the following command to create a PVC:
kubectl create -f pvc-ssd.yaml
View the created PVC.
In the left-side navigation pane of the cluster details page, choose
. You can view the created PVC on the Persistent Volume Claims page.
Step 3: Create an application
Create a file named pvc-dynamic.yaml.
Use the following template to create an application named nginx-dynamic and mount the PVC to the application:
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-dynamic spec: selector: matchLabels: app: 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: disk-pvc
Parameter
Description
mountPath
The path to which the disk is mounted.
claimName
The name of the PVC that is mounted to the application.
Run the following command to deploy the application and mount the PVC to the application:
kubectl create -f pvc-dynamic.yaml
View the deployed application.
In the left-side navigation pane of the details page, choose
. You can find the created application on the StatefulSets page.
Test whether the dynamically provisioned disk volume can be used to persist data
After a pod is deleted and recreated, the pod still stores the data that is written before the pod is deleted. Perform the following steps to test whether data is persisted to the disk:
View the pod that runs the MySQL application and the files in the disk.
Run the following command to query the pod that runs the MySQL application:
kubectl get pod | grep mysql
Expected output:
nginx-dynamic-1**** 1/1 Running 0 3m
Run the following command to check whether a new disk is mounted to the
/data
path:kubectl exec nginx-dynamic-1**** -- df | grep data
Expected output:
/dev/vdh 20511312 45080 20449848 1% /data
Run the following command to query files in the
/data
path:kubectl exec nginx-dynamic-1**** -- ls /data
Expected output:
lost+found
Create a file in the disk.
Run the following command to create a file named
mysql
in the/data
path:kubectl exec nginx-dynamic-1**** -- touch /data/mysql
Run the following command to query files in the
/data
path:kubectl exec nginx-dynamic-1**** -- ls /data
Expected output:
mysql lost+found
Run the following command to delete the pod named
nginx-dynamic-1****
:kubectl delete pod ngibnx-dynamic-1****
Expected output:
pod "nginbx-dynamic-1****" deleted
Test whether the file still exists 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 nginx-dynamic-2**b** 1/1 Running 0 2m
Run the following command to query files in the /data path of the pod:
kubectl exec nginx-dynamic-2**** -- ls /data
Expected output:
mysql lost+found
The
mysql
file still exists in the /data path. This indicates that data is persisted to the dynamically provisioned disk.