文档首页 > > 用户指南> 存储管理> 使用文件存储卷

使用文件存储卷

分享
更新时间: 2020/01/22 GMT+08:00

文件存储适用于多种使用场景,如媒体处理内容管理大数据、分析工作负载程序等。

图1 CCE挂载文件存储卷

使用说明

  • 符合标准文件协议,用户可以将文件系统挂载给服务器,像使用本地文件目录一样。
  • 数据共享,多台服务器可挂载相同的文件系统,数据可以共享操作和访问。
  • 私有网络,数据访问必须在数据中心内部网络中。
  • 单文件系统容量较高(PB级),性能极佳(ms),主要面向媒体编辑、HPC、文件共享等场景。
  • 适用于多读多写(ReadWriteMany)场景下的各种工作负载(Deployment/StatefulSet)和普通任务(Job)使用。

使用约束

  • CCE v1.7.3-r2前的集群版本不支持创建文件存储服务,请参照界面要求创建新版本集群,再使用文件存储服务。
  • CCE集群中的容器存储目前已支持加密(Kubernetes 1.13版本及以上),当前仅在部分区域(Region)提供端到端支持。

创建文件存储卷

  1. 登录CCE控制台,在左侧导航栏中选择“资源管理 > 存储管理”
  2. “文件存储卷”页签,单击“创建文件存储卷”
  3. 配置如表1基本信息。

    表1 创建文件存储基本信息配置

    参数

    参数说明

    * PVC名称

    新建PVC的名称,该PVC名称不同于卷名称,实际的卷名称在PVC创建时自动生成。

    集群名称

    文件存储部署所在的集群。

    命名空间

    选择对应的命名空间。

    总容量

    总容量是创建的单个卷的容量,使用费用按照实际使用的容量进行计费。

    访问模式

    ReadWriteMany,该卷能够以读写模式被多个节点同时加载。

    加密

    “KMS加密”默认不勾选。勾选 “KMS加密”后,若未创建委托请单击 “创建委托”,并配置如下参数:
    • 委托名称:委托表示委托方通过创建信任关系,给被委托方授予访问其资源的权限。当“委托名称”为“SFSAccessKMS”时,表示已经成功授权SFS访问KMS,授权成功后,SFS可以获取KMS密钥用来加解密文件系统。
    • 密钥名称:密钥是一种用于存储应用所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器应用中加载使用。如何创建密钥请参见创建密钥
    • 密钥ID:默认生成。

  4. 单击“立即创建”,等待创建成功。

    创建成功后,存储管理列表中会出现已创建的存储,待PVC状态为正常,表示存储已创建成功。

  5. 单击存储名称,进入存储详情页,可查看到存储的卷名称、存储容量等信息。

使用文件存储卷

  1. 参照创建无状态负载(Deployment)创建有状态负载(StatefulSet),在添加容器后,展开“数据存储”。在“云存储”页签,单击“添加云存储”
  2. 选择存储类型为“文件存储”

    表2 挂载文件存储参数配置

    参数

    参数说明

    云存储类型

    文件存储:文件存储适用于多种使用场景,包括媒体处理、内容管理、大数据和分析应用程序等。

    分配方式

    使用已有存储

    • 云存储名称:选择已创建的存储,您需要提前创建存储,创建存储步骤请参见创建文件存储卷
    • 子类型:已创建的文件存储子类型。
    • 存储容量:该容量值为PVC的属性值,若在IaaS侧实施过存储扩容后,容量值不一致是正常的。CCE1.13集群开始支持端到端容器存储扩容功能后,PVC容量才会和存储实体容量一致

    自动分配存储

    自动创建存储,需要输入存储的容量。

    • 子类型:文件存储子类型为NFS。
    • 存储容量:单位为GB。请不要超过存储容量配额,否则会创建失败。
    • 加密:勾选“KMS加密”后,配置如下参数:
      • 委托名称:委托表示委托方通过创建信任关系,给被委托方授予访问其资源的权限。当“委托名称”为“SFSAccessKMS”时,表示已经成功授权SFS访问KMS,授权成功后,SFS可以获取KMS密钥用来加解密文件系统。
      • 密钥名称:密钥是一种用于存储应用所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器应用中加载使用如何创建密钥请参见创建密钥
      • 密钥ID:默认生成。

    添加容器挂载

    配置如下参数:

    1. 子路径:输入文件存储的子路径,如:tmp。

      Kubernetes中数据卷挂载的subpath,指引用卷内的子路径而不是其根,不填写时默认为根。现只支持文件存储,必须是相对路径,且不能以“/”或“../”开头。

    2. 挂载路径:输入挂在路径,如:/tmp。
      数据存储挂载到容器上的路径,请不要挂载在系统目录下,如“ /”、“ /var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
      须知:

      挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。

    3. 设置权限。
      • 只读:只能读容器路径中的数据卷。
      • 读写:可修改容器路径中的数据卷,容器迁移时新写入的数据不会随之迁移,会造成数据丢失。

    单击“添加容器挂载”可增加多条设置,单击“确定”完成配置。

  3. 单击“确定”

