容器服务支持通过 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]*"
可根据实际情况选择控制台或 kubectl 命令行方式使用 vePFS 文件存储静态存储卷。
已经登录 容器服务控制台 的情况下,可直接通过控制台使用 vePFS 文件存储静态存储卷。
配置项 | 说明 |
---|---|
创建方式 | 选择存储卷的创建方式,目前支持 静态创建。 |
名称 | 自定义存储卷的名称,需确保存储卷名称在集群内唯一。 |
存储类型 | 存储卷类型包括:云盘、文件存储、对象存储等。本场景选择 vePFS 文件存储。 |
访问模式 | 存储卷的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。 |
规格 | 选择创建存储卷使用的文件系统规格,目前支持:100 MB/s/TiB、性能版,更多详细介绍参见:vePFS 产品规格。 说明 【邀测·申请试用】智算版规格目前处于邀测阶段,如需使用,请提交申请。 |
项目 | 按需选择创建存储卷的项目,默认为:default 项目。 |
文件系统 | 根据实际需求,依次选择已经创建的 vePFS 文件系统、挂载服务、安全组,以及配置挂载服务的高级配置。 |
挂载服务:按需选择文件系统绑定的挂载服务。 注意
| |
高级配置:配置挂载服务相关高级配置,可展示和配置以下参数
注意 若密码不正确将导致 vePFS 无法挂载,请务必确保密码准确无误。 | |
安全组:按需选择挂载服务客户端安全组 |
配置项 | 说明 |
---|---|
命名空间 | 选择存储卷声明所属的命名空间。建议选择自定义的命名空间,或系统默认创建的 default 命名空间。命名空间详细介绍参见:命名空间概述。 |
名称 | 自定义存储卷声明的名称,需确保存储卷声明名称在集群内唯一。 |
存储类型 | 存储卷类型包括:云盘、文件存储、对象存储等。本场景选择 vePFS 文件存储。 |
访问模式 | 存储卷的访问方式,目前支持 ReadWriteMany ,此访问方式支持多点读写。 |
计费类型 | 按需选择资源计费类型,目前仅支持 按量计费。 |
规格 | 选择创建存储卷使用的文件系统规格,目前支持:100 MB/s/TiB、性能版,更多详细介绍参见:vePFS 产品规格。 说明 【邀测·申请试用】智算版规格目前处于邀测阶段,如需使用,请提交申请。 |
创建方式 | 存储卷声明的创建方式包括:基于存储类创建、使用已有存储卷。本场景选择 使用已有存储卷。 |
存储卷 | 指定 vePFS 文件存储类型的存储卷进行关联挂载,本场景选择步骤一中创建的存储卷。 |
vePFS 文件存储类型的静态存储卷创建完成后,可通过添加卷的方式挂载到工作负载使用,包括:无状态负载、有状态负载、任务、定时任务、守护进程。
可通过创建工作负载或更新工作负载操作的容器配置步骤,为工作负载添加卷并挂载卷。详细操作参见:工作负载。
已经 连接集群 的情况下,可通过 kubectl 命令行使用 vePFS 文件存储静态存储卷。
依次执行以下命令,将 vepfs 管理节点的 ssh 连接鉴权信息写在 secret 中。
说明
以下示例中的 address、password、hostname 仅做演示,请根据实际场景替换为真实配置。
echo -n '[ { "address":"10.244.0.1", "password":"sshpassword", "hostname":"i-host1" }, { "address":"10.244.0.2", "password":"sshpassword", "hostname":"i-host2" }, { "address":"10.244.0.3", "password":"sshpassword", "hostname":"i-host3" } ]' > /tmp/vepfs-hots.json kubectl create secret generic vepfs-secret --namespace kube-system --from-file=vepfsHosts=/tmp/vepfs-hots.json
vke-vepfs-static-pv.yaml
。支持挂载整个文件系统或文件系统子目录,可根据实际情况按需选择。apiVersion: v1 kind: PersistentVolume metadata: name: vepfs-static-pv # PV 名称,建议 PV name 集群内唯一。 namespace: default annotations: pv.kubernetes.io/provisioned-by: vepfs.csi.volcengine.com spec: volumeMode: Filesystem accessModes: # 访问方式,ReadWriteMany:多点读写。 - ReadWriteMany capacity: storage: 20Gi # 声明的存储容量,Kubernetes 必填字段,但对 vePFS 没有意义,仅作为校验参数必填。 persistentVolumeReclaimPolicy: Retain # PV 回收策略。Retain 表示保留策略,Delete 表示删除策略。 csi: driver: vepfs.csi.volcengine.com # 驱动类型,本示例为 vepfs.csi.volcengine.com ,表示火山引擎 csi-vepfs 插件。 readOnly: false nodeStageSecretRef: # Secret 对应的不同 vepfs 挂载服务。 name: vepfs-secret namespace: kube-system controllerPublishSecretRef: name: vepfs-secret namespace: kube-system volumeAttributes: fsid: vepfs-cnbjexxxxac6e7b3 # 文件系统的 ID。 hpcClusterID: vepfs-cluster-id-xxx # HPC 集群 ID,仅 fsid 使用智算版时需要绑定 HPC 集群。 mountServiceID: mount-ff0b**** # 挂载服务。 securityGroupID: msadgh-14332 # vePFS 挂载点客户端安全组。 # pass resource request and limit value # memoryRequest: 4Gi # memoryLimit: mountpoint: /vepfs-cnglxxxxx279f1b7 # 挂载点。 volumeHandle: vepfs-cnbjexxxxac6e7b3 # PV 的唯一标识符,要求与 fsid 保持一致。
注意
apiVersion: v1 kind: PersistentVolume metadata: name: vepfs-static-pv # PV 名称,建议 PV name 集群内唯一。 namespace: default annotations: pv.kubernetes.io/provisioned-by: vepfs.csi.volcengine.com spec: volumeMode: Filesystem accessModes: # 访问方式,ReadWriteMany:多点读写。 - ReadWriteMany capacity: storage: 20Gi # 声明的存储容量,Kubernetes 必填字段,但对 vePFS 没有意义,仅作为校验参数必填。 persistentVolumeReclaimPolicy: Retain # PV 回收策略。Retain 表示保留策略,Delete 表示删除策略。 csi: driver: vepfs.csi.volcengine.com # 驱动类型,本示例为 vepfs.csi.volcengine.com ,表示火山引擎 csi-vepfs 插件。 readOnly: false nodeStageSecretRef: # Secret 对应的不同 vepfs 挂载服务。 name: vepfs-secret namespace: kube-system controllerPublishSecretRef: name: vepfs-secret namespace: kube-system volumeAttributes: fsid: vepfs-cnbjexxxxac6e7b3 # 文件系统的 ID。 hpcClusterID: vepfs-cluster-id-xxx # HPC 集群 ID,仅 fsid 使用智算版时需要绑定 HPC 集群。 mountServiceID: mount-ff0b**** # 挂载服务。 securityGroupID: msadgh-14332 # vePFS 挂载点客户端安全组。 # pass resource request and limit value # memoryRequest: 4Gi # memoryLimit: mountpoint: /vepfs-cnglxxxxx279f1b7 # 挂载点。 subpath: /l1.dir1/l2.dir1 # 挂载文件系统的子目录,务必使用已经创建的 vePFS 文件系统子目录。 volumeHandle: /l1.dir1/l2.dir1@vepfs-cnbjexxxxac6e7b3 # PV 的唯一标识符,按照格式 ${subpath}@${fsid} 定义,不同 PV 的 volumeHandle 不能相同。
kubectl create -f vke-vepfs-static-pv.yaml
vke-vepfs-static-pvc.yaml
代码如下:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: vepfs-static-pvc # PVC 名称。 namespace: default # PVC 所属的命名空间。 spec: accessModes: # PVC 访问方式。目前仅支持 ReadWriteMany ,表示多点读写。 - ReadWriteMany resources: requests: storage: 20Gi # 声明的存储容量,Kubernetes 必填字段,但对 vePFS 没有意义,仅作为校验参数必填。 volumeName: vepfs-static-pv # 绑定到该 PVC 的 PV 名称。
kubectl create -f vke-vepfs-static-pvc.yaml
kubectl get pvc
预期输出结果如下,表示 PVC 与 PV 静态绑定成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE vke-vepfs-static-pvc Bound vke-vepfs-static-pv 10Pi RWX 2m36s
创建 Deployment 的 YAML 文件。示例文件deployment-nginx-static.yaml
代码如下:
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nginx-static 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-static-pvc # 步骤二中创建的 PVC 名称。
执行以下命令创建 Deployment。
kubectl apply -f deployment-nginx-static.yaml
注意
创建工作负载过程中,会优先在节点上启动一个用于挂载 vePFS 客户端的专用容器,vePFS 客户端将占用容器 Kubernetes 节点的计算资源(默认占用 4 CPU 和 4 GiB 内存),若节点资源紧张,csi-vepfs 客户端容器将无法启动成功,Pod 也将阻塞在创建阶段无法启动。