k8s的PV/PVC详解以及使用范例

PV和PVC是什么

在 Kubernetes (k8s) 中,Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 是管理存储资源的两个重要概念。它们抽象了存储细节,允许用户在不了解底层存储细节的情况下使用存储资源。

Persistent Volume (PV)

  • PV 是集群中的一块网络存储,由管理员预先配置或由 Kubernetes 动态配置,可以是 NFS、iSCSI、云提供商的存储系统如 AWS EBS、GCP Persistent Disks、Azure Disk Storage 等。
  • PV 是集群资源,与 Pod 生命周期独立,可以被不同 Pod 复用。
  • PV 有多种访问模式,如 ReadWriteOnce(单节点读写)、ReadOnlyMany(多节点只读)和 ReadWriteMany(多节点读写)。
  • PV 支持不同的存储类,允许定义不同的服务等级,比如 SSD 或常规硬盘。

Persistent Volume Claim (PVC)

  • PVC 是用户对 PV 的存储请求。用户在 PVC 中定义存储的大小和访问模式等需求,而不需要指定具体的 PV。
  • 当 PVC 被创建时,Kubernetes 会从可用的 PV 中找到一个匹配用户需求的卷,并建立绑定,若无可用 PV,存储类动态配置可新建一个。
  • PVC 会绑定到与其大小和访问模式条件相匹配的 PV(StorageClass 参数会用来选择动态创建 PV 的配置)。
  • 当 Pod 被创建时,它可以引用 PVC。Kubernetes 会确保这个 PVC 绑定的 PV 被挂载到 Pod 指定的路径上。

使用 PV 和 PVC 的过程大体上分为以下几个步骤:

  1. 管理员设置 Persistent Volumes:根据集群使用的实际存储系统创建一系列 PV。
  2. 用户创建 Persistent Volume Claims:用户根据自己的需求创建 PVC,声明所需的存储空间大小以及访问模式。
  3. 存储绑定:Kubernetes 寻找符合 PVC 条件的 PV,并建立绑定关系。如果环境支持动态存储配额,一个新的 PV 也可以根据 PVC 请求被创建出来。
  4. 使用 Persistent Volume Claims:Pod 在定义中引用 PVC。Pod 被调度到节点上时,PV 会被挂载到相应的目录,让 Pod 能使用相关的存储资源。

利用 PV 和 PVC,Kubernetes 实现了存储的声明式管理,用户无须处理存储资源的具体创建和分配细节,从而大大简化了在容器化环境中管理持久性数据的复杂性。这种模式提高了存储资源的复用性和应用的可移植性。

PV/PVC和csi插件是什么关系

在 Kubernetes (k8s) 中,Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 是存储资源的API对象,而 Container Storage Interface (CSI) 是一个标准的接口,用于连接和管理存储解决方案。这三者在 Kubernetes 存储体系中关系密切,下面逐一解释它们之间的关系:

PV 和 PVC

  • PV 和 PVC 是 Kubernetes 存储管理中的两个基本概念。PV 代表集群中的一块存储资源,它对应于底层的物理或网络存储。PVC 则是用户对存储的请求,相当于一个声明,用户通过 PVC 来请求所需的存储资源。
  • 用户创建 PVC 来声明所需的存储特性(如容量和访问模式),然后 Kubernetes 系统会自动将 PVC 和合适的 PV 绑定,或者动态创建一个新的 PV 来满足 PVC 的请求。

CSI

  • CSI 是一种标准化的接口规范,旨在定义如何在 Kubernetes 这类容器编排平台中对存储资源进行操作(比如创建卷、挂载卷、快照等)。
  • CSI 使得存储提供商(如云平台或者存储系统厂商)可以开发一套插件,在不修改 Kubernetes 核心代码的情况下,使其存储产品和服务与 Kubernetes 兼容。
  • 当 Kubernetes 要进行存储相关操作,如根据 PVC 动态创建一个新的 PV 时,会调用符合 CSI 规范的存储插件来实现这些操作。

PV/PVC 与 CSI 的关系

  • PV/PVC 是 Kubernetes 中表示和请求存储资源的机制,它们抽象了具体实现详情,而 CSI 是底层实现这些存储操作的一种途径。
  • Kubernetes 控制器会监听 PVC 请求,根据提供的细节,通过 CSI 插件与具体的存储解决方案交互,动态地创建、配置和提供 PV 资源。
  • 使用 CSI 插件,管理员无需手动创建 PV 资源,当有符合条件的 PVC 请求时,PV 可以自动、动态地被创建和绑定。

归纳来说,PV 和 PVC 定义了用户如何在 Kubernetes 中请求和使用持久存储,而 CSI 提供了一个标准化的方式,让存储供应商不需要修改 Kubernetes 核心代码,就能插入他们的存储解决方案,使其能响应来自 Kubernetes 的持久存储请求,这包括动态地创建、删除和管理 PVs。