导入文件存储卷

CCE支持导入已有的文件存储。

  1. 登录CCE控制台,在左侧导航栏中选择“资源管理 > 存储管理”,在“文件存储卷”页签,单击“导入”
  2. 从列表里选择要导入的文件存储。
  3. 选择需要导入文件存储的集群名称和命名空间名称,单击“确定”

解关联文件存储卷

创建或导入文件存储卷成功后,文件存储卷会自动和当前集群绑定,其它集群也可以使用该存储。解关联后,将和此集群解绑,其它集群仍然可以导入使用该文件存储卷。

若文件存储卷已被工作负载挂载,将无法和集群解关联。

  1. 登录CCE控制台,在左侧导航栏中选择“资源管理 > 存储管理”,在文件存储卷存储卷列表中,单击文件存储卷后的“解关联”
  2. 确认解关联后,单击“确定”

使用kubectl创建文件存储

CCE支持使用PersistentVolumeClaim(PVC)的形式创建文件存储。

  1. 请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令。
  2. 执行如下命令,配置名为“pvc-sfs-auto-example.yaml”的创建PVC的yaml文件。

    touch pvc-sfs-auto-example.yaml

    vi pvc-sfs-auto-example.yaml

    示例如下:

    apiVersion: v1 
    kind: PersistentVolumeClaim 
    metadata: 
      annotations: 
        volume.beta.kubernetes.io/storage-class: nfs-rw
      name: pvc-sfs-auto-example 
      namespace: default 
    spec: 
      accessModes: 
      - ReadWriteMany 
      resources: 
        requests: 
          storage: 10Gi

    其中:

    • volume.beta.kubernetes.io/storage-class:文件存储类型,当前支持标准文件协议类型(nfs-rw)。
    • name:创建的PVC名称。
    • storage:存储容量,单位为Gi。

  3. 执行如下命令创建PVC。

    kubectl create -f pvc-sfs-auto-example.yaml

    命令执行完成后会在集群所在VPC内创建一个文件存储,您可以在存储管理 > 中查看该文件系统,也可以在SFS的控制台中查看该文件系统。

使用已有文件存储创建PVC

