Help Center/ Cloud Container Instance/ Developer Guide/ Using PersistentVolumeClaim to Apply for Persistent Storage
Updated on 2023-09-26 GMT+08:00

Using PersistentVolumeClaim to Apply for Persistent Storage

CCI supports the following persistent storage services in containers:

  • Elastic Volume Service (EVS) is a block storage service that provides three specifications: common I/O (previous-generation), high I/O (SAS), and ultra-high I/O (SSD).
  • SFS Turbo is expandable to 320 TB, and provides fully hosted shared file storage. It features high availability and durability, and supports massive quantities of small files and applications requiring low latency and high IOPS. You can use SFS Turbo in high-traffic websites, log storage, compression/decompression, DevOps, enterprise OA, and containerized applications.
  • Object Storage Service (OBS) is an object-based storage service, and provides massive, secure, highly reliable, and low-cost data storage.

EVS need to be mounted before being used. The following describes how to use EVS.

PersistentVolumeClaim (PVC)

Kubernetes provides PVC to apply for persistent storage. The PVC allows you to specify the type and capacity of storage without concerning about how to create and release underlying storage resources.

In practice, you can associate a PVC with the volume in the pod and use the persistent storage through the PVC, as shown in Figure 1.

Figure 1 Using persistent storage

Creating a PVC

  • Creating a PVC to apply for a 100-GB SAS EVS disk
    To create an encrypted EVS volume, add the paas.storage.io/cryptKeyId field in metadata.annotations.
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-evs
      namespace: namespaces-test
      annotations: {
      paas.storage.io/cryptKeyId: ee9b610c-e356-11e9-aadc-d0efc1b3bb6b
      }
    spec:
      accessModes:                  
      - ReadWriteMany
      resources:  
        requests:
          storage: 100Gi
      storageClassName: sas
    accessModes indicates the volume access modes. The following three modes are supported:
    • ReadWriteOnce: A volume can be mounted to a single node for reading and writing.
    • ReadOnlyMany: A volume can be mounted to multiple nodes for reading.
    • ReadWriteMany: A volume can be mounted to multiple nodes for reading and writing.

    storageClassName indicates the applied storage class. Currently, the following 3 storage classes are supported:

    • sas: SAS (high I/O) EVS disk
    • ssd: SSD (ultra-high I/O) EVS disk
    • nfs-rw: SFS file storage of the standard file protocol

Using a PVC

After applying for storage resources using a PVC, you can use a volume in the pod to associate the PVC and mount the volume to containers.

The following example shows how to use a PVC in a pod. A volume named pvc-test-example is defined and mounted to the /tmp/volume0 directory of the container. In this way, the data written to /tmp is written to the PVC named pvc-test.

  • Writing data to the applied SAS EVS disk
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        name: container-0
        resources:
          limits:
            cpu: 500m
            memory: 1024Mi
          requests:
            cpu: 500m
            memory: 1024Mi
        volumeMounts:                 
        - mountPath: "/tmp/volume0"   # Mount the PVC to the /tmp/volume0 directory of the container.
          name: pvc-test-example      # Volume name.
      volumes:                        # Define a volume, and associate it with the PVC.
      - name: pvc-test-example
        persistentVolumeClaim:
          claimName: pvc-test         # PVC name.
      imagePullSecrets:
      - name: imagepull-secret