首页 > 其他分享 >k8s OpenLocal存储

k8s OpenLocal存储

时间:2025-01-14 21:21:09浏览次数:1  
标签:存储 name open dev lv OpenLocal k8s local DiskReady

参考项目https://github.com/alibaba/open-local v0.7.1

NodeLocalStorage定义

NodeLocalStorage cr表示每个k8s节点本地存储资源信息。
controller创建后由节点上agent更新status,从而维护存储信息。

apiVersion: csi.aliyun.com/v1alpha1
kind: NodeLocalStorage
spec:
  nodeName: [node name]       # 与节点名称相同
  listConfig:                 # 可被 Open-Local 分配的存储设备列表,形式为正则表达式。Status 中 .nodeStorageInfo.deviceInfo 和 .nodeStorageInfo.volumeGroups 满足该正则表达式的设备名称将成为 Open-Local 具体可分配的存储设备列表,并在 Status 的 .filteredStorageInfo 中显示。Open-Local 先通过 include 得出全量列表,然后通过 exclude 从全量列表中剔除不需要的项
    devices:                  # Device(独占盘)名单
      include:                # include 正则
      - /dev/vd[a-d]+
      exclude:                # exclude 正则
      - /dev/vda
      - /dev/vdb
    vgs:                      # LVM(共享盘)白黑名单,这里的共享盘名称指的是 VolumeGroup 名称
      include:
      - share
      - paas[0-9]*
      - open-local-pool-[0-9]+
  resourceToBeInited:         # 设备初始化列表
    vgs:                      # LVM(共享盘)初始化
    - devices:                # 将块设备 /dev/vdb3 初始化为名为 open-local-pool-0 的 VolumeGroup。注意:当节点上包含同名 VG,则 Open-Local 不做操作
      - /dev/vdb3
      name: open-local-pool-0
status:
  nodeStorageInfo:            # 具体设备情况,由 Agent 组件更新。包含 分区 和 一整个块设备。设备名称可由 open-local agent --regexp 参数决定(默认为 ^(s|v|xv)d[a-z]+$ )
    deviceInfo:               # 磁盘情况
    - condition: DiskReady    # 磁盘状态,有三种状态:DiskReady、DiskFull、DiskFault
      mediaType: hdd          # 媒介类型,分为 hdd 和 sdd 两种
      name: /dev/vda1         # 设备名称
      readOnly: false         # 是否只读
      total: 53685353984      # 设备总量
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vda
      readOnly: false
      total: 53687091200
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vdb1
      readOnly: false
      total: 107374164992
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vdb2
      readOnly: false
      total: 106300440576
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vdb3
      readOnly: false
      total: 860066152448
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vdb
      readOnly: false
      total: 1073741824000
    - condition: DiskReady
      mediaType: hdd
      name: /dev/vdc
      readOnly: false
      total: 1073741824000
    volumeGroups:                 # VolumeGroup 情况
    - allocatable: 860063006720   # 可被 Open-Local 分配的VG可用量,会剔除非 Open-Local 的 LV 总量。Open-Local 的 LV 名称由 open-local agent --lvname 参数决定,前缀不匹配的 LV 为非 Open-Local 的 LV。
      available: 800298369024     # VG 可用量
      condition: DiskReady        # VG 状态
      logicalVolumes:                                       # LV 信息
      - condition: DiskReady                                # LV 状态
        name: local-482c664d-764b-461e-be5e-0a60a3abd5ac    # LV 名称
        total: 1073741824                                   # LV 总量
        vgname: open-local-pool-0                           # LV 所在的 VG 名称
      - condition: DiskReady
        name: local-4e0b8d6f-8ea2-431d-8b5d-aaec1b5d4242
        total: 53687091200
        vgname: open-local-pool-0
      - condition: DiskReady
        name: local-cc69d090-15b9-4abd-af1f-04380e1654d9
        total: 5003804672
        vgname: open-local-pool-0
      name: open-local-pool-0     # VG 名称
      physicalVolumes:            # VG 对应的 PVs(Physical Volumes)
      - /dev/vdb3
      total: 860063006720         # VG 总量
  filteredStorageInfo:            # 设备筛选情况,筛选后的设备会参与存储调度&分配。该字段的值由 Status 中的 .nodeStorageInfo.deviceInfo 和 .nodeStorageInfo.volumeGroups 与 Spec 中的 .listConfig 共同决定。本例中 Spec 的 VG 列表中有 open-local-pool-[0-9]+,且该节点有名为 open-local-pool-0 的 VG,故可被纳管。/dev/vdc 同理。
    volumeGroups:
    - open-local-pool-0
    devices:
    - /dev/vdc

CSI基本流程

1. 用户创建带有PVC的StatefulSet。
2. PvController调用External Provisioner来创建PV,本地存储未创建真实的lv。
3. 调度带有PVC的Pod时,kube-scheduler调用extender注册的接口,根据存储情况确定创建lv的节点。
4. PvController完成PVC和PV的延迟绑定后,kube-scheduler完成调度Pod。
5. kubelet拉起Pod时,csi创建lv,把lv挂载到PV卷目录,相当于完成了attach+mount。kubelet再把PV卷目录挂载到容器目录。

