You need to enable JavaScript to run this app.
导航
使用 vePFS 文件存储动态存储卷
最近更新时间:2024.07.16 10:51:29首次发布时间:2024.07.11 10:52:56

容器服务支持通过 CSI 使用 vePFS 文件存储,本文为您介绍如何通过 kubectl 命令行使用 vePFS 文件存储动态存储卷。

说明

邀测·申请试用】该功能目前处于邀测阶段,如需使用,请提交申请。

前提条件

使用限制

使用 vePFS 文件存储时,需要注意以下部署兼容性、组件卸载、服务挂载、运行性能相关限制或影响。

部署兼容性相关限制

  • 一个 vePFS 挂载服务不能同时用于 vePFS CSI 方案和主机预挂载 vePFS 方案。对一个 vePFS 文件系统实例,如果用户已经使用 VKE 节点预挂载 vePFS 并通过 hostpath 供给 Pod 的方式,需要额外创建一个 vePFS 挂载服务,将新的 vePFS 挂载服务配置给 vePFS CSI 使用。
  • 当前通过 CSI 使用 vePFS 文件存储的方案与原有 VKE 接入使用 vePFS 方案不能同时使用。因此,建议创建新集群使用 CSI 方案,若存量资源需要迁移最新 CSI 方案,请 提交工单 获取技术支持。
  • vePFS CSI controler 会被优先调度到拥有标签vepfs.csi.volcengine.com/controller=preferred的节点,如果计划对 VKE 集群节点池进行频繁扩缩容,建议 CSI controller 优先调度到常驻节点(不受扩缩容影响),以保证 vePFS CSI 可以快速及时地处理 VKE 集群和 vePFS 集群的成员一致性。否则,运行 vePFS CSI controller 的节点被缩容删除时,vePFS CSI controller 可能无法维持 VKE 和 vePFS 集群间的成员一致性,导致 vePFS CSI 后续的操作缓慢。
  • 已经以 VPC 网络加入到 vePFS 集群中的节点将无法使用 RDMA 网络。如果要切换成 RDMA 网络,请将 VKE 节点从 vePFS 文件系统集群中删除。

组件卸载相关限制

  • 若 csi-vepfs 组件被卸载,正在运行的 Pod 仍可继续访问 vePFS 存储至运行结束;但若 csi-vepfs 已经被卸载,删除 Pod 将会阻塞住,重新安装 csi-vepfs 后可继续删除 Pod。因此,不建议在 Pod 运行的时卸载 csi-vepfs 组件。
  • csi-vepfs 使文件系统客户端运行在专用容器中,vePFS 客户端将占用容器 Kubernetes 节点的计算资源(默认占用 4 CPU 和 4 GiB 内存),若节点资源紧张,csi-vepfs 客户端容器将无法启动成功,Pod 也将阻塞在创建阶段无法启动。
  • 提前删除 vePFS 挂载服务,将导致 vePFS CSI 组件无法卸载。
  • vePFS CSI 组件删除后,部分资源无法确认能否被删除,可能构成资源残留。
    • vePFS mount service secret:创建 vePFS PV 时,VKE 将一起创建一个 Secret,其中保存了 vePFS 挂载服务三个管理节点的地址和登录秘钥,可通过以下命令查询 VKE 集群中存在的上述 Secret。
    kubectl get -n kube-system secrets | grep "^vepfs-secret-mount-[0-9a-z]*"
    
    • VKE 节点上的安全组:为了保证 VKE 节点能够与 vePFS 文件系统集群互通,vePFS CSI 会同时将管理服务 ECS 的安全组添加到 VKE 节点的安全组列表中。但 CSI 卸载的过程中无法确定该安全组是否仍被用户使用,所以无法将它从 VKE 节点中解绑,用户可以通过 ECS 控制台,在安全组选项中查看和删除与 vePFS 挂载服务 ECS 节点相同的安全组。

服务挂载相关限制

  • 单个 vePFS 实例支持绑定多个挂载服务;单个挂载服务也支持绑定到多个 vePFS 实例。
  • 单个 ECS 只能加入一个 vePFS 挂载服务(相当于客户端集群),一个挂载服务可以绑定多个文件系统存储实例。
  • 一个节点仅支持绑定一个挂载服务,因此,推荐一个 VKE 集群绑定一个 vePFS 挂载服务。
  • 由于存储类动态制备存储卷基于 Fileset 实现,因此,1 个存储类默认最多创建 10 个 PV。Fileset 相关更多使用限制参见:Fileset 注意事项
  • vePFS 暂不支持使用 veLinux CentOS 兼容版镜像。

运行性能相关限制

  • 在一个 vePFS 文件系统内创建动态卷的过程是串行的,如果同时创建的动态卷较多,创建完成的耗时将比较久。
  • 第一次在节点上启动使用 vePFS 的容器相比后续启动速度慢 15 秒左右。因为vePFS CSI 需要在节点上为 vePFS 编译内核驱动,编译过程引入了更多的耗时,但是这个耗时仅仅发生在第一次创建使用 vePFS 卷的容器的过程中。

操作步骤

步骤一:创建 StorageClass

  1. 创建 StorageClass 的 YAML 文件。示例文件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

步骤二:创建 PVC

  1. 创建 PVC 的 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 名称。
  1. 执行以下命令,创建 PVC。
    kubectl create -f vke-vepfs-pvc.yaml
    
  2. 执行以下命令,查看 PVC 声明的动态卷是否创建成功并绑定。
    kubectl get pvc
    
    预期输出结果如下,表示 vepfs 通过配置 StorageClass 完成了 PVC 与 PV 的动态绑定成功。
    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   
    csi-vepfs-pvc    Bound    pvc-6e8c646b-e3e9-4d02-836e-3b66********   20Gi       RWX            vke-vepfs-sc      
    

步骤三:创建 Deployment

  1. 创建 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 名称。
    
  2. 执行以下命令创建 Deployment。

kubectl apply -f deployment-nginx-dynamic.yaml

注意

创建工作负载过程中,会优先在节点上启动一个用于挂载 vePFS 客户端的专用容器,vePFS 客户端将占用容器 Kubernetes 节点的计算资源(默认占用 4 CPU 和 4 GiB 内存),若节点资源紧张,csi-vepfs 客户端容器将无法启动成功,Pod 也将阻塞在创建阶段无法启动。

相关文档