使用cfs动态存储卷

使用CFS动态存储卷

1. 操作场景

容器云CSK容器集群支持通过创建 SC/PVC,并为工作负载挂载数据卷的方式使用文件存储CFS。

2. 注意事项

  • 创建PVC前,需要创建SC,PVC创建后,会自动创建一个PV;
  • 若SC的reclaimPolicy回收策略设置为Retain,删除PVC后,Released 状态的 PV 需要手动删除 YAML 配置文件中的 claimRef 字段才能与 PVC 成功绑定;
  • SC暂不提供通过容器云CSK控制台界面点击的方式创建或编辑,请使用YAML文件创建;
  • CFS如需进行扩容,可修改PVC的YAML文件中storage参数字段值,但需要注意,只允许扩容,无法进行缩容;
spec:
    accessModes:
    - "ReadWriteMany"
    resources:
       requests:
          storage: "50Gi"
  • 当使用YAML文件创建SC时,需要填写parameters的availableZone和shareType参数字段值,字段可选值如下:
availableZone shareType
cn-east-2-a ssd

3. 创建SC

3.1. 通过YAML创建SC

登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储类】;

单击【YAML 创建】,完成参数设置;

  • 模板:支持使用容器云提供的系统模板或自定义模板;
  • 模板内容:选择好模板后,在“模板内容”区域可以对模板进行编辑。完成参数设置后,点击“保存模板”可将改动保存到自定义模板;

单击确定,完成SC创建。

3.2. 通过kubectl创建SC

YAML示例:

apiVersion: "storage.k8s.io/v1"
kind: "StorageClass"
metadata:
  name: "sc"
allowVolumeExpansion: true
parameters:
  availableZone: "cn-east-2-a"   # AZ ID 具体参考帮助文档
  shareType: "ssd"
provisioner: "ycfs.csi.csk.cloud-service.cn"
reclaimPolicy: "Delete"
volumeBindingMode: "Immediate"

参考YAML示例,准备 SC YAML 文件;
安装kubectl,并连接集群。操作详情请参见 连接集群
执行以下命令,创建 SC YAML 文件:

kubectl  --kubeconfig  KUBECONFIG_NAME create -f SC YAML 文件名称

例如,创建一个文件名为 my-SC.yaml 的 SC YAML 文件,则执行以下命令:

kubectl  --kubeconfig  KUBECONFIG_NAME create -f my-SC.yaml

执行以下命令,验证创建是否成功:

kubectl  --kubeconfig  KUBECONFIG_NAME get SC

返回类似以下信息,即表示创建成功。

NAME   PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
my-sc  ycfs.csi.csk.cloud-service.cn  Delete          Immediate           true                  1m16s

4. 创建PVC

4.1. 通过容器云控制台创建PVC

登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷声明】;

单击【创建】,进入【创建存储卷声明】页面。根据实际需求,完成参数设置;

  • 名称:设置PVC的名称;
  • 命名空间:根据实际需求选择集群下的命名空间;
  • 存储卷类型:选择【文件存储】;
  • 分配模式:会根据选择的存储卷类型自动选择,【文件存储】则对应【动态创建】;
  • 读写权限:默认为ReadWriteMany;
  • StorageClass:根据实际需求选择集群下的SC;
  • 容量:根据实际需求填写容量大小;
  • 标签:输入键-值对(Key-Value),为PVC设置标签;
  • 注释:输入键-值对(Key-Value),为PVC设置注释;

单击确定,完成PVC创建。

4.2. 通过YAML创建PVC

登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷声明】;

单击【YAML 创建】,完成参数设置;

  • 模板:支持使用容器云提供的系统模板或自定义模板;
  • 模板内容:选择好模板后,在“模板内容”区域可以对模板进行编辑。完成参数设置后,点击“保存模板”可将改动保存到自定义模板;

单击确定,完成PVC创建。

4.3. 通过kubectl创建PVC

YAML示例:

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
  finalizers:
  - "kubernetes.io/pvc-protection"
  name: "pvc"
  namespace: "default"
spec:
  accessModes:
  - "ReadWriteOnce"
  resources:
    requests:
      storage: "50Gi"
  volumeMode: "Filesystem"
  volumeName: "pv"

参考YAML示例,准备 PVC YAML 文件;
安装 kubectl,并连接集群。操作详情请参见 连接集群
执行以下命令,创建 PVC YAML 文件:

kubectl  --kubeconfig  KUBECONFIG_NAME create -f PVC YAML 文件名称

例如,创建一个文件名为 my-PVC.yaml 的 PVC YAML 文件,则执行以下命令:

kubectl  --kubeconfig  KUBECONFIG_NAME create -f my-PVC.yaml

执行以下命令,验证创建是否成功:

kubectl  --kubeconfig  KUBECONFIG_NAME get PVC

返回类似以下信息,即表示创建成功。

NAME   STATUS   VOLUME                                    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-pvc Bound    pvc-7eba1384-884a-4db5-b1f4-f7de0f448bd3  30Gi       RWX            my-sc          3m32s

5. 对工作负载挂载PVC

查看创建的PVC的状态,若PVC状态为Bound,则表示创建成功,PVC可以向Pod分配PV存储资源。

5.1. 在创建工作负载过程中,挂载PVC

登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【工作负载】并选择工作负载类型;

单击【创建】,进入【创建工作负载】页面;

在【容器配置】,展开【高级配置】,勾选【存储】-【PVC】,根据实际需求完成参数配置;

  • 存储卷类型:选择【文件存储】;
  • 挂载源:根据实际需求选择PVC;
  • 容器内挂载路径:根据实际需求填写PVC挂载路径;
  • 子路径:根据实际需求填写子路径subpath;

完成工作负载的配置后,单击创建,完成工作负载创建的同时,也会挂载PVC。

5.2. 为已有工作负载挂载PVC

登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【工作负载】,选择已创建的工作负载进入详情;

单击【容器配置】,点击右侧【修改】,进入【编辑容器】页面,展开【高级配置】,勾选【存储】-【PVC】,根据实际需求完成参数配置;

  • 存储卷类型:选择【文件存储】;
  • 挂载源:根据实际需求选择PVC;
  • 容器内挂载路径:根据实际需求填写PVC挂载路径;
  • 子路径:根据实际需求填写子路径subpath;

单击确定,挂载PVC。

5.3. 修改YAML文件中Pod Template挂载PVC

在Pod Template中的Volume直接关联PVC的名称,即可挂载到容器中。
YAML示例:

spec:
  containers:
  - image: "nginx:latest"
    imagePullPolicy: "IfNotPresent"
    name: "nginx-1"
    resources:
      limits:
        cpu: "1"
        memory: "1Gi"
      requests:
        cpu: "1"
        memory: "1Gi"
    terminationMessagePath: "/dev/termination-log"
    terminationMessagePolicy: "File"
    volumeMounts:
    - mountPath: "/scpvc"        # 挂载路径
      name: "sc-pvc"
  dnsPolicy: "ClusterFirst"
  imagePullSecrets:
  - {}
  restartPolicy: "Always"
  schedulerName: "default-scheduler"
  securityContext: {}
  terminationGracePeriodSeconds: 30
  volumes:
  - name: "sc-pvc"
    persistentVolumeClaim:
      claimName: "sc-pvc"        # PVC的名称

个结果匹配 ""

    无结果匹配 ""