创建lv基本流程

pv物理卷-vg卷组-lv逻辑卷
1. 创建分区/dev/sdc2:fdisk /dev/sdc
2. 创建物理卷pv:pvcreate /dev/sdc2
3. 创建vg:vgcreate s2 /dev/sdc2
4. 创建lv:lvcreate --size 1G --name lv_test s2
5. 格式化:mkfs.ext4 /dev/s2/lv_test
6. 挂载:mkdir -pv /apps/s2/test; mount /dev/s2/lv_test /apps/s2/test
7. 确认挂载完成:df -h | grep lv_test

节点重启恢复PV挂载点

节点重启后,重新把lv挂载到PV卷目录。
方法1:通过Linux /etc/fstab自动恢复。
方法2:kubelet发起CSI恢复(OpenLocal采用)。

标签:存储,name,open,dev,lv,OpenLocal,k8s,local,DiskReady
From: https://www.cnblogs.com/WJQ2017/p/18671726

相关文章

  • K8S之Pod进阶
    文章目录容器容器的状态pod实例配置镜像仓库拉镜像默认值特别说明容器重启策略Init容器Init容器优势Init容器实例特殊说明临时容器hook钩子函数容器探针何时该使用启动探针Pause(Infra)容器背景实现Pause容器的作用PodPreset如何工作容器容器的状态容器的状......
  • 20250114基础k8s部分
    20250114基础k8s部分No1.Kubernetes项目要解决的问题是什么?编排?调度?容器云?还是集群管理?对于大多数用户来说,他们希望Kubernetes项目带来的体验是确定的:现在我有了应用的容器镜像,请帮我在一个给定的集群上把这个应用运行起来。进一步地说,我还希望Kubernetes能给我提供路由网......
  • C:\Users\Administrator\Local Settings\temp 是 Windows 操作系统中的一个临时文
    C:\Users\Administrator\LocalSettings\temp是Windows操作系统中的一个临时文件夹,通常用于存储操作系统和应用程序在运行时生成的临时数据。具体来说,temp文件夹用于存放临时文件,例如:安装文件:一些程序在安装过程中会将临时文件放在这里。缓存文件:一些程序可能会将数据缓存......
  • KuboardSpray v1.2.4 在 Rocky Linux 9.5 上部署 K8s 失败报错“当前资源包不支持此操
    KuboardSpray报错日志截图进入KuboardSpray的docker容器实例里的当前用户目录下,再用find.-name"*.yaml"|xargs-igrep-iHn"distribution:Rocky"{}查找声明RockyLinux系统版本的地方,如下图解决办法:只需对上图中红框处的3个配置文件进行修改,加上较新版本的Rock......
  • 欧拉OpenEuler基于Kubeasz部署k8s.250114
    欧拉OpenEuler基于Kubeasz部署k8s系统优化修改主机名hostnamectlset-hostnamePRD-MS-K8S01vim/etc/hosts172.62.17.101PRD-MS-K8S01172.62.17.102PRD-MS-K8S02172.62.17.103PRD-MS-K8S03关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld关闭se......
  • 仅需一个插件让关系型数据库实现图数据存储与检索
    简介ApacheAGE是一个PostgreSQL数据库的扩展插件,使得在关系型数据库中也可以使用openCypher查询语言进行图查询。有了该插件,可以在PostgreSQL数据库中同时实现关键字检索、向量检索、图检索,仅需一个数据库即可实现复杂RAG的各种存储和检索需求。安装Docker安装获取镜像doc......
  • 【C语言】浮点型数据的存储详细讲解
    ​在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。举个例子:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h> intmain(){ intnum=9; float*pnum=(float*)&num;//强制转换类型 printf("n的值为:%d\n",n); printf("*pFloat......
  • 存储引擎-2
    存储引擎的查看查看MySQL默认存储引擎select@@default_storage_engine;查看表存储引擎selecttable_schema,table_name,enginefrominformation_schema.tableswheretable_schemanotin('sys','mysql','information_schema','performance_schema'......
  • EFK采集k8s日志
       在Kubernetes集群中,需要全面了解各个pod应用运行状态、故障排查和性能分析。但由于Pod是动态创建和销毁的,其日志分散且存储不持久,因此需要通过集中式日志采集方案,将日志收集到统一的平台并配置日志可视化分析和监控告警,以实现日志的可追溯性、实时监控和高效分析......
  • 定时抓取数据:Python爬虫与定时任务实现每日数据采集与存储
    引言在现代数据驱动的世界中,实时获取和存储数据是许多应用的核心需求。无论是金融行业的实时汇率监控,还是电商行业的价格变化追踪,定时抓取数据都是一种高效的数据采集方式。本文将详细介绍如何使用Python结合爬虫技术和定时任务,实现每天定时抓取数据并将其存入数据库。一......