文档首页> 云容器实例 CCI> 开发指南> 使用PersistentVolumeClaim申请持久化存储
更新时间:2023-09-26 GMT+08:00

使用PersistentVolumeClaim申请持久化存储

云容器实例当前支持在容器中使用如下三种持久化存储。

  • 云硬盘(Elastic Volume Service,EVS),EVS是一种块存储服务,提供高I/O(sas)、超高I/O(ssd)和普通I/O(上一代产品)三种类型云硬盘。
  • SFS Turbo为用户提供一个完全托管的共享文件存储,能够弹性伸缩至320TB规模,具备高可用性和持久性,为海量的小文件、低延迟高IOPS型应用提供有力支持。适用于多种应用场景,包括高性能网站、日志存储、压缩解压、DevOps、企业办公、容器应用等。
  • 对象存储服务(Object Storage Service,OBS),OBS是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。

EVS的使用有个挂载的过程,下面将介绍如何使用EVS。

PersistentVolumeClaim(PVC)

Kubernetes提供PVC专门用于持久化存储的申请,PVC可以让您无需关心底层存储资源如何创建、释放等动作,而只需要申明您需要何种类型的存储资源、多大的存储空间。

在实际使用中,您可以通过Pod中的Volume来关联PVC,通过PVC使用持久化存储,如图1所示。

图1 使用持久化存储

创建PVC

  • 通过如下定义创建PVC,这个定义申请了一块大小为100G的SAS型云硬盘。
    如果需要创建加密类型的云硬盘存储卷,在metadata.annotations中增加paas.storage.io/cryptKeyId字段即可。
    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为存储访问模式,支持如下3种模式:
    • ReadWriteOnce:可以被单个节点以读/写模式挂载
    • ReadOnlyMany:可以被多个节点以只读模式挂载
    • ReadWriteMany:可以被多个节点以读/写模式挂载

    storageClassName表示申请的存储类型,当前支持如下3个参数:

    • sas:SAS(高I/O)型EVS硬盘
    • ssd:SSD(超高I/O)型EVS硬盘
    • nfs-rw:标准文件协议类型SFS文件存储

使用PVC

使用PVC申请到存储资源后,您可以在Pod中使用Volume来关联PVC,并将Volume挂载到容器中使用。

下面是的示例中说明了PVC如何在Pod中使用,这个Pod定义了一个名为“pvc-test-example”的Volume,并将这个Volume挂载到容器的“/tmp/volume0”路径,这样您写入到/tmp的数据就是写到名为pvc-test的PVC中。

  • 写入上面申请的sas型云硬盘中
    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"   # 将PVC挂载到容器的/tmp/volume0路径
          name: pvc-test-example      # Volume的名称
      volumes:                        # 定义Volume,关联PVC
      - name: pvc-test-example
        persistentVolumeClaim:
          claimName: pvc-test         # PVC的名称
      imagePullSecrets:
      - name: imagepull-secret