You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
本地存储卷
使用独占盘类型的本地存储动态存储卷
复制全文
下载 pdf
使用独占盘类型的本地存储动态存储卷
容器服务支持通过 CSI 使用本地存储,本文为您介绍如何使用独占盘类型的本地存储动态存储卷。​
说明​
【邀测·申请试用】本地存储相关的 csi-local 组件 和 存储感知调度 功能目前均处于邀测阶段,如需使用,请提交申请。​
使用限制​
  • 需使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd 和 /var/lib/kubelet。避免使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。​
  • 本场景依赖 3 个组件的安装和卸载存在顺序要求,请严格遵循下文介绍的顺序进行安装或卸载,否则将影响正常调度功能。​
  • 集群的 Kubernetes 版本要求:​
  • 本地存储并非高可用存储卷,只适用于一些临时数据的保存及应用自带高可用的场景。​
前提条件​
  • 已经创建 Kubernetes 版本符合要求的容器集群,详情请参见 创建集群。​
操作步骤​
步骤一:安装和配置依赖组件​
使用本地存储需要依赖如下组件,请参考以下顺序依次安装和配置。​
警告​
  • csi-local 组件依赖 snapshot-controller 组件,安装 csi-local 组件前确认 snapshot-controller 组件已安装。​
  • csi-local 组件必须与 scheduler-plugin 组件中的存储感知调度功能结合使用,开启存储感知调度功能前,请确保 snapshot-controller 和 csi-local 组件均已安装,否则会影响正常调度。​
  • 如需卸载 csi-local 组件,请关闭 scheduler-plugin 组件中的存储感知调度功能后再执行卸载操作,否则会影响正常调度。​
  1. 在左侧导航栏中选择 集群,单击需要配置的目标集群。​
  1. 在集群管理页面的左侧导航栏中,选择 组件管理。​
  1. 选择 存储 页签,将鼠标移动到 snapshot-controller 和 csi-local 组件卡片上,单击 部署,依次安装组件。​
  • ​​​
  1. 选择 调度 页签,将鼠标移动到 scheduler-plugin 组件卡片上,单击 配置,并在配置弹窗中勾选 存储感知调度 配置项的 本地存储。​
  • ​​​
  • ​
    配置项​
    说明​
    存储感知调度​
    本地存储:默认关闭,勾选表示开启本地存储的存储感知调度功能,开启后可根据节点的存储资源进行调度。​
    说明​
    需要安装 csi-local 组件才可以生效。​
    ​
步骤二:配置本地盘类型的节点池​
配置本地盘类型的节点池,本场景涉及的关键配置说明如下,其他配置项按需配置即可。详情请参见 创建节点池、创建托管节点池。​
  1. 配置计算规格。选择支持本地盘的 ECS 实例类型。详情请参见 本地盘。​
  1. 配置数据盘。​
  • 配置容器、镜像存储目录。使用极速型 SSD 数据盘挂载到容器、镜像存储目录 /var/lib/containerd 和 /var/lib/kubelet。​
警告​
请勿使用本地盘挂载到容器、镜像存储目录,否则,将不适用本地存储使用场景。​
  • 单击 添加数据盘,使用本地盘配置其他数据盘。本地数据盘支持 SSD 和 HDD 类型,不同 ECS 类型支持的数据盘类型不同,可根据实际需求选择。​
  • ​​​
  1. 自定义节点标签,用于初始化本地盘时筛选节点,例如csi-local: "i4ag"。​
  • ​​​
  1. 配置部署执行脚本,在节点中安装 lvm2,安装命令为apt-get install -y lvm2。​
  • ​​​
步骤三:初始化本地盘​
csi-local 组件安装成功后,将自动创建本地存储相关 CRD,包括:​
  • NodeLocalStorageInitConfig:用于初始化每个节点的 NodeLocalStorage 资源。csi-local 组件在创建 NodeLocalStorage 资源时,如果存在 NodeLocalStorageInitConfig。则会将 NodeLocalStorageInitConfig 中的配置填充到新创建 NodeLocalStorage 资源的 Spec 中。​
  • NodeLocalStorage:用于上报每个节点的存储设备信息,您可根据需要编辑 NodeLocalStorage 资源的 Spec 字段。​
