首页 > 其他分享 >003.DirectPV存储管理

003.DirectPV存储管理

时间:2024-08-23 22:48:26浏览次数:12  
标签:存储管理 kubectl directpv drives DirectPV 003 驱动器 pod

目录

DirectPV drives管理

先决条件

  • 已安装DirectPV插件。
  • 在Kubernetes中已安装DirectPV CSI驱动程序。

添加drives

将Drives添加到DirectPV中,已用于提供volumes,主要有两步流程:

  1. 执行discover命令
    discover命令从DirectPV节点探测符合条件的硬盘,并将硬盘信息存储在YAML文件中。

建议仔细检查YAML文件,并将select字段设置为yes或no值,以选择对应的driver。“Select”字段默认设置为“yes”。

# kubectl directpv discover

# vim drives.yaml
version: v1
nodes:
    - name: master
      drives:
        - id: 252:16$ud8mwCjPTH8147TysmiQ2GGLpffqUht6bz7NtHqReJo=
          name: vdb
          size: 536870912
          make: ""
          select: "yes"
    - name: node1
      drives:
        - id: 252:16$gGz4UIuBjQlO1KibOv7bZ+kEDk3UCeBneN/UJdqdQl4=
          name: vdb
          size: 536870912
          make: ""
          select: "yes"
  1. 执行init命令初始化
    init命令创建一个请求,将选定的驱动器添加到使用discover命令生成的YAML文件中。
    由于此过程擦除所选驱动器上的所有数据,错误的驱动器选择将导致永久数据丢失,一定需要谨慎。
# kubectl directpv init drives.yaml

列出drives

需要从DirectPV获取驱动器信息,使用list drives命令。

# kubectl directpv list drives

标记drives

对驱动器设置自定义标记,以便于在卷配置中使用。

# kubectl directpv label drives tier=hot        #将标签'tier'键设置为'hot'值

# kubectl directpv label drives tier-           #删除标签“tier”

替换drives

替换driver可以在同一节点上更换故障硬盘。
在此过程中,将故障驱动器中的所有卷移动到新驱动器中,然后将故障驱动器从DirectPV中移除。
目前,DirectPV不支持将卷上的数据移动到新驱动器。
可以使用 replace.sh 脚本执行驱动器更换。。

# replace.sh sdd sdf node1

移除drives

可以移除不包含任何卷的驱动器。

# kubectl directpv remove --drives=vdb --nodes=node1

暂停drives

根据Kubernetes的设计,只有当所有pod都处于运行状态时,StatefulSet工作负载才处于活动状态,任何故障驱动器都将阻止statfulset启动。
DirectPV提供了一个解决方案来挂起故障驱动器,它将以只读访问权限将相应的卷挂载到空的/var/lib/directpv/tmp目录上,这可以通过执行suspend drives命令来完成。

# kubectl directpv suspend drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0

挂起的驱动器一旦故障修复就可以恢复,恢复后,相应的卷将使用各自分配的驱动器恢复。
这可以通过使用resume drives命令来完成。

# kubectl directpv resume drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0

修复drives

在极少数情况下,可以修复故障驱动器上的文件系统使其可以继续使用。
作为第一步,必须挂起故障驱动器,然后为它们运行修复命令。

repair命令创建一次性Kubernetes作业,pod名称为repair-,这些作业在作业完成五分钟后自动删除。可以使用kubectl log命令查看驱动器修复的进度和状态。

# kubectl directpv suspend drives af3b8b4c-73b4-4a74-84b7-1ec30492a6f0      #挂起驱动器

重新启动pod,并确保关联的卷未绑定。

在挂起的驱动器上运行修复命令。

# kubectl directpv repair af3b8b4c-73b4-4a74-84b7-1ec30492a6f0

扩容Volume

在线扩容

DirectPV 支持在线卷扩展,扩容过程中使用这些卷的 Pod 不需要重启。
同时扩展相关的 PVC 的大小后是自动完成的。

# kubectl get pvc [PersistentVolumeClaimName] -o yaml > my-file-name.yaml