默认csi插件和当前csi插件

Kubernetes 并没有所谓的"默认" CSI(Container Storage Interface)插件。相反,Kubernetes 提供了 CSI 标准,任何存储服务供应商都可以根据该标准编写自己的CSI插件,与 Kubernetes 集成,来提供存储资源。

CSI 是一个跨产业标准,允许存储提供商将他们的解决方案接入容器编排系统,比如 Kubernetes,而不需要修改容器编排系统本身的代码。这种插件式的架构使得用户可以根据需要安装和使用特定的 CSI 插件。

一些 Kubernetes 集群可能会预先安装或推荐使用某些特定的 CSI 插件,这通常取决于被使用的 Kubernetes 部署方式或云服务提供商。例如:

  • 云服务商通常会为他们的存储解决方案提供自己的 CSI 加以集成,比如 AWS EBS CSI 驱动、Google Persistent Disk CSI 驱动、Azure Disk CSI 驱动等。
  • Minikube,一个轻量级的 Kubernetes 环境,使用内建的 storage-provisioner 插件来模拟持久化存储功能,但技术上它不是一个传统意义上的CSI驱动。

如果你想在 Kubernetes 集群中使用某种持久存储解决方案,你需要查看存储服务供应商是否提供对应的 CSI 插件,并按照其说明进行安装和配置。通过 Kubernetes 的生态系统,你可以找到各种支持 CSI 的存储驱动,包括但不限于云服务、软件定义存储和传统存储系统。

在 Kubernetes (K8s) 集群中,你可以通过检查集群中运行的 Pod 和 CSI 相关的 Custom Resource Definitions (CRDs) 来查询当前使用的 CSI 插件。下面是一些步骤和命令,通过它们可以查看集群中部署的 CSI 插件:

  1. 查看 CSI 相关的 Pods
    使用 kubectl 命令查看所有命名空间的 Pods,并筛选出带有 CSI 组件的 Pods。

    kubectl get pods --all-namespaces -o wide | grep csi
    

    CSI 驱动通常会以 daemonset 和/or statefulset 的形式运行在集群中。它们通常命名包含 csi,例如 csi-attachercsi-provisioner 等。

  2. 查询 CSI 驱动的 DaemonSets 和 StatefulSets

    kubectl get daemonset,statefulset --all-namespaces | grep csi
    

    此命令将列出所有命名空间中与 CSI 相关的 DaemonSet 和 StatefulSet 资源。

  3. 查看 CSI 驱动的 CRDs
    CSI 驱动可能会有关联的 CRDs:

    kubectl get crd | grep csi
    

    CSI 会注册一些自定义资源定义(CRDs),以便管理和操作存储功能。

  4. 检查 StorageClasses
    列出现有的 StorageClasses,并查看它们各自的 provisioner。

    kubectl get storageclass
    

    存储类的 provisioner 字段通常会指向一个 CSI 驱动程序,例如 kubernetes.io/aws-ebs 或自定义 CSI 驱动程序,例如 csi.storage.com

  5. 检查 CSI Drivers

    Kubernetes 1.14 开始引入了 CSIDriver 对象,这是一个集群范围内的资源,可以列出和描述安装在 Kubernetes 集群上的 CSI 驱动程序:

    kubectl get csidriver
    
  6. 检查 CSINode 信息

    CSINode 对象提供了节点级别的 CSI 驱动信息。它可以帮你理解每个节点上都安装了哪些 CSI 驱动:

    kubectl get csinode
    

通过上述步骤,你可以获取到关于当前 Kubernetes 集群中正在使用 CSI 插件的详细信息。如果你正在使用特定的 Kubernetes 构建或云服务提供商,他们可能会默认启用一些特定的 CSI 插件,具体信息可以通过他们的官方文档获得。

hostpath.csi.k8s.io插件是什么

hostpath.csi.k8s.io 是一个 Kubernetes CSI(Container Storage Interface)驱动程序的示例实现,它提供了一种将宿主机上路径(目录)作为卷挂载到 Pod 中的方法。

简单来说,HostPath CSI 驱动程序允许你在 Kubernetes Pod 中使用宿主机(也就是跑 Pod 的机器)的文件系统。这个 CSI 驱动通常用于测试目的,并不是为生产环境设计的。它将宿主机上的一个文件或目录作为卷暴露给所指定的 Pod,从而使得在不同的 Pod 之间共享数据变得可能。

由于 hostPath 方式只能在单个节点上工作(因为数据只存在于那个节点上),它并不能提供跨节点的数据持久性和共享访问,这是在分布式系统和云原生环境中一个很重要的特性。因此,这个驱动程序通常仅在单机环境下或者在开发和测试时用于快速简便地访问本机文件。

