使用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的名称