本文介绍如何创建文件存储类型存储卷和存储卷声明,以及工作负载如何使用文件存储动态存储卷。
有状态负载需要独占一个卷,暂不支持使用手动创建的存储卷声明。
使用文件存储类型动态存储卷的详细操作步骤和参数配置如下:
配置项 | 说明 |
---|---|
名称 | 根据系统提示自定义存储类名称,需确保存储类名称在集群内唯一。 |
存储类型 | 存储类型包括:云盘、文件存储。本场景选择 文件存储。 |
可用区 | 可用区是同一地域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 |
计费类型 | 按需选择资源计费类型,目前支持按量计费。 |
文件系统类型 | 按需选择文件存储的文件系统类型。
说明 缓存型文件存储在容器服务属于邀测功能但无需额外申请权限;在文件存储 NAS 产品属于邀测特性。若需要使用此功能,需获取文件存储 NAS 的邀测使用权限。
|
挂载点 | 选择已有 NAS 文件系统下存在的挂载点。 |
子目录 | 根据系统提示的输入规则,输入待挂载的文件系统的子目录信息。默认为根目录为 说明 需要保证将要挂载的子目录在 NFS 中已经存在。 |
NFS 版本 | 选择所创建存储卷的网络文件系统(Network File System)版本,请按实际需求选择使用。
|
回收策略 | 回收策略,包括:Delete、Retain。如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。
|
存储卷模式绑定 | 绑定模式。包括:Immediate、WaitForFirstConsumer。
|
配置项 | 说明 |
---|---|
命名空间 | 选择存储卷声明所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。 |
名称 | 根据系统提示自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。 |
存储类型 | 存储类型包括:云盘、文件存储、对象存储。本场景选择 文件存储。 |
访问模式 | 选择存储卷声明的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。 |
计费类型 | 按需选择资源计费类型,目前支持按量计费。 |
文件系统类型 | 选择文件存储的文件系统类型,要求与存储类中配置的文件系统类型保持一致。
说明 缓存型文件存储在容器服务属于邀测功能但无需额外申请权限;在文件存储 NAS 产品属于邀测特性。若需要使用此功能,需获取文件存储 NAS 的邀测使用权限。
|
创建方式 | 存储卷声明的创建方式包括:基于存储类创建、使用已有存储卷。本场景选择 基于存储类创建。 |
存储类 | 自动绑定具有相同存储类,且容量大于或等于当前 PVC 设置的容量大小的存储卷。 |
容量 | 声明的应用存储使用量。Kubernetes 必填字段,但此处设置的容量值不会限制应用实际使用量,实际容量仅跟文件系统容量有关。 |
说明
系统按照 PVC 中的资源声明动态创建 PV 时,会在已关联的 NAS 挂载点下创建一个子目录。后续 Pod 使用该 PV 时会挂载该子目录。
文件存储类型的动态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作,请参见 工作负载。
vke-nas-sc.yaml
代码如下:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: vke-nas-sc # StorageClass 名称。 mountOptions: - nolock,proto=tcp,noresvport - vers=3 # 挂载 NAS 数据卷的 NFS 协议版本号。3 表示 NFSv3,极速型和容量型支持使用此版本;4.1 表示 NFSv4.1,缓存型仅支持使用此版本。 parameters: ChargeType: PostPaid # 计费类型,目前仅支持 PostPaid 按量计费。 archiveOnDelete: "true" # 删除策略,true:延迟删除,PV 和 NAS 文件数据将存档,不会被删除;false:立即删除,PV 和 NAS 文件数据会被真正删除。 fsId: enas-cnbj1b9f32****** # (可选)NAS 文件系统 ID,仅当文件系统类型为极速型时支持配置,可根据实际场景按需配置。注意:如需配置,请确保 NAS 中已经存在此 fsid 路径,否则将导致挂载失败。 fsType: Extreme # 文件系统类型,Extreme:极速型;Cache:缓存型;Capcity:容量型。 server: cnbj1b9f32******.r*********.nas.ivolces.com # 创建子目录类型的 PV 时,NAS 文件系统的挂载点地址。 subPath: /sub # 子目录路径。 volumeAs: subpath # 创建的子目录类型。subpath:子路径;filesystem:文件系统。 provisioner: nas.csi.volcengine.com # 驱动类型,本示例为 nas.csi.volcengine.com,表示火山引擎 csi-nas 插件。 reclaimPolicy: Delete # 回收策略,Delete:删除策略,与 archiveOnDelete 配合使用;Retain:保留策略,删除 PVC 时 PV 和关联的文件系统不会删除,需手动删除。 volumeBindingMode: Immediate # 卷绑定模式,Immediate:立即绑定和分配;WaitForFirstConsumer:延迟存储卷的绑定和分配。
2.执行以下命令,创建 StorageClass。
kubectl create -f vke-nas-sc.yaml
vke-nas-pvc.yaml
代码如下:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-nas-pvc # PVC 名称。 namespace: default spec: accessModes: # 访问模式,ReadWriteMany:多点读写。 - ReadWriteMany resources: requests: storage: 20Gi # 声明应用存储使用量。Kubernetes 必填字段,但此处设置的容量值不会限制应用实际使用量,实际容量仅跟文件系统容量有关。 storageClassName: vke-nas-sc # 步骤一中创建的 StorageClass 名称。
kubectl create -f vke-nas-pvc.yaml
预期输出结果如下:kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS csi-nas-pvc Pending pvc-6e8c646b-e3e9-4d02-836e-3b66******** 20Gi RWX vke-nas-sc
vke-dynamic-nas-deployment.yaml
代码如下:说明
如果有使用弹性容器实例 VCI 的需求,需要在spec.template.metadata.annotations
中添加 vke.volcengine.com/burst-to-vci: enforce
。VCI 具备全托管免运维、按需付费、沙箱容器安全隔离等优势。详细介绍,请参见 什么是弹性容器实例。
apiVersion: apps/v1 kind: Deployment metadata: name: dynamic-nas-deploy spec: replicas: 1 selector: matchLabels: app: dynamic-nas-deploy template: metadata: labels: app: dynamic-nas-deploy spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: nginx volumeMounts: - mountPath: /tmp # NAS 在容器中挂载的位置。 name: nas-pv volumes: - name: nas-pv persistentVolumeClaim: claimName: vke-nas-pvc # 步骤二中创建的 PVC 名称。
kubectl create -f vke-dynamic-nas-deployment.yaml