容器服务支持通过 CSI 使用 vePFS 文件存储,本文为您介绍如何通过 kubectl 命令行使用 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]*"
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 也将阻塞在创建阶段无法启动。