在PVC中,修改 spec.resources.requests.storage 以更改请求的大小。
应用更改后,PVC 更新,DirectPV 自动增加分配给申请卷的大小。
使用kubectl get pvc [PersistentVolumeClaimName] -o yaml验证,查看 status.capacity.storage 以查看更新后的大小。

删除Volume

只有当卷处于 Ready 状态且没有pod正在使用该卷时,卷才能被删除。
执行kubectl delete pvc命令触发删除 DirectPV 卷,删除卷将导致数据永久丢失,请确认要删除的卷。

# kubectl delete pvc sleep-pvc                  #删除sleep-pvc卷

清理残留Volume

当 pod 和 Persistent Volume Claims 被强制删除时,关联的 DirectPV 卷可能不会被删除,这将导致卷残留,使用clean命令删除残留卷。

# kubectl directpv clean --all                  #清理残留卷

暂停Volume

数据丢失:

根据Kubernetes的设计,只有当它的所有pod都处于运行状态时,StatefulSet工作负载才处于活动状态,故障卷导致statfulset无法启动。

DirectPV提供了一种解决方案,通过将失败的卷挂载到具有只读访问权限的空/var/lib/directpv/tmp目录上来挂起它们,这可以通过执行suspend volumes命令来完成。

# kubectl directpv suspend volumes --nodes node-1 --drives dm-3

一旦修复了挂起的卷,就可以恢复它们,恢复后,相应的卷返回使用各自分配的驱动器。

# kubectl directpv resume volumes --nodes node-1 --drives dm-3

提示:如上操作比较危险,可能导致数据丢失,同时如上操作通常用于更换损坏的硬盘。

DirectPV drives使用

使用介绍

卷配置包括使用默认的directpv-min-io storage class 或具有directpv-min-io提供程序的自定义 storage class 制作 persistentvolumecclaim ,由于 storage class 自带卷绑定模式 WaitForFirstConsumer 。
此模式延迟 PersistentVolume 的卷绑定和供应,直到使用 persistentvolumecclaim 的Pod被创建。将根据Pod的调度约束指定的拓扑来选择或配置 PersistentVolumes 。

这些包括(但不限于)资源需求、节点选择器、pod亲和和反亲和、污点和容忍,使用卷的pod被调度到调度卷的节点。这确保了对pod的高性能数据访问。

DirectPV volume 处于 Ready 状态,表示该卷可以绑定到pod,绑定完成后,该卷设置为 Bound 状态。

创建PVC

PV声明必须在persistentvolumecclaim规范中使用特定参数定义。

[root@master01 directpv]# vim directpv-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: directpv-pvc
  namespace: default
spec:
  volumeMode: Filesystem
  storageClassName: directpv-min-io
  accessModes: 
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi

[root@master01 directpv]# kubectl get pvc -o wide
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE    VOLUMEMODE
directpv-pvc   Bound    pvc-49c5aeff-0a8f-4a1d-b497-e4cd0af59c7d   100Mi      RWO            directpv-min-io   <unset>                 2m7s   Filesystem

创建Pod

对于WaitForFirstConsumer卷绑定模式,必须定义一个消耗directpv-pvc的pod,下面是一个在/mnt上使用directpv-volume的例子。

[root@master01 directpv]# vim directpv-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: directpv-pod
spec:
  volumes:
    - name: directpv-volume
      persistentVolumeClaim:
        claimName: directpv-pvc
  containers:
    - name: directpv-container
      image: busybox:1.36.1
      args: [/bin/sh, -c, while true; do echo "$(date)" >> /tmp/1.log && sleep 10; done]
      volumeMounts:
        - mountPath: "/tmp"
          name: directpv-volume

[root@master01 directpv]# kubectl get pod -o wide
NAME           READY   STATUS    RESTARTS   AGE    IP           NODE       NOMINATED NODE   READINESS GATES
directpv-pod   1/1     Running   0          2m3s   10.10.5.55   worker01   <none>           <none>