简单来说,如果有一个 Pod 需要对本机文件系统有访问权,开发者可以使用 hostPath CSI 驱动程序为这个 Pod 创建一个 PV (Persistent Volume) 和 PVC (Persistent Volume Claim),然后 Pod 可以挂载这个 PVC 来存储数据。

由于 hostPath 存储方式存在数据安全和隔离方面的问题,一般建议在生产环境使用更加稳定安全的存储解决方案,比如云存储服务(GCP 的 Persistent Disks、AWS 的 EBS、Azure 的 Disk Storage)或者专业的存储系统(如 NFS、Ceph、GlusterFS 等)。

完整的PV/PVC的使用范例

以下是一个使用 hostpath.csi.k8s.io 来创建 Persistent Volume (PV) 并由 Pod 使用的示例。

第一步: 安装 HostPath CSI 驱动器

如果还未安装 HostPath CSI 驱动器,需要根据 Kubernetes 的官方指南进行安装。可以通过部署驱动器的 YAML 文件来安装,通常来说这些文件可以在 Kubernetes 的官方 GitHub 仓库的 CSI 驱动器示例目录中找到。

第二步: 创建 PersistentVolume 资源

创建一个名为 pv-hostpath.yaml 的文件,描述如下的 PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:name: pv-hostpath
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: hostpathcsi:driver: hostpath.csi.k8s.iovolumeHandle: hostpath-volnodePublishSecretRef:name: hostpath-secretvolumeAttributes:storage.kubernetes.io/csiProvisionerIdentity: hostpath.csi.k8s.io

在这个配置中,我们定义了一个容量为 1Gi 的 PV,使用 HostPath CSI 驱动,并指定了一个 nodePublishSecretRef,你需要确保这个 secret 存在或者移除这一行。

使用 kubectl 创建 PV:

kubectl apply -f pv-hostpath.yaml

第三步: 创建 PersistentVolumeClaim 资源

创建一个名为 pvc-hostpath.yaml 的文件,描述如下的 PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-hostpath
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: hostpath

在这个配置中,我们定义了一个匹配刚才 PV 配置(同样容量和访问模式)的 PVC。

使用 kubectl 创建 PVC:

kubectl apply -f pvc-hostpath.yaml

第四步: 创建一个使用这个 PVC 的 Pod

创建一个名为 pod-using-hostpath-pvc.yaml 的文件,描述如下的 Pod:

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: myfrontendimage: nginxvolumeMounts:- mountPath: "/var/www/html"name: mypdvolumes:- name: mypdpersistentVolumeClaim:claimName: pvc-hostpath

在这个配置中,我们定义了一个使用前面定义的 PVC 挂载 volume 的 Nginx Pod。/var/www/html 是 Nginx 容器默认的服务目录,我们将挂载 HostPath 持久卷到这个位置。

使用 kubectl 创建 Pod:

kubectl apply -f pod-using-hostpath-pvc.yaml

注意:HostPath 存储方式只能在单个节点上工作,数据不会在集群中的其他节点上共享。因此,这个方案通常仅限于测试和开发环境使用,不适用于生产。对于生产环境,建议使用网络存储解决方案,如 AWS EBS、Google Persistent Disk 或者 NFS、Ceph 等分布式存储系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ruoyi-vue】关于密码重置

文章目录 前言解决问题 前言 在qq群里经常看到问ruoyi的账号密码是多少?有源代码忘记了登录密码怎么办? 解决问题 在 ruoyi-admin 模块内 SysUserController找到新增用户或修改用户密码的相关接口在里面就可以找相关创建密码的方法ruoyi里的创建密码的…

MySQL从入门到高级 --- 3.DML基本操作

文章目录 第三章:3.基本操作 - DML3.1 数据插入3.2 数据修改3.3 数据删除3.4 练习 第三章: 3.基本操作 - DML DML:数据操作语言,用来对数据中表的数据记录进行更新 关键字: insert 插入 delete 删除 update 更新 …

OceanBase V4.3 发布—— 迈向实时分析 AP 的重要里程

OceanBase在2023年初,发布了4.x架构的第一个重要版本,V4.1。该版本采用了单机分布式一体化架构,并在该架构的基础上,将代表数据库可靠性的RTO降低至 8 秒以内,从而确保在意外故障发生后,系统能够在极短时间…

碳化硅片有哪些比较重要的参数?

知识星球(星球名:芯片制造与封测社区)里的学员问:请问碳化硅衬底片到客户端验证主要测试什么项目,比较重要的参数有哪些? Lattice Parameters:晶格参数。确保衬底的晶格常数与将要生长的外延层…

面对网络安全,做好风险评估对企业会带来哪些帮助