CCE支持使用已有的文件存储来创建PersistentVolume,创建成功后,通过创建相应的PersistentVolumeClaim来绑定当前的PersistentVolume使用。

  1. 登录SFS控制台,创建一个文件存储,记录文件存储的ID、共享路径和容量。
  2. 请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令。
  3. 新建一个yaml文件,用于创建PersistentVolume。假设文件名为pv-sfs-example.yaml

    touch pv-sfs-example.yaml

    vi pv-sfs-example.yaml

    • 1.9版本集群的yaml文件配置示例:
      apiVersion: v1 
      kind: PersistentVolume 
      metadata: 
        name: pv-sfs-example 
        namespace: default 
      spec: 
        accessModes: 
        - ReadWriteMany 
        capacity: 
          storage: 10Gi 
        flexVolume: 
          driver: huawei.com/fuxinfs 
          fsType: nfs 
          options: 
            deviceMountPath: sfs-nas1.southchina.huaweicloud.com:/share-73bdfafd
            fsType: nfs 
            kubernetes.io/namespace: default 
            volumeID: f6976f9e-2493-419b-97ca-d7816008d91c 
        persistentVolumeReclaimPolicy: Delete 
        storageClassName: nfs-rw
    • 1.11及以上版本集群的yaml文件配置示例:
      apiVersion: v1 
      kind: PersistentVolume 
      metadata: 
        name: pv-sfs-example 
      spec: 
        accessModes: 
        - ReadWriteMany 
        capacity: 
          storage: 10Gi 
        flexVolume: 
          driver: huawei.com/fuxinfs 
          fsType: nfs 
          options: 
            deviceMountPath: sfs-nas1.southchina.huaweicloud.com:/share-73bdfafd
            fsType: nfs 
            volumeID: f6976f9e-2493-419b-97ca-d7816008d91c 
        persistentVolumeReclaimPolicy: Delete 
        storageClassName: nfs-rw

    其中:

    • driver:挂载依赖的存储驱动,文件存储配置为“huawei.com/fuxinfs”。
    • deviceMountPath:文件存储的共享路径,获取方式见图2
    • volumeID:文件存储的ID。
    • storage:文件存储的大小。
    • storageClassName:文件存储支持的读写方式,当前支持nfs-rw、nfs-ro。
    图2 存储详情-共享路径

    文件存储所在VPC必须与工作负载规划部署的ECS虚拟机的VPC保持一致。

  4. 创建PV。

    kubectl create -f pv-sfs-example.yaml

  5. 新建一个yaml文件,用于创建PVC。假设文件名为pvc-sfs-example.yaml

    touch pvc-sfs-example.yaml

    vi pvc-sfs-example.yaml

    • 1.9版本集群的yaml文件配置示例:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        annotations:
          volume.beta.kubernetes.io/storage-class: nfs-rw
          volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxinfs
        name: pvc-sfs-example
        namespace: default
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi
        volumeName: pv-sfs-example
        volumeNamespace: default
    • 1.11及以上版本集群的yaml文件配置示例:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        annotations:
          volume.beta.kubernetes.io/storage-class: nfs-rw
          volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxinfs
        name: pvc-sfs-example
        namespace: default
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi
        volumeName: pv-sfs-example

    其中:

    • volume.beta.kubernetes.io/storage-class:文件存储支持的读写方式,支持nfs-rw 、nfs-ro。必须和已有PV保持一致。
    • volume.beta.kubernetes.io/storage-provisioner:必须使用flexvolume-huawei.com/fuxinfs。
    • storage:存储容量,单位Gi,必须和已有pv的storage大小保持一致。
    • volumeName:PV的名称。

  6. 创建PVC。

    kubectl create -f pvc-sfs-example.yaml

使用已有PVC创建有状态工作负载

CCE支持使用已有的文件存储(PersistentVolumeClaim),创建有状态工作负载(StatefulSet)

  1. 参照创建文件存储卷中操作创建文件存储卷,记录文件存储卷名称。
  2. 请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令。
  3. 新建一个PVC文件,用于创建工作负载。假设文件名为sfs-statefulset-example.yaml

    touch sfs-statefulset-example.yaml

    vi sfs-statefulset-example.yaml

    配置示例:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: sfs-statefulset-example
      namespace: default
    spec:
      podManagementPolicy: OrderedReady
      replicas: 2
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: sfs-statefulset-example
      serviceName: qwqq
      template:
        metadata:
          annotations:
            metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
            pod.alpha.kubernetes.io/initialized: "true"
          creationTimestamp: null
          labels:
            app: sfs-statefulset-example
        spec:
          affinity: {}
          containers:
          - env:
            - name: PAAS_APP_NAME
              value: sfs-statefulset-example
            - name: PAAS_NAMESPACE
              value: default
            - name: PAAS_PROJECT_ID
              value: b7bb7d77a2974a8fa8985cbfb63f23c0
            image: nginx:latest
            imagePullPolicy: Always
            name: container-0
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /tmp
              name: pvc-sfs-example
          dnsPolicy: ClusterFirst
          imagePullSecrets:
          - name: default-secret
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
            - name: pvc-sfs-example
              persistentVolumeClaim:
                claimName: cce-sfs-demo
          tolerations:
          - effect: NoExecute
            key: node.kubernetes.io/not-ready
            operator: Exists
            tolerationSeconds: 300
          - effect: NoExecute
            key: node.kubernetes.io/unreachable
            operator: Exists
            tolerationSeconds: 300
      updateStrategy:
        type: RollingUpdate

    其中:

    • spec.template.spec.containers.volumeMounts.name和spec.template.spec.volumes.name有映射关系,必须保持一致。
    • replicas:实例数。
    • name:新建工作负载的名称。
    • image:新建工作负载使用的镜像。
    • mountPath:容器内挂载路径。
    • serviceName:工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)
    • claimName:已有PVC名称。

  4. 创建有状态工作负载。

    kubectl create -f sfs-statefulset-example .yaml