[root@master01 directpv]# kubectl exec -ti directpv-pod -- cat /tmp/1.log
Thu Aug 22 18:16:55 UTC 2024
Thu Aug 22 18:17:05 UTC 2024
Thu Aug 22 18:17:15 UTC 2024
Thu Aug 22 18:17:25 UTC 2024
Thu Aug 22 18:17:35 UTC 2024
Thu Aug 22 18:17:45 UTC 2024
Thu Aug 22 18:17:55 UTC 2024

标签:存储管理,kubectl,directpv,drives,DirectPV,003,驱动器,pod
From: https://www.cnblogs.com/itzgr/p/18377214

相关文章

  • 002.DirectPV存储安装
    DirectPV简介DirectPV概述DirectPV是直接连接存储的CSI驱动程序。从更简单的意义上说,它是一个分布式持久卷管理器,而不是像SAN或NAS那样的存储系统。它可以用于发现、格式化、挂载、调度和监视跨服务器的硬盘驱动器。由于KuberneteshostPath和本地pv是静态配置的,功......
  • 安装MySQL报错ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3
    今天要在本地装个mysql,发现mysql-5.7.19-winx64版总是报错由于找不到MSVCP120.dll,无法继续执行代码。重新安装程序可能会解决此问题。,去微软官网找到了最新的VisualC++RedistributableforVisualStudio,下载后发现还是不停地报错。怀疑是系统不兼容,没办法只好安装mysql-8.0.37......
  • AGC003 题解
    目录A-WannagobackhomeB-SimplifiedmajhongA-Wannagobackhome注意到横纵坐标是独立的,因此可以分开考虑。考虑横坐标或纵坐标最终为零的充要条件为:没有出现任何关于它的任何操作(没有N和S,或没有W和E);出现所有关于它的任何操作(有向正方向走与往负方向走,如有......
  • NOI2003 逃学的小孩 题解
    NOI2003逃学的小孩题解传送门。题目简述给定一棵树\(T\),需要选择三个点\(A,B,C\),需要从\(C\)走到\(A,B\)​​的最远距离。(第一段题目是在讲剧情吗。。)前置知识图树树的直径思路简述这题在蓝题(提高+/省选-)中还是比较水的^_^来看看样例吧用瞪眼法(——数学......
  • 【中国数据库前世今生】数据存储管理的起源与现代数据库发展启蒙
    记录开启本篇的目的:作为1名练习时长2年半的DBA,工作大部分时间都在和数据库打交道,包括Oracle,Mysql,Postgresql,Opengauss等国内外数据库。但是对数据库的发展史却知之甚少。正好腾讯云开发者社区正在热播:【纪录片】中国数据库前世今生,借此机会了解数据库发展历史,和演变进程,......
  • [oeasy]python0030_动态控制断点_breakpoints_debug_调试
     030_动态控制断点_breakpoints_debug_调试290播放·0赞同视频​设置断点_break_point_continue_运行到断点......
  • 小白学习c++P7【1003】对齐输出(c++)详细讲解
     EXTRA##网站......
  • P1045 [NOIP2003 普及组] 麦森数极简解法解读
    源代码如下(这个精妙绝伦的算法不是我发现的,而是取自原题解中的某个大佬,在经过一顿学习正常题解后看到,顿觉豁然开朗,原贴:https://www.luogu.com.cn/article/c3u874kg)includeincludeincludeusingnamespacestd;longlonga[501]={1};intmain(){intp;cin>>p;cout<<(......
  • 003springboot图书个性化推荐系统的设计与实现———源码+数据库文件+万字文档+配套PP
     博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • 基于Dango+微信小程序的广西东盟旅游资源信息管理系统+80003(免费领源码)可做计算机毕业
    django广西-东盟旅游资源信息管理系统小程序摘 要在社会快速发展和人们生活水平提高的影响下,旅游产业蓬勃发展,旅游形式也变得多样化,使旅游资源信息的管理变得比过去更加困难。依照这一现实为基础,设计一个快捷而又方便的基于小程序的旅游资源信息管理系统是一项十分重要并且......