容器服务支持通过 CSI 使用 vePFS 文件存储,本文为您介绍如何创建 vePFS 文件存储类型的存储卷和存储卷声明,以及工作负载如何使用 vePFS 文件存储动态存储卷。
说明
【邀测·申请试用】使用 vePFS 文件存储动态存储卷功能 和 智算版规格 目前均处于邀测阶段,如需使用,请提交申请。
使用 vePFS 文件存储时,需要注意以下部署兼容性、组件卸载、服务挂载、运行性能相关限制或影响。
vepfs.csi.volcengine.com/controller=preferred
的节点,如果计划对 VKE 集群节点池进行频繁扩缩容,建议 CSI controller 优先调度到常驻节点(不受扩缩容影响),以保证 vePFS CSI 可以快速及时地处理 VKE 集群和 vePFS 集群的成员一致性。否则,运行 vePFS CSI controller 的节点被缩容删除时,vePFS CSI controller 可能无法维持 VKE 和 vePFS 集群间的成员一致性,导致 vePFS CSI 后续的操作缓慢。kubectl get -n kube-system secrets | grep "^vepfs-secret-mount-[0-9a-z]*"
已经登录 容器服务控制台 的情况下,可直接通过控制台使用 vePFS 文件存储动态存储卷。
配置项 | 说明 |
---|---|
名称 | 自定义存储类名称,需确保存储类名称在集群内唯一。 |
存储类型 | 存储类型包括:云盘、文件存储等。本场景选择 vePFS 文件存储。 |
可用区 | 可用区是同一地域下电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 |
计费类型 | 按需选择资源计费类型,目前支持按量计费。 |
规格 | 选择创建存储卷使用的文件系统规格,目前支持:100 MB/s/TiB、性能版,更多详细介绍参见:vePFS 产品规格。 说明 【邀测·申请试用】智算版规格目前处于邀测阶段,如需使用,请提交申请。 |
项目 | 按需选择创建存储类的项目,默认为:default 项目。 项目管理是火山引擎提供的一种资源管理方式,可以对不同业务或项目使用的云资源进行分组管理。更多详细介绍参见:项目管理。 |
文件系统 | 根据实际需求,依次选择已经创建的 vePFS 文件系统、挂载服务、安全组,以及配置挂载服务的高级配置。 |
挂载服务:按需选择文件系统绑定的挂载服务。 | |
注意
| |
高级配置:配置挂载服务相关高级配置,可展示和配置以下参数。
注意 若密码不正确将导致 vePFS 无法挂载,请务必确保密码准确无误。 | |
安全组:按需选择挂载服务客户端安全组。 该安全组将通过跨服务授权自动加入到用户节点主网卡,从而实现用户节点加入挂载服务集群的目的,使用户集群与 vePFS Server 连通。 | |
文件集 | 根据实际情况为 Fileset 设置需要配额,避免单一 Fileset 占用过多的资源,包括:文件数配额、带宽 QoS、IOPS QoS。 说明 文件数配额不能超过 iNode 上限。 |
回收策略 | 回收策略,包括:Delete、Retain。如果数据安全性要求高,推荐使用 Retain 方式以免误删数据。
|
存储卷绑定模式 | 绑定模式。包括:Immediate、WaitForFirstConsumer。
|
配置项 | 说明 |
---|---|
命名空间 | 选择存储卷声明所属的命名空间。建议选择自定义的命名空间,或系统默认创建的 default 命名空间。命名空间详细介绍参见:命名空间概述。 |
名称 | 自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。 |
存储类型 | 存储卷类型包括:云盘、文件存储、对象存储等。本场景选择 vePFS 文件存储。 |
访问模式 | 存储卷的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。 |
计费类型 | 按需选择资源计费类型,目前仅支持 按量计费。 |
规格 | 选择创建存储卷使用的文件系统规格,目前支持:100 MB/s/TiB、性能版,更多详细介绍参见:vePFS 产品规格。 说明 【邀测·申请试用】智算版规格目前处于邀测阶段,如需使用,请提交申请。 |
创建方式 | 存储卷声明的创建方式包括:基于存储类创建、使用已有存储卷。本场景选择 基于存储类创建。 |
存储类 | 根据实际需求选择合适的存储类。创建应用时,将自动绑定具有相同存储类且容量不小于当前 PVC 设置容量的存储卷。 |
容量 | 声明的存储使用量。 |
vePFS 文件存储类型的动态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作参见:工作负载。
注意
创建工作负载过程中,会优先在节点上启动一个用于挂载 vePFS 客户端的专用容器,vePFS 客户端将占用容器 Kubernetes 节点的计算资源(默认占用 4 CPU 和 4 GiB 内存),若节点资源紧张,csi-vepfs 客户端容器将无法启动成功,Pod 也将阻塞在创建阶段无法启动。
已经 连接集群 的情况下,可通过 kubectl 命令行使用 vePFS 文件存储动态存储卷。
vke-vepfs-sc.yaml
代码如下:说明
创建 vePFS PV 时,VKE 将一起创建一个 Secret,其中保存了 vePFS 挂载服务三个管理节点的地址和登录秘钥。可通过adminHostsSecretName
参数自定义 Secret 名称,也可通过以下命令查询 VKE 集群中存在的上述 Secret。
kubectl get -n kube-system secrets | grep "^vepfs-secret-mount-[0-9a-z]*"
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: vke-vepfs-sc # StorageClass 名称。 provisioner: vepfs.csi.volcengine.com # 驱动类型,本示例为 vepfs.csi.volcengine.com ,表示火山引擎 csi-vepfs 插件。 parameters: fsid: vepfs-cngl4af4e6xxx # 文件系统的 ID。 mountServiceID: mount-d4c4xxx # 挂载服务。 fileLimit: "100000" # 文件数配额。 # integer type maxIOPS: "" # IPOS # unit: MB/s, integer type. Example maxBandwidth=300 maxBandwidth: "" # QOS mountpoint: /vepfs-cngl4af4e6f53d9b # 挂载点。 securityGroupID: sg-2d6l45xea969s58ozfdmahllx # vePFS 挂载点客户端安全组。 memoryRequest: 4Gi cpuRequest: "4" adminHostsSecretName: vepfs-admin-hosts # Secret 名称。创建 vePFS PV 时,VKE 将创建此 Secret,其中保存了 vePFS 挂载服务三个管理节点的地址和登录秘钥。 adminHostsSecretNamespace: kube-system reclaimPolicy: Delete # 回收策略。Retain 表示保留策略,Delete 表示删除策略。 volumeBindingMode: Immediate # 卷绑定模式,Immediate:立即绑定和分配;WaitForFirstConsumer:延迟存储卷的绑定和分配。
2.执行以下命令,创建 StorageClass。
kubectl create -f vke-vepfs-sc.yaml
vke-vepfs-pvc.yaml
代码如下:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-vepfs-pvc # PVC 名称。 namespace: default spec: accessModes: # 访问模式,ReadWriteMany:多点读写。 - ReadWriteMany resources: requests: storage: 20Gi # 声明应用存储使用量。 storageClassName: vke-vepfs-sc # 步骤一中创建的 StorageClass 名称。
kubectl create -f vke-vepfs-pvc.yaml
预期输出结果如下,表示 vepfs 通过配置 StorageClass 完成了 PVC 与 PV 的动态绑定成功。kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS csi-vepfs-pvc Bound pvc-6e8c646b-e3e9-4d02-836e-3b66******** 20Gi RWX vke-vepfs-sc
创建 Deployment 的 YAML 文件。示例文件deployment-nginx-dynamic.yaml
代码如下:
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nginx-dynamic spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-c1 image: cr-cn-beijing.volces.com/****/vci-demo-nginx:latest # 指定需要部署的镜像文件。 ports: - containerPort: 80 name: nginx volumeMounts: - name: vepfs mountPath: /mnt/vepfs # vePFS 在容器中挂载的位置。 volumes: - name: vepfs persistentVolumeClaim: claimName: vepfs-dynamic-pvc # 步骤二中创建的 PVC 名称。
执行以下命令创建 Deployment。
kubectl apply -f deployment-nginx-dynamic.yaml
注意
创建工作负载过程中,会优先在节点上启动一个用于挂载 vePFS 客户端的专用容器,vePFS 客户端将占用容器 Kubernetes 节点的计算资源(默认占用 4 CPU 和 4 GiB 内存),若节点资源紧张,csi-vepfs 客户端容器将无法启动成功,Pod 也将阻塞在创建阶段无法启动。