首页 > 其他分享 >002.DirectPV存储安装

002.DirectPV存储安装

时间:2024-08-23 11:05:12浏览次数:9  
标签:存储 krew master01 DirectPV directpv 002 root 节点

DirectPV简介

DirectPV概述

DirectPV 是直接连接存储的 CSI 驱动程序。从更简单的意义上说,它是一个分布式持久卷管理器,而不是像 SAN 或 NAS 那样的存储系统。
它可以用于发现、格式化、挂载、调度和监视跨服务器的硬盘驱动器。
由于 Kubernetes hostPath 和本地 pv 是静态配置的,功能有限,DirectPV 的创建就是为了解决这个限制。
DirectPV 使用这些挂载的驱动器来创建持久卷( PV ), Kubernetes 使用 PV 来实现持久卷声明( pvc )。

分布式数据存储集群(如对象存储、数据库和消息队列)通常最终都使用了直连存储,集群自身处理高可用性和数据持久性。

在传统的基于 SAN 或 NAS 的 CSI 驱动程序上运行这样的数据存储会增加不必要的 replication/erasure 层,从而导致数据路径上的额外网络跳数,这种额外的分解层会增加复杂性和较差的性能。

而DirectPV正是为了解决这些问题,DirectPV 做到了跨服器发现可用存储资源、跨服器格式化存储、创建供 Kubernetes PV 使用的存储池,由 Kubernetes API 通过 DirectPV CSI 调度存储资源为POD分配直连式存储 PV ,分布式地在 node 节点创建符合 PVC 申请要求的 PV 。
DirectPV 创建的存储资源统一由部署 DirectPV 的节点监视和维护。

即在 master 节点部署 DirectPV 后,只需在 node 节点插入硬盘或者组建磁盘阵列,后续的格式化只需在安装了 DirectPV 的 master 节点上操作, node 节点无需后续操作, PV 由 Kubernetes 自行调度和创建,并由 PV 卷将数据持久化。

005

DirectPV的设计是轻量级的,可扩展到数万个驱动器。
它由三个组件组成:Controller 、Node Driver、UI。

  • Controller
    当存在 pvc 时,控制器将统一地从池中空闲驱动器提供卷。
    DirectPV 知道 pod 的关联约束,并将本地驱动器的卷分配给pod。

提示:每个集群只运行一个活动的控制器实例。

  • Node Driver
    Node Driver 实现对节点上的驱动器的发现、格式化、挂载、监控等卷管理功能。
    每个存储服务器上运行一个节点驱动程序实例。

  • UI
    存储管理员可以使用kubectl CLI插件来选择、管理和监控驱动器,基于Web的UI暂时不可用。

DirectPV 在根据部署 pod 的工作节点分配存储时强制节点约束。
如果 pod 部署到没有 DirectPV 管理的驱动器或驱动器不足的工作节点,则 DirectPV 无法为该 pod 分配存储。DirectPV 不会将存储从一个节点分配给另一个节点上的 pod 。

DirectPV局限性

DirectPV 本质上是利用节点磁盘创建并挂载了一个挂载分区供 Kubernetes pod 使用,最终依旧规避不了节点单点故障和硬盘损坏的问题,并且数据的持久化受到由 DirectPV 分配的 PV 卷的限制。

DirectPV 结合 Minio 集群突破 DirectPV 的局限性,每个 minio 集群节点上由 Kubernetes 调度,而每个集群节点的驱动器使用的 PV 由 DirectPV 调度,也就是说驱动器实际使用的存储资源是由 DirectPV 随机的从属于 Kubernetes 的 DirectPV 存储池中分配出来的,那实际的数据会随机的分布在 node 节点上的硬盘上。

  • 硬盘单点故障
    若是 Kubernetes node 节点本身使用的是 JOBD 存储,那自然没有硬盘单点故障的问题,即使没有使用 JOBD 存储,因为 minio 集群存储的数据是分布式地在各个不同 minio 集群节点的驱动器上,本质上就是在各个 Kubernetes node 节点的不同硬盘上,只要 node 节点硬盘数量够多,很大程度上可以规避硬盘单点故障的问题。

  • Kubernetes node 节点单点故障
    同样的,node 节点上故障时将会有大量的 PV 不可用,从而导致 minio 集群驱动器大量的掉线,可以通过部署大量 Kubernetes node 节点,使实际的硬盘驱动器散列的分布在不同节点硬盘上。

DirectPV部署

前置准备

Kubernetes安装

本实验不涉及 Kubernetes 部署, Kubernetes 部署参考 Kubernetes_v1.30.3高可用部署架构二

已完成部署的Kubernetes集群的规划及相关信息如下:

主机 IP 磁盘 备注
master01 172.24.10.11 —— master节点
master02 172.24.10.12 —— master节点
master03 172.24.10.13 —— master节点
worker01 172.24.10.14 /dev/nvme0n2 worker节点+ MinIO 节点
worker02 172.24.10.15 /dev/nvme0n2 worker节点+ MinIO 节点
worker03 172.24.10.16 /dev/nvme0n2 worker节点+ MinIO 节点

