You need to enable JavaScript to run this app.
导航

VKE 接入使用 vePFS

最近更新时间2023.09.07 10:26:56

首次发布时间2023.02.15 17:37:26

本文主要描述容器服务中的节点,接入火山引擎文件存储 vePFS 功能的操作。

说明

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

背景信息

文件存储 vePFS 是火山引擎推出的一种高吞吐、低延时、可扩展并行的文件系统服务,满足高性能计算场景下高吞吐低延时的数据读写需求。vePFS 更多介绍参见:什么是文件存储 vePFS

VKE 集群通过部署 vePFS-Manager 组件监听 VKE Node 的变化,动态挂载、卸载同 VPC 下的 vePFS 集群。

前提条件

已有任意产品规格的火山引擎镜像仓库实例。详情请参见:镜像仓库产品规格

使用限制

  • 同一集群目前暂不支持挂载多个 vePFS。
  • 内核版本为 5.10.x 的 AMD 机型暂不支持挂载 vePFS,例如:计算规格为 g3a、c3a 的节点。更多 vePFS 使用限制参见:约束限制

操作步骤

  1. 创建 vePFS 文件系统。详细操作,请参见:创建文件系统

  2. 准备 vePFS Manager 镜像和 Chart 包。

    1. 在火山引擎镜像仓库 CR 中上传 vePFS Manager 镜像。示例代码如下,详细操作,请参见:推送和拉取镜像

      注意

      下方为示例代码,详细的 vePFS Manager 镜像地址和版本号,请联系您 VKE 业务对接人员获取。

      # 登录镜像仓库,需要输入密码
      docker login --username={AccountName}@{AccountID} {volcCrDomain}
      
      # 拉取镜像到本地
      docker pull cr-cn-beijing.volces.com/vke/vepfs-manager:v0.6.3
      
      # 上传镜像到用户镜像仓库服务
      docker tag [ImageId] {volcCrDomain}/{namespace}/vepfs-manager:v0.6.3
      docker push {volcCrDomain}/{namespace}/vepfs-manager:v0.6.3
      
    2. 在火山引擎镜像仓库 CR 中上传 vePFS Manager Chart。不同的 Helm 版本使用不同的 Chart 包,推送和拉取 Chart 详细介绍参见:推送和拉取 Chart

    说明

    针对不同 Helm 版本提供以下两个 Chart 包,不同 Helm 版本请使用对应的 Chart 包:

    • Helm 3.7 之前版本使用的 Chart 包:prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager:v0.3.0-helm36-chart
    • Helm 3.7 及之后版本使用的 Chart 包:prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager:v0.3.0-chart
    • Helm 3.7 之前版本上传 vePFS Manager Chart 的示例代码如下:
    # 1. 拉取 Chart 包
    # 从公共 Helm 仓库拉取 Chart 包(公网使用)。
    helm chart pull prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager:v0.3.0-helm36-chart
    helm chart export prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager:v0.3.0-helm36-chart \
    --destination ./		
    # 2. 开启 OCI 使用支持
    export HELM_EXPERIMENTAL_OCI=1		
    # 3. 登录用户火山引擎镜像仓库实例
    helm registry login --username={AccountName}@{AccountID} {volcCrDomain}		
    # 4. 打包并推送 Chart 包
    helm chart save ./vepfs-manager {volcCrDomain}/{namespace}/vepfs-manager:v0.3.0-helm36-chart
    # 解析域名,如果解析不了,请在 hosts 文件中配置
    helm chart push {volcCrDomain}/{namespace}/vepfs-manager:v0.3.0-helm36-chart
    
    • Helm 3.7 及之后版本上传 vePFS Manager Chart 的示例代码如下:
    # 1. 拉取 Chart 包
    # 从公共 Helm 仓库拉取 Chart 包(公网使用)。
    helm pull oci://prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager --version v0.3.0-chart
    helm chart export prod-vke-enterprise-lf-cn-beijing.cr.volces.com/vke/vepfs-manager:v0.3.0-chart \
    --destination ./		
    # 2. 开启 OCI 使用支持
    export HELM_EXPERIMENTAL_OCI=1		
    # 3. 登录用户火山引擎镜像仓库实例
    helm registry login --username={AccountName}@{AccountID} {volcCrDomain}		
    # 4. 打包并推送 Chart 包
    helm package vepfs-manager --version v0.3.0-chart
    # 解析域名,如果解析不了,请在 hosts 文件中配置
    helm push vepfs-manager-v0.3.0-chart.tgz oci://{cr-instance}-cn-beijing.cr.volces.com/{namespace}
    
  1. 创建 VKE 集群。详细操作,请参见:创建集群
  2. 使用 YAML 为集群创建保密字典和配置项。
    • 保密字典(Secret):vePFS 客户端密码,用于 SSH 登录到 vePFS 节点。
      apiVersion: v1
      kind: Secret
      metadata:
        name: vepfs-secret
        namespace: user-namespace  # 替换为您的已有命名空间名称
      stringData:
        # vePFS 客户端管理节点登录密码
        password: "******"
        # vePFS 客户端管理/mnt/vepfs集群节点登录私钥(登录密码和登录私钥至少配置一个)
        #privateKey: "******"
      
      登录 vePFS 控制台,查看已创建文件系统下的 vePFS 客户端管理节点登录密码。
      alt
    • 保密字典(Secret):配置火山引擎账号 Access Key(包含 AK/SK),用于授权调用相关接口。
      apiVersion: v1
      kind: Secret
      metadata:
        name: auth-secret
        namespace: kube-system
      stringData:
        # 火山引擎账号 AccessKeyID
        AccessKeyID: "******"
        # 火山引擎账号 Secret Access Key
        SecretAccessKey: "******"
      
      参考 访问密钥(Access Key)帮助文档 获取火山引擎账号 Access Key。
    • 配置项(ConfigMap):用于记录 vePFS 集群信息和 NodeSelector 等信息。
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: vepfs-config
        namespace: kube-system
      data:
        config.json: |-
          {
          "authSecret": "kube-system/auth-secret",
          "clusters": [
            {
              "name": "vepfs-cluster",   # 已创建的 VKE 集群名称
              "clients": [         # vePFS 客户端管理节点私网 IP
                "192.168.**.**",
                "192.168.**.**",
                "192.168.**.**"
              ],
              "secret": "{user-namespace}/{secret-name}",
              "securityGroupID": "****",   # vePFS 客户端管理节点已关联的安全组 ID
              "nodeSelector": {
                 "labelKey": "labelValue"
              }
            }
          ]
          }
      
  3. 部署 vePFS Manager 组件。
    • 方法一:应用部署(您本地 Helm 版本为 3.7 之前版本时使用该方法)
      容器服务控制台应用中心 创建一个 Helm 应用并通过values.yaml文件配置环境及镜像参数。values.yaml文件示例代码如下所示。详细操作,请参见:创建 Helm 应用
      alt
      platformConfig:
        ## Container registry for all images involved in the chart
        imageRegistry: {volcCrDomain}
        ## Container repository for platform components
        imageRepositoryRelease: {crInstance}
      
      image:
        tag: v0.6.3
      
      extraArgs:
        # TOP configurations
        controller-iam-top-address: "open.volcengineapi.com"
        controller-region: "cn-beijing"
        # pod image
        controller-vepfs-helper-pod-image: "{volcCrDomain}/{namespace}/vepfs-manager:v0.6.3"
      
    • 方法二:应用部署(您本地 Helm 版本为 3.7 及之后版本时使用该方法)。示例代码如下所示。
      helm install vepfs-manager ./vepfs-manager \
      --set platformConfig.imageRegistry={volcCrDomain} \
      --set platformConfig.imageRepositoryRelease={crInstanceName} \
      --set image.tag=v0.6.3 \
      --set extraArgs.controller-region=cn-beijing \
      --set extraArgs.controller-iam-top-address=open.volcengineapi.com \
      --set extraArgs.controller-vepfs-configmap=kube-system/vepfs-config \
      --set extraArgs.controller-vepfs-helper-pod-image={volcCrDomain}/{namespace}/vepfs-manager:v0.6.3
      
    VePFS manager 组件需要调度到一个稳定的节点,否则会导致 VePFS Manager 的 Pod 异常重启,日志信息丢失。执行如下命令查看 VePFS Manager 组件当前调度到的节点。
    # check node where VePFS Manager was scheduled
    k get pod `k get pod -A | grep vepfs | awk '{print $2}'` -o yaml | grep nodeName | awk '{print $2}' 
    
  4. 验证文件系统是否挂载成功。
    VePFS Manager 组件会自动给有指定 Label 的节点上挂载 VePFS 目录(/mnt/vepfs)。
    df -h | tail -n 5
    
    alt
  5. 工作负载的 Pod 通过挂载主机目录的方式使用 vePFS。详细操作,请参见:工作负载
    • 通过控制台操作
      alt
    • 通过 YAML 操作
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-deployment # adjust name for your deployment
        namespace: users-namespace # specify your namespace to apply deployment
      spec:
        replicas: 2 # adjust number of replicas for your deployment
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx # adjust name of container
              image: nginx:1.14.2 # adjust image_name and tag for your container
              ports:
              - containerPort: 80 # adjust port for your container
              volumeMounts:
              - mountPath: /mnt/vepfs # VePFS 目录
                name: vepfs
                subPath: vepfs
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            volumes:
            - hostPath:
                path: /mnt/vepfs
                type: DirectoryOrCreate
                name: vepfs
      

后续操作

支持通过云监控配置 vePFS 的容量利用率告警策略,触发阈值后自动发送通知。详细配置步骤参见:创建告警策略