使用kubectl部署使用文件存储卷的工作负载

  1. 执行如下命令,配置名为“sfs-pod-example.yaml”的创建Pod的yaml文件。

    touch sfs-pod-example.yaml

    vi sfs-pod-example.yaml

    在无状态工作负载中基于pvc共享式使用文件存储示例:
    apiVersion: extensions/v1beta1 
    kind: Deployment 
    metadata: 
      name: sfs-pod-example                                # 工作负载名称
      namespace: default 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: sfs-pod-example 
      template: 
        metadata: 
          labels: 
            app: sfs-pod-example 
        spec: 
          containers: 
          - image: nginx 
            name: container-0 
            volumeMounts: 
            - mountPath: /tmp                                # 挂载路径
              name: pvc-sfs-example 
          restartPolicy: Always 
          volumes: 
          - name: pvc-sfs-example 
            persistentVolumeClaim: 
              claimName: pvc-sfs-auto-example                # 挂载PVC

    其中:

    • name:创建的Pod名称。
    • app:Pod工作负载名称。
    • mountPath:容器内挂载路径,此处示例中为“/tmp”
    • “spec.template.spec.containers.volumeMounts.name” 和 “spec.template.spec.volumes.name”有映射关系,必须保持一致。
    在有状态工作负载中基于PVCTemplate独占式使用文件存储示例:
    apiVersion: apps/v1
    kind: StatefulSet
    
    metadata:
      name: deploy-sfs-nfs-rw-in
      namespace: default
      generation: 1
      labels:
        appgroup: ''
      annotations:
        container.io/container-0: 'https://console.huaweicloud.com/swr/dockerimage/nginx.png'
        description: ''
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: deploy-sfs-nfs-rw-in
      template:
        metadata:
          labels:
            app: deploy-sfs-nfs-rw-in
          annotations:
            metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
            pod.alpha.kubernetes.io/initialized: 'true'
        spec:
          containers:
            - name: container-0
              image: 'nginx:1.12-alpine-perl'
              env:
                - name: PAAS_APP_NAME
                  value: deploy-sfs-nfs-rw-in
                - name: PAAS_NAMESPACE
                  value: default
                - name: PAAS_PROJECT_ID
                  value: 8190a2a1692c46f284585c56fc0e2fb9
              resources: {}
              volumeMounts:
                - name: bs-nfs-rw-mountoptionpvc
                  mountPath: /aaa
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              imagePullPolicy: IfNotPresent
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          dnsPolicy: ClusterFirst
          securityContext: {}
          imagePullSecrets:
            - name: default-secret
          affinity: {}
          schedulerName: default-scheduler
      volumeClaimTemplates:
        - metadata:
            name: bs-nfs-rw-mountoptionpvc
            creationTimestamp: null
            annotations:
              volume.beta.kubernetes.io/storage-class: nfs-rw
              volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxinfs
          spec:
            accessModes:
              - ReadWriteMany
            resources:
              requests:
                storage: 11Gi
      serviceName: wwww
      podManagementPolicy: OrderedReady
      updateStrategy:
        type: RollingUpdate
      revisionHistoryLimit: 10

    其中:

    • name:创建的工作负载名称。
    • image:工作负载的镜像。
    • mountPath:容器内挂载路径,示例中挂载到“/tmp”路径。
    • serviceName:工作负载对应的服务,服务创建过程请参见创建有状态负载(StatefulSet)
    • “spec.template.spec.containers.volumeMounts.name ”和 “spec.volumeClaimTemplates.metadata.name”有映射关系,必须保持一致。

  2. 执行如下命令创建Pod。

    kubectl create -f sfs-pod-example.yaml

    创建完成后,登录CCE控制台,在左侧导航栏中选择“存储管理 > 文件存储卷”。单击PVC名称,在PVC详情页面可查看文件存储服务和PVC的绑定关系。

相关操作

文件存储创建完成后,您还可以执行 表3中的操作。
表3 其他操作

操作

说明

删除文件存储

  1. 选择需要删除的存储名称,单击操作列的“删除”。
  2. 根据界面提示完成删除操作。

导入文件存储

CCE支持导入已有的文件存储。

  1. “文件存储卷”页签下,单击“导入”
  2. 从列表里选择要导入的文件存储。
  3. 选择需要导入文件存储的集群名称和命名空间名称。
  4. 单击“确定”
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区