krew安装

在本地环境中安装 DirectPV 插件来管理 Kubernetes 集群中的 DirectPV CSI Driver ,可以使用krew或作为二进制文件进行安装。

[root@master01 ~]# mkdir /tmp/krew
[root@master01 ~]# cd /tmp/krew/
[root@master01 krew]# OS="$(uname | tr '[:upper:]' '[:lower:]')"
[root@master01 krew]# ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')"
[root@master01 krew]# KREW="krew-${OS}_${ARCH}"
[root@master01 krew]# curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz"

[root@master01 krew]# ll
total 4.4M
-rw-r--r-- 1 root root 4.4M Aug 18 07:07 krew-linux_amd64.tar.gz
[root@master01 krew]# tar zxvf "${KREW}.tar.gz"
./LICENSE
./krew-linux_amd64

[root@master01 krew]# ./"${KREW}" install krew

[root@master01 krew]# echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> .bashrc
[root@master01 krew]# source .bashrc

参考: DirectPV最佳实践

DirectPV Plugin安装

使用 krew 安装 DirectPV 。

[root@master01 ~]# kubectl krew update              #更新Krew以下载最新版本的插件
[root@master01 ~]# kubectl krew install directpv    #将DirectPV安装到krew安装目录(默认:$HOME/.krew)

[root@master01 ~]# kubectl directpv --version       #确认安装版本

提示:krew 相关命令参考: DirectPV CLI

Drive标准安装

安装说明

标准安装使用默认选项并在所有节点上安装 DirectPV 。
也可以使用自定义安装,进行更多的设置。

  • 先决条件
    • 在x86架构上已部署 Kubernetes ,其版本大于等于 v1.18 ;

    • 如果使用私有仓库,必须将如下镜像推送到该仓库:
      quay.io/minio/csi-node-driver-registrar:v2.8.0
      quay.io/minio/csi-provisioner:v3.5.0 (for Kubernetes >= v1.20)
      quay.io/minio/csi-provisioner:v2.2.0-go1.18 (for kubernetes < v1.20)
      quay.io/minio/livenessprobe:v2.10.0
      quay.io/minio/csi-resizer:v1.8.0
      quay.io/minio/directpv:latest

    • 开启ExpandCSIVolumes特性,便于卷扩展。

正式安装后,会创建一个名为 directpv-min-io 的新storage class。
然后可以通过使用此 storage class 作为 PodSpec.VolumeClaimTemplates 中的 storageClassName 来提供 DirectPV 卷。

安装DirectPV组件

在 kubernetes 集群的所有节点上安装 directpv-min-io CSI 驱动程序。

[root@master01 ~]# mkdir directpv && cd directpv
[root@master01 directpv]# kubectl directpv install

命令释义:

  • DirectPV 组件安装在 directpv 命名空间中。
  • 使用 kubectl directpv --kubeconfig /path/to/kubeconfig 指定一个备用 kubecconfig 。
  • DirectPV driver 需要规范文档中列出的基于角色的访问控制( RBAC )。
  • DirectPV driver 以特权模式运行,需要能执行挂载、卸载和格式化驱动器。
  • DirectPV 使用的守护进程需要以下开放端口:
    • 10443 表示度量使用的端口
    • 准备处理程序的端口 30443

要在指定的节点上安装 DirectPV ,使用 tolerations 或非标准 kubelet 目录,请参考 自定义安装 部分。

提示:也可以使用如下命令下载 install.sh 脚本并运行,从而实现在所有节点上执行 DirectPV 的标准安装。
curl -sfL https://github.com/minio/directpv/raw/master/docs/tools/install.sh | sh - apply ,
但通常不建议,避免出现非预期内的磁盘被初始化。

发现driver

列出 kubernetes 集群中所有可用的 driver,DirectPV 生成一个 init 配置文件(默认:drivers .yaml),可以使用它来初始化这些驱动器。
可根据事情需要修改文件,以便删除任何 DirectPV 不应该控制的驱动器。

[root@master01 directpv]# kubectl directpv discover

[root@master01 directpv]# vim drives.yaml                           #本实验仅使用nvme0n2设备
version: v1
nodes:
    - name: worker02
      drives:
        - id: 259:3$vKn1G3ntpurBUVN/Vg57Blr3Xu0iIjzEsmR60LncxaA=
          name: nvme0n2
          size: 21474836480
          make: VMware Virtual NVMe Disk
          fs: xfs
          select: "yes"
    - name: worker03
      drives:
        - id: 259:3$pP6hicwQMveTPLBfiPiMBhEoBEkLzgkT3wha3RsYKEs=
          name: nvme0n2
          size: 21474836480
          make: VMware Virtual NVMe Disk
          fs: xfs
          select: "yes"
    - name: worker01
      drives:
        - id: 259:3$7qZt1jd+YV9YxDsLJLgrbYhka3KyZL1jfRFoHS5Sa68=
          name: nvme0n2
          size: 21474836480
          make: VMware Virtual NVMe Disk
          fs: xfs
          select: "yes"