​alt​​
本场景以 ecs.i4ag.12xlarge 机型为例,已经挂载 EBS 云盘到 /dev/vdc,并已经为该机型节点打上标签 csi-local: "i4ag"。​
  1. 在左侧导航栏中选择 工作负载 > 对象浏览器,单击 使用 Yaml 创建 ,配置 CR 初始化本地盘。​
  • 在 类型 下拉菜单中选择 自定义。​
  • 在 Yaml 中输入如下 Yaml 示例。​
  • ​
    apiVersion: csi.volcengine.com/v1alpha1​
    kind: NodeLocalStorageInitConfig​
    metadata:​
    name: csi-local​
    spec:​
    globalConfig: # 全局默认节点配置​
    listConfig:​
    devices: {}​
    mountPoints: {}​
    vgs: {}​
    resourceToBeInited: {}​
    spdkConfig: {}​
    nodesConfig: # 按 Label 筛选的节点池级别配置​
    - selector: # 筛选规则​
    matchLabels:​
    csi-local: "i4ag" # 筛选节点的 Lable​
    listConfig: # 可被 csi-local 分配的存储设备列表​
    devices:​
    include: # include 正则​
    - /dev/vdc # 可被分配用于独占的数据盘,注意该数据盘需要在 ECS 中已存在​
    ​
  1. 等待 1 分钟左右,执行以下命令,查看对应节点的 NodeLocalStorage 配置。在本例中192.168.2.6为节点的 IP 地址。​
  • ​
    kubectl get nls 192.168.2.6 -oyaml​
    ​
  • 预期结果如下,能够查询到独占盘信息,表示初始化成功。​
  • ​
    apiVersion: csi.volcengine.com/v1alpha1​
    kind: NodeLocalStorage​
    metadata:​
    creationTimestamp: "2024-07-17T08:52:03Z"​
    generation: 1​
    name: 192.168.2.6​
    resourceVersion: "30819"​
    uid: 129012df-d9b2-41f1-bb5f-0d86fc15baf3​
    spec:​
    listConfig:​
    devices:​
    include:​
    - /dev/vdc​
    mountPoints: {}​
    vgs:​
    include:​
    - csi-local-pool-[0-9]+​
    nodeName: 192.168.2.6​
    resourceToBeInited:​
    vgs:​
    - devices:​
    - /dev/nvme0n1​
    name: csi-local-pool-0​
    spdkConfig: {}​
    status:​
    filteredStorageInfo:​
    updateStatusInfo:​
    lastUpdateTime: "2024-07-17T09:51:24Z"​
    updateStatus: accepted​
    volumeGroups:​
    - csi-local-pool-0​
    nodeStorageInfo:​
    deviceInfo: # 初始化成功后,可查看划分的独立盘​
    - condition: DiskReady​
    mediaType: ssd​
    name: /dev/nvme0n1​
    readOnly: false​
    total: 3840755982336​
    - condition: DiskReady​
    mediaType: hdd​
    name: /dev/vda1​
    readOnly: false​
    total: 199229440​
    phase: Running​
    state:​
    lastHeartbeatTime: "2024-07-17T09:51:24Z"​
    status: "True"​
    type: DiskRead​
    ​
步骤四:使用本地存储动态存储卷​
目前支持动态制备方式使用本地存储,系统已经预置存储类,根据实际需求选用即可。​
​
预置存储类​
说明​
csi-local-device-hdd​
HDD 独立盘预置的存储类,文件存储类型为 ext4。​
csi-local-device-ssd​
SSD 独立盘预置的存储类,文件存储类型为 ext4。​
csi-local-lvm​
LVM 共享盘预置的存储类,文件存储类型为 ext4。​
csi-local-lvm-xfs​
LVM 共享盘预置的存储类,文件存储类型为 xfs。​
​
本场景以创建有状态负载为例,介绍如何使用独占盘类型的本地存储动态存储卷。​
  1. 创建 StatefulSet 的 YAML 文件。示例文件statefulset-demo.yaml代码如下:​
  • ​
    apiVersion: apps/v1​
    kind: StatefulSet​
    metadata:​
    name: nginx-device​
    spec:​
    selector:​
    matchLabels:​
    app: nginx-device​
    podManagementPolicy: Parallel​
    serviceName: "nginx-device"​
    replicas: 1​
    volumeClaimTemplates:​
    - metadata:​
    name: html​
    spec:​
    volumeMode: Filesystem​
    accessModes:​
    - ReadWriteOnce​
    storageClassName: csi-local-device-hdd # 预置的存储类名称,可根据实际需求选择​
    resources:​
    requests:​
    storage: 5Gi​
    template:​
    metadata:​
    labels:​
    app: nginx-device​
    spec:​
    containers:​
    - name: nginx​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0​
    imagePullPolicy: Always​
    volumeMounts:​
    - mountPath: "/data"​
    name: html​
    command:​
    - sh​
    - "-c"​
    - |​
    while true; do​
    echo $(hostname) $(date) >> /data/test.txt;​
    sleep 10s​
    done;​
    ​
  1. 执行以下命令,创建工作负载。​
  • ​
    kubectl create -f statefulset-demo.yaml​
    ​
结果验证​
存储卷挂载​
删除 Pod 触发 Pod 重建后,可执行exec命令进入新建 Pod,查看旧 Pod 中的数据是否依然存在。​
​
❯ kubectl delete pod nginx-device-0​
pod "nginx-device-0" deleted​
​
❯ kubectl exec -it nginx-device-0 cat /data/test.txt​
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.​
nginx-device-0 Thu Jul 18 06:34:51 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:01 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:11 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:21 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:31 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:41 UTC 2024​
nginx-device-0 Thu Jul 18 06:35:51 UTC 2024​
nginx-device-0 Thu Jul 18 06:36:01 UTC 2024​
nginx-device-0 Thu Jul 18 06:36:11 UTC 2024​
​
存储卷回收​
删除 StatefulSet 并删除 PVC 时,独占盘 vdc 将被回收并格式化,文件系统将被擦除。​
​
root@iv-yda1sl1t***:~# mount /dev/vdc /tmp2​
mount: /tmp2: wrong fs type, bad option, bad superblock on /dev/vdc, missing codepage or helper program, or other error.​
​
​
最近更新时间:2026.02.03 17:09:47
这个页面对您有帮助吗?
有用
有用
无用
无用