K8S-PV 与PVC

持久存储卷(Persistent Volume,PV)

PV 是k8s管理员定义的好的物理存储或者说实际存储,对应用来说是透明的,应用只需要向着PVC申请即可,具体使用的创建好的那个PV是由PVC去匹配和绑定的。

  • PV是集群中的定义的一块存储所以没有namespace限制

持久卷的类型

PV 持久卷是用插件的形式来实现的。Kubernetes 目前支持以下插件:

  • csi - 容器存储接口 (CSI)
  • fc - Fibre Channel (FC) 存储
  • hostPath - HostPath 卷 (仅供单节点测试使用;不适用于多节点集群;请尝试使用 local 卷作为替代)
  • iscsi - iSCSI (SCSI over IP) 存储
  • local - 节点上挂载的本地存储设备
  • nfs - 网络文件系统 (NFS) 存储

访问模式

ReadWriteOnce(RWO)卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。

ReadOnlyMany(ROX)卷可以被多个节点以只读方式挂载。

ReadWriteMany(RWX)卷可以被多个节点以读写方式挂载。

ReadWriteOncePod(RWOP)特性状态: Kubernetes v1.27 [beta]卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用 ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。

回收策略

设置参数:

spec.persistentVolumeReclaimPolicy

目前的回收策略有:

  • Retain – 手动回收
  • Recycle – 简单擦除 (rm -rf /thevolume/*)
  • Delete – 删除关联存储资产

对于 Kubernetes 1.29 来说,只有 nfs 和 hostPath 卷类型支持回收(Recycle)

生命周期

每个持久卷会处于以下阶段(Phase)之一:

Available卷是一个空闲资源,尚未绑定到任何申领

Bound该卷已经绑定到某申领

Released所绑定的申领已被删除,但是关联存储资源尚未被集群回收

Failed卷的自动回收操作失败

kubectl describe persistentvolume <name> 查看已绑定到 PV 的 PVC 的名称

定义PV

apiVersion: v1
kind: PersistentVolume
metadata:name: pv0003
spec:capacity:storage: 5GivolumeMode: Filesystem
#指定访问模式accessModes:- ReadWriteOnce
#指定回收策略persistentVolumeReclaimPolicy: RecyclestorageClassName: slowmountOptions:- hard- nfsvers=4.1nfs:path: /tmpserver: 172.17.0.2

持久存储卷声明(Persistent Volume Claim,PVC)

PVC 存在namespace限制

PVC 和PV的关系是一对一的

PVC配置PV时候主要是根据两个方面第一就是容量storage,第二个就是accessModes(访问模式),

PVC 是对**应用**使用的,表达的是用户对存储的请求,当程序或者应用需要使用持久化存储的时候,

  • 需要事先在应用同名称空间定义一个PVC,

  • 在yaml的容器中定义需要挂载的mounts

  • 将在应用的yaml文件中定义mounts 指定到创建的pvc中

PVC 定义的对象

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: block-pvc
spec:
#指定访问模式accessModes:- ReadWriteOnce
#卷模式 Filesystem/BlockvolumeMode: Filesystemresources:requests:storage: 10Gi 

使用PVC

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

StorageClass (动态制备卷)

每个 StorageClass 都包含 provisionerparameters 和 reclaimPolicy 字段, 这些字段会在 StorageClass 需要动态制备 PersistentVolume 时会使用到。

定义StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: low-latencyannotations:#是否是默认Class,一个集群只有一个DefaultClassstorageclass.kubernetes.io/is-default-class: "false"
#指定制备器
provisioner: csi-driver.example-vendor.example
#指定回收策略
reclaimPolicy: Retain # default value is Delete
allowVolumeExpansion: true
mountOptions:- discard # this might enable UNMAP / TRIM at the block storage layer
#default Immediate ,WaitForFirstConsumer 
volumeBindingMode: WaitForFirstConsumer
parameters:guaranteedReadWriteLatency: "true" # provider-specific

volumeBindingMode

volumeBindingMode 字段控制了卷绑定和动态制备应该发生在什么时候。 当未设置时,默认使用 Immediate 模式。

Immediate 模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定和动态制备。 对于由于拓扑限制而非集群所有节点可达的存储后端,PersistentVolume 会在不知道 Pod 调度要求的情况下绑定或者制备。

集群管理员可以通过指定 WaitForFirstConsumer 模式来解决此问题。 该模式将延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建。 PersistentVolume 会根据 Pod 调度约束指定的拓扑来选择或制备。 这些包括但不限于资源需求、 节点筛选器、 Pod 亲和性和互斥性、 以及污点和容忍度。

制备器(Provisioner)

Kubernetes 建议使用 CephFS CSI 第三方存储驱动插件。

Container Storage Interface是由来自Kubernetes、Mesos、Docker等社区member联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序。

CSI规范定义了存储提供商实现CSI兼容的Volume Plugin的最小操作集和部署建议。CSI规范的主要焦点是声明Volume Plugin必须实现的接口。

指定Provisoner 动态制备PV,除了使用k8s内置的制备以外还可使用外置的制备器如NFS

卷插件内置制备器配置示例
AzureFileAzure File
CephFS--
FC--
FlexVolume--
iSCSI--
NFS-NFS
RBDCeph RBD
VsphereVolumevSphere
PortworxVolumePortworx Volume

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

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

相关文章

速度规划:s形曲线------pencv c++绘图(1)

理论篇 代码篇&#xff1a; opencv环境配置 注意&#xff01;注意&#xff01;注意&#xff01; 配置结束后运行环境切换为如下再运行&#xff1a; #include <iostream> #include <cmath>#include <opencv2/opencv.hpp>using namespace std;double a_max…

github和gitee

github GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 github可以给提交的代码打上标签&#xff0c;方便版本的迭代和回退&#xff0c;也是一个存储代码的仓库 github工作区 gitee是gitHub的…

蓝桥杯---分小组

9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C .... I 下面的程序列出了所有的分组方法。 该程序的正常输出为:

【CSS】margin塌陷和margin合并及其解决方案

【CSS】margin塌陷和margin合并及其解决方案 一、解决margin塌陷的问题二、避免外边距margin重叠&#xff08;margin合并&#xff09; 一、解决margin塌陷的问题 问题&#xff1a;当父元素包裹着一个子元素且父元素没有边框的时候&#xff0c;当给子元素设置margin-top:100px&…

JS实现一键复制、选中复制、选中多行复制

JS实现一键复制 首先我们准备一份通用的一键复制代码&#xff1a; export function copyTextFun(text) {if (!text) return falsevar textarea document.createElement(textarea) textarea.value text document.body.appendChild(textarea) textarea.select() message.dest…

【精选】java继承进阶——继承的特点 this、super

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

5 款提升 UI 设计效率的软件工具

你知道如何选择正确的UI设计软件吗&#xff1f;你知道设计漂亮的用户界面和带来良好用户体验的应用程序需要什么界面设计软件吗&#xff1f;基于APP界面的不同功能&#xff0c;所选择的APP界面设计软件也会有所不同。然而&#xff0c;并不是说所有的APP界面设计软件都非常精通&…

【安卓中kotlin 泛型的基本用法】

泛型的基本用法 泛型主要有两种定义方式&#xff0c;一种是定义泛型类&#xff0c;另一种是定义泛型方法&#xff0c;使用的语法结构都是。当然括号内的T并不是固定要求的&#xff0c;事实上你使用任何英文字母或单词都可以&#xff0c;但是通常情况下&#xff0c;T是一种约定…

VMware16安装CentOS7mini 中遇到的一些问题

1、安装后网络不通解决方法&#xff1a; 修改这个文件/etc/sysconfig/network-script/ifcfg-ens33下ONBOOTno这个选项为yes&#xff1b;重启网络service network restartping baidu.com 2、安装的CentOS mini 系统少了很多软件需要安装&#xff0c;联网后一般采用网络安装 y…

Leetcode02.05:链表求和

一、题目描述 给定两个用链表表示的整数&#xff0c;每个节点包含一个数位。 这些数位是反向存放的&#xff0c;也就是个位排在链表首部。 编写函数对这两个整数求和&#xff0c;并用链表形式返回结果。 示例&#xff1a; 输入&#xff1a;(7 -> 1 -> 6) (5 -> 9 -…

【C语言】贪吃蛇 详解

该项目需要的技术要点 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等。 由于篇幅限制 和 使知识模块化&#xff0c; 若想了解 使用到的 Win32API 的知识&#xff1a;请点击跳转&#xff1a;【Win32API】贪吃蛇会使用到的 Win32API 目录 1. 贪吃蛇游…

02.02_111期_C++_数据内存分布笔记

operator new 和 operator delete是系统提供的全局函数 operator new是对malloc的封装 operator deleter是对free的封装 实际上在写出int* p2 new int;这样的代码的时候&#xff0c; 由于new是一个操作符&#xff0c;所以在编译的时候要转成对应的指令 转成的指令就是opera…

yolo导出的onnx怎么使用onnxruntime调用

1.上几篇文件&#xff0c;写了怎样标注数据&#xff0c;获取yolo数据&#xff0c;怎样训练数据。这篇文章写下&#xff0c;怎样使用yolo训练好的网络进行推理&#xff0c;怎样使用onnxruntime调用网络推理。 2.yolo模型训练后推理&#xff0c;主要分两种&#xff0c;一种是使用…

系统设计认知与常用方法(架构设计)

系统设计应该着重解决什么问题、回应哪些关切、如何演进、常用设计方法、如何落地&#xff1f; 系统设计认知 设计是需求与开发的连接点 解决复杂度 本质复杂度&#xff1a;问题本身的固有复杂度&#xff08;不可避免&#xff09;衍生复杂度&#xff1a;解决方法引入的额外…

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么&#xff1f; 2.HTTP状态码有哪些&#xff1f; 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些&#xff1f; 4.HTTP和HTTPS有什么区别&…

vue3-内置组件-Transition

基于状态变化的过渡和动画&#xff08;常用&#xff09; 建议多看几遍~~。然后动手去写写&#xff0c;学编程只有多动手才能有感觉。 内置组件: 它在任意别的组件中都可以被使用&#xff0c;无需注册。 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动…

EMC测试介绍

EMC测试介绍 EMC包括电磁干扰(EMI) 和抗电磁干扰(EMS)两个部分。发射干扰传导发射测试极限线以峰值检坡器测量时使用的决策树应用EN55022标准的波形示例测试仪器![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4580f693ae9a4f84891ece29681c7bf2.png) 辐射发射测试…

如何快速捕获和验证用户软件需求,实现快速迭代

在软件开发过程中&#xff0c;快速捕获和验证用户需求&#xff0c;以及迅速迭代功能&#xff0c;是保持项目敏捷性和用户满意度的关键。下面将介绍一些建议&#xff0c;帮助你在软件开发过程中更有效地满足用户需求。 1. 深入沟通与用户互动 要捕获用户需求&#xff0c;必须与…

Lua可变参数函数

基础规则 lua传入参数给一个function时采用的是“多余部分被忽略&#xff0c;缺少部分有nil补足”的形式&#xff1a; function f(a, b)return a or b endCALL PARAMETERS f(3) a3, bnil f(3, 4) a3, b4 f(3, 4, 5) a3, b4 (5 is discarded) unpack/pack…

CPU对数据库的性能影响

最近做了个CPU性能测试&#xff0c;测试语句如下 select count(*) from test01; ---44537344行数据&#xff0c;大概5.6GB 设置了参数alter system set "_serial_direct_read"never; 避免direct path read 为了避免物理IO的影响&#xff0c;多次反复运行&#xff0c;…