006

初始化driver

初始化 drives.yaml 中选择的驱动器。

[root@master01 directpv]# kubectl directpv init drives.yaml

提示:潜在的数据丢失风险:

  • 初始化将擦除驱动器上的所有现有数据;
  • 确保在 yaml 里只传递了符合预期的磁盘的信息给init命令;
  • 若原磁盘已格式化,或存在脏数据(非首次裸盘),则会出现提示,可通过 --dangerous 选项,强制格式化,注意数据风险!

007

验证确认

使用如下命令,验证是否成功,确保符合预期的结果,即列出已格式化并添加到DirectPV中的驱动器的信息。

[root@master01 directpv]# kubectl directpv info

008

Drive自定义安装

方式一:指定节点安装

指定节点安装可以通过设置需要安装drivepv的节点标签,从而通过 --node-selector 安装到特定节点上。

[root@master01 directpv]# kubectl label nodes worker0{1,2,3} drivepv=enable

[root@master01 directpv]# kubectl directpv install --node-selector drivepv=enable

009

方式二:污点标记安装

可以通过相应的污点标记设置需要安装drivepv的节点标签,从而通过 --toleration 安装到特定节点上,可参考官方示例 指定污点容忍

方式三:非标准目录安装

通常默认会安装在 /var/lib/kubelet/plugins/directpv-min-io/ ,若需要指定其他目录,可参考官方示例 在非标准kubelet目录安装

标签:存储,krew,master01,DirectPV,directpv,002,root,节点
From: https://www.cnblogs.com/itzgr/p/18375603

相关文章

  • Windows11 Docker镜像存储路径更改(非C盘路径)
    前言基于WSL2安装docker后,在使用过程中会发现大量的docker镜像文件,使系统C盘容量激增,对电脑后续使用造成不便,所以需要在安装的时候,手动修改docker的镜像地址,使得镜像文件保存到另外的非系统盘中。原因最新的windows提供了新的虚拟化技术(WSL/WSL2),所以设置页面不能镜像的存储位......
  • Django集成腾讯COS对象存储
    前言最近遇到一个场景需要把大量的资源文件存储到OSS里,这里选的是腾讯的COS对象存储(话说我接下来想搞的SnapMix项目也是需要大量存储的,我打算搭个MinIO把24T的服务器利用起来~)为啥腾讯不搞个兼容AmazonS3协议的啊……官方的SDK和文档都奇奇怪怪的,感觉国内的厂......
  • 设计高效电商返利平台的数据处理与存储方案
    设计高效电商返利平台的数据处理与存储方案大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿!在电商返利平台的构建过程中,数据处理与存储方案是确保平台性能和稳定性的关键。本文将探讨如何设计一个高效的数据处理与存储方案,以支持大规模......
  • MySQL存储引擎
    一、简介数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不多的数据库管理系统都支持多种不同的数据引擎......
  • 深入理解Android MTP之存储映射分析
    深入理解AndroidMTP之UsbService启动分析 分析了MTP的服务端的启动,本文来分析切换MTP模式后,存储中的数据(文件、目录)是如何映射到PC端的。首先你得知道如何切换MTP模式。当手机通过usb连接电脑时,会出现一个关于usb的通知,点击通知后,会出现一个类似如下的界面这个FileTransfe......
  • 这是一款轻量存储黑科技!
    近日,天翼云联合InfoQ举办了以“新存储,更轻量”为主题的线上技术分享会。天翼云存储产品线总监潘亚莲以“轻量级存储集群控制器HBlock的设计理念与场景实践”为主题,讲解了HBlock在产品理念、价值主张、应用场景等方面的内容。自研·创新·可控HBlock开启存储新纪元IDC预测,全球20......
  • 【C语言进阶】数据如何安家?C语言内存中的存储艺术深度解析
    ......
  • 2024年关于短信轰炸机原理研究并实现的流程 (290021243
    偶然看到gitHub上面有短信轰炸机源码,于是产生了研究的想法。经过研究源码发现是通过抓包进行第三方网站抓包并且收集,最终进行post/get请求。携带header和token进行第三方网站模拟请求。于是在mac上面下载了fiddler进行代理配置开放了本机ip下的8888商品,用手机同时访问本机ip的......
  • 海光 FTPM 运行报错:Fapi_Provision_Finish() ErrorCode (0x00060025) No EK certifica
    使用的是海光CPU提供的基于固件的FTPM,错误原因是海光没有给TPM提供相应的EK证书。从而导致Fapi_Provision()接口无法通过证书的校验。关于Fapi_Provision()接口的功能,官网提到是:RetrievetheEKtemplate,nonceandcertificate,verifythattheymatchtheTPM’sEK......
  • Android 存储概览
    存储区​Android一开始就将存储区分为内部存储和外部存储,对应手机自带的存储和可插拔的sd卡(可类比于PC的硬盘和U盘)。内部存储容量有限,Google建议App数据尽量存储于外部存储中。随着硬件技术发展,自带大容量空间的手机开始出现,关于内部存储的描述逐渐偏离现实了,于是从A......