随着信息技术的飞速发展,网络安全问题日益凸显,成为企业不容忽视的重要议题。企业作为社会经济活动的主要参与者,其网络安全不仅关系到自身的生存与发展,更与国家的经济安全、社会稳定息息相关。因此,企业必须高度重视…

深入探索jQuery:强大的JavaScript库

深入探索jQuery:强大的JavaScript库 文章目录 深入探索jQuery:强大的JavaScript库引言一、jQuery概述二、jQuery的核心功能选择器DOM操作修改元素属性:事件处理动画效果Ajax 三、jQuery的应用场景与示例1,表单验证2.轮播图HTML:CSS:jQuery: 3…

ubuntu docker 安装 git服务器 gitea

文章目录 安装 docker-compose安装 Giteadocker-compose.yml 内容访问 Gitea初始配置参考资料官方资料安装docker-compose 安装 docker-compose sudo apt install docker-compose -y docker-compose --version安装 Gitea docker --version docker-compose --version mkdir -p…

Qt——自定义富文本RichText

作者:小 琛 欢迎转载,请标明出处 文章目录 产品中的富文本富文本控件会面临的问题QTextBrowser例子:自定义富文本 产品中的富文本 用户界面中支持显示富文本格式(如加粗、斜体、不同颜色、超链接等)的文本内容。这种富…

盲人手机导航:科技之光引领无障碍出行新纪元

在这个日新月异的数字时代,科技不仅改变了我们获取信息的方式,更在无声中拓宽了视障人士的生活半径。盲人手机导航这一创新技术,正逐步成为他们探索世界、实现独立出行的重要伙伴。 对于大多数人而言,日常出行或许只是一次…

数据赋能(70)——概念:数据赋能业务过程的绩效评价

数据赋能业务过程的绩效评价涉及多个方面,这些方面共同构成了对业务过程中数据利用效果的综合评估。 以下是主要的绩效评价方面: 数据质量与准确性:评价数据收集、清洗和预处理过程的效率和准确性,确保所使用的数据是高质量、可靠…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年,水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件,明确总体要求及试点水库、先行区域建设技术要求等,为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

Eureka基础知识

Eureka是Netflix开源的一个服务发现框架,主要用于构建基于微服务架构的应用程序。它允许服务实例自动注册和发现,从而实现了服务之间的协调和通信。Eureka的设计目标是简单、可靠和高可用的服务注册和发现。 在微服务架构中,Eureka扮演了两个…

“科技让广告更精彩”四川迈瑞斯文化传媒有限公司 行业领先的一站式媒体采购供应平台

国际数字影像产业园与园区企业一同推动数字影像技术的创新与发展,为数字影像产业注入新的活力。其中,四川迈瑞斯文化传媒有限公司(906)作为数字媒体行业的优秀企业,坚持“科技让广告更精彩”的理念,致力于为…

不完全微分PD控制器(CODESYS源代码+算法详细介绍)

完全微分计算公式为Kp*Td/Ts(e(k)-e(k-1))。有关位置式PID和增量式PID更多相关内容,大家可以参考下面的文章链接: 1、CODESYS位置式PID CODESYS位置式PID(完整ST源代码)_codesys pid功能块-CSDN博客文章浏览阅读1.1k次,点赞2次,收藏2次。CODESYS增量式PID完整源代码请参看…

最新 COCO数据集的下载、使用方法demo最新详细教程

📸 最新 COCO数据集的下载、使用方法demo最新详细教程 🌐 文章目录 📸 最新 COCO数据集的下载、使用方法demo最新详细教程 🌐摘要引言正文📘 COCO数据集概览🚀 下载和设置COCO数据集环境准备下载数据集 &am…

C++之入门

文章目录 1、前言2、C的关键字2.1C语言32关键字2.2C关键字(63个) 3、命名空间4、输入输出(cout、cin)4、缺省参数5、函数重载6 引用6.1 引用的定义6.2 引用的特性6.3引用的使用场景6.4 实际例子6.5、总结 7、内联函数8、auto关键字9、nullptr关键字 1、前言 C语言是结构化和模…

Node.js和cnpm环境搭建

中州养老项目:前端环境搭建,Node.js和cnpm 一、nodejs安装 1.1 傻瓜式一直下一步即可,不需要额外进行任何配置 nodejs下载链接,提取码:5555 1.2 查看是否安装成功 cmd进入命令行界面 输入node -v 显示node版本,显示…

GO 的 Web 开发系列(八)—— Gin 自定义 Html 渲染实现多租户的模板设计

本文主要解决在多租户场景下的模板渲染问题。 正常情况下 Gin 配置的所有模板都属于同一个模板组合,相同名称的模板将相互覆盖。在未通过 define 指定模板名称时,同名模板文件也将相互覆盖。自定义函数中也无法区分租户,这将非常不方便我们进行多租户的模板渲染处理。通过自…

如何将本地项目上传到Github(SSH方式)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…