k8s 存储卷和pvc,pv

news/2024/2/28 19:18:59/文章来源:https://blog.csdn.net/weixin_51694382/article/details/135607341

存储卷---数据卷

容器内的目录和宿主机的目录进行挂载。

容器在系统上的生命周期是短暂的,deletek8s用控制器创建的pod,delete相当于重启,容器的状态也会回复到初始状态。

一旦回到初始状态,所有的后天编辑的文件的都会消失。

容器容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被销毁,删除,重启,节点上的存储卷的数据依然存在,后续也可以继续使用。可以继续将容器内目录和宿主机挂载,保存的数据继续使用。

1,emptyDir

容器内部共享存储卷,k8s系统当中,是一个pod当中的多个容器共享一个存储卷目录。

emptyDir卷可以是pod当中容器在这个存储卷上读取和写入。

emptyDir是不能挂载到节点的。随着pod的生命周期结束,emptyDir也会结束,数据也不会保存

kubectl create deployment nginx --image=nginx:1.22 --replicas=3 --dry-r un=client -o yaml > test1.yaml

#第一-个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者其他容器的共享目录

#引用.上一个挂载的名称,表示我将和/us r/share/nginx/html/这个目录挂载,由data目录和他挂载

进入容器,指定容器 -c 指定

kubectl exec -it nginx-74d46b66bd-747x2 -c nginx1 bash

只能用于容器内部共享文件

例如:lnmp中

2,hostPath:将容器内的挂载点,和节点上的目录进行挂载,hostPath可以失效数据的持久。node节点被销毁,那么数据也会被丢失。

面试题:污点设置为NoExecute:节点上的pod会被驱逐,文件数据在不在?

pod被驱逐,并不是node节点被销毁。所有的数据还保留在节点上。

pod被驱逐(基于控制器创建的)会在其他重新部署,又会在其他节点生成一个新的存储卷。数据依然可以持久化。

emptyDir如果被驱逐,共享数据会丢失。

将pod删除之后,节点上的数据还在

3,NFS共享存储:

在k8s4上做创建一个volumes

查看暴露出来的共享目录

在其他机器上查看

nfs两种方式

1,server可以是共享节点的ip地址,也可以是主机名,主机名要做映射。

所有的pob内的目录都和节点上的nfs共享绿形成数据卷,所有 的数据文件都保存在共享目录当中,

2,用域名一定要做主机映射

kubectl delete -f test1.yaml

可以基于yaml文件删除pod,yaml文件还在

工作中最常见的存储卷的方式是hostPath,NFS

推荐nfs

pvc和pv

pv:全称Persistent Volume 持久化存储卷,描述和定义一个存储卷,pv是由我们运维人员来定的

pvc:Persistent Volum Claim 持久化存储的请求。pvc实际上是用来描述或者声明我希望使用什么样pv来进行存储。

pvc-pv是一一对应的关系(描述,存储(大小))

pvc:---->pv-----NFS

pvc和pv都是虚拟化的概念,是k8s的抽象的虚拟的存储资源。

pod内的挂载点声明一个请求pvc请求,pvc会找一个最合适的pv来作为pod的存储卷,pv和关系目录在一一映射,最终由nfs来提供最终的关系存储空间。

匹配最优的pv3,只有pv3被占用了,才会选择pv4

pvc和pv 有两种请求方式,静态请求和动态请求

pvc和pv之间的静态请求,(一旦成百个pvc怎么办,所以还有动态pvc)

pv是集群当中的存储资源,pvc请求存储资源,也是对存储资源的一个检索(检查索引)选择一个最合适的pv来存储资源。篇v和pvc之间是有生命周期管理:

1,provisioing(配置)----pvc请求request----检索(找一个合适的pv)---pvc和pv(binding 绑定)----使用-----pod被删除------pv的releasing(释放)----recycling(回收)

配置:静态,动态

绑定:就是把pv分配给pvc

使用:就是pod提供pvc使用存储资源

释放:pod解除和volume的关系,删除pvc

回收:保留pv,让下一个pvc使用

pv的状态:

Available:可用,而且没有被任何pvc绑定

Bound:绑定,pv已经绑定了pvc,绑定即使用

released:释放,pvc已经被删除了,但是pv的存储资源还没有被集群回收Failed:表示pv资源回收失败,而且pv为不可用状态。

支持的读写方式:

ReadWriteOnce RWO,配置文件里是全称,存储pv可读可写,但是只能被当pod挂载。

ReadOnlyMany:ROX 存储的pv可以以pv只读的方式被多个pod挂载

ReadWriteMany:RWX 存储可以支持读写的方式被多个pod共享。

nfs:可以支持三种读写和挂载方式

hostPath:只支持ReadWriteOnce 方式

SCSI

ISCS不支持ReadWriteMany

lsscsi

iscsiadm -m session -P 3

iscsiadm 查看服务器是否有iscsi设备

-m session:指定操作的会话模块,管理iscsj的会话

-P 3: 显示详细信息的级别。级别就是3.显示详细信息。

hostPath:支持ReadWriteOnce 方式。

在生产中要检查

集群回收pv资源的方式:

Retain 保留,pod和挂载点的数据不会被删除(默认即可)

Recycle:回收,pv上的数据会被删除,挂载点的数据也会被删除

Delete:删除,解绑时,自带删除pv上的数据。(本地硬盘不能使用,AWS,EBS GCE)支持的动态卷的可以使用,pv不再可用(云平台自己处理)

补充:当pod运行之后,通过pvc请求到了pv,除非pod被销毁,否则无法删除pvc

暴露多个nfs共享文件

在其他节点查看

编辑pv文件

vim pv.yaml

编写pvc文件

vim pvc.yaml

根据需求精确匹配

kubectl apply -f pvc.yaml

pvc----请求用哪个pv的存储----pv和物理存储做映射(挂载)----物理设备提供存储卷

删除pvc,要先删除pod

表示回收完毕

恢复pv到可用状态:

删除红框内的部分

kubectl edit pv pv003

设定回收策略:

将pv003和pv004更改回收策略Recycle

回收完之后,资源会被删除

删除pvc之后

Delete策略,只支持动态卷

返回原状态

kubectl edit pv pv003

总结:

k8s当中存储卷的模式:

emotyDir:容器内的存储卷,随着pod被销毁,文件也会被销毁,数据不保留

hostPath:节点目录的存储卷,可用实现持久化。数据在每个节点上都有,不方便管理

nfs:共享目录存储卷,可用实现持久化。数据集中在一个目录,方便管理

pv和pvc

pvc请求-----pv的存储资源------硬盘空间(NFS)

nfs支持pvc的所有挂载方式和读写模式

hostPath仅支持支持ReadWriteOnce方式。

pvC是以检索的方式找到匹配的pv资源,

检索挂载方式和读写模式

检索pv能提供的存储资源的大小

谁合适选谁

保留:默认可以不写.

回收:自动回收,节点上的数据会被删除

删除: pv会变成failed模式, 可用,数据也会被删除。

静态比较麻烦,自动的匹配pv资源呢?动态pvc

在工作当中静态pv和pvc

运维负责:创建好持久化存储卷,声明好读写和挂载类型 以及可用提供的存储空间

pvc开发做,要和开发沟通好,你期望的读写和挂载类型,以及存储空间。

动态pv

当我发布pvc之后可用生成pv,还可用在共享服务器上之间生成挂载目录。

pvc从直接绑定和使用pv

动态pv需要两个组件:

1,卷插件,k8s本身支持的动态篇v插件不包括nfs,需要声明和安装一个外部插件

Provisioner:存储分配器。动态创建pv,任何根据pvc的请求自动绑定和使用。

2,StorageClass:来定义pv的属性,存储类型,大小,回收策略。

还是用nfs来实现动态PV,NFS支持的方式NFS-client,Provisioner来适配nfs-client nfs-client-provisioner卷插件。

实验

先插件一个共享目录

mkdir k8s

chmod 777 k8s

vim /etc/exports

/opt/k8s 192.168.176.0/24(rw,no_root_squash,sync)

systemctl restart rpcbind

systemctl restart nfs

showmount -e

在其他节点查看

先创建一个serviceAccountl

NFS PRovisioner:是一个插件,没有权限是无法再集群当中获取k8s的消息。插件要有权限能够监听apiserver,获取get,list(获取集群的类别资源)create delete

vim nfs-client-rbac.yaml

rbac:Rple-based ACCESS CONTROL

定义角色在集群当中可以使用的权限

-apiGroups: [""]

#apigroups定义了规则使用哪个API的组,空字符"",代表直接使用API的核心组的资源。

verbs: ["get","list","watch","create","delete"]

#表示权限的动作

kubectl apply -f nfs-client-rbac.yaml

角色 权限都已经创建完毕

部署插件:NFS -privisioner。deplpyment来创建插件 pod

1.20 之后有一个新的机制

selfLink:API的资源对象之一,表示资源对象在集群当中自身的一个连接,self-link是一个唯一标识符号,可以用于标识k8s集群当中每个资源的对象。

self link是值是一个URL,指向改资源对象的k8s api的路径。

更好的实现资源对象的查找和引用。

vim /etc/kubernetes/manifests/kube-apiserver.yaml

feature-gates=RemoveSelfLink=false

feature-gates:在不破坏现有规则以及功能基础_上引入新功能或者修改现有功能的机制。禁用不影响之前的规则。

部署nfs-provisioner的插件:

nfs的provisioner的客户端已pod的方式运行在集群当中,监听k8s集群当中pv的请求。动态的创建于nfs服务器相关的pv。

容器里使用的配置,在provisioner当中定义好环境变量,传给容器。storageclasss的名称,nfs服务器的地址,nfs的目录。

vim nfs-client-provisioner.yaml

provisioner要创建pv,在共享目录里创建的

创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

vim nfs-client-storageclass.yaml

kubectl apply -f nfs-client-storageclass.yaml

kubectl get storageclasses.storage.k8s.io

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE

nfs-client-storageclass nfs-storage Retain Immediate true 106s

NAME: StorageClass 的名称,这里是 nfs-client-storageclass。

PROVISIONER: Provisioner 的名称,这里是 nfs-storage。它指定了用于动态创建 PV 的 Provisioner。

RECLAIMPOLICY: 回收策略,这里是 Delete。表示当 PersistentVolume(PV)被释放时,它的数据将被删除。

其他可能的值包括 Retain,表示在释放 PV 时保留数据。

VOLUMEBINDINGMODE: 卷绑定模式,这里是 Immediate。表示当 PVC 请求创建 PV 时,

系统会立即绑定一个可用的 PV。另一种可能的值是 WaitForFirstConsumer,

表示系统将等待第一个使用者出现后再绑定 PV。

ALLOWVOLUMEEXPANSION: 允许卷扩展,这里是 false。表示不允许扩展 PV 的容量。

如果设置为 true,则表示允许在运行时扩展 PV 的容量。

创建 PVC 和 Pod 测试

vim test-pvc-pod.yaml

总结:动态pv

provisioner插件---支持nfs

stroagclass:定义pv的属性

动态pv的默认策略是删除(面试题)

动态pv删除之后的状态,released。

1,插件账号,给卷插件能够在内部通信,获取资源,监听事件,插件,删除,更新pv

2,插件卷插件pod,卷插件的pod插件pv

3,storageclass:给pv赋予属性(pvc删除之后pv的状态,以及回收策略)

4,插件pvc----完成。

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

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

相关文章

PySide6/PyQt6如何设置全局热键,全局热键!

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒⚓️ 相关链接 ⚓️📖 介绍 📖 我们在使用PySide6/PyQt6设置热键的时候一般都是使用QShortcut,、QKeySequence两个类来实现,但是这样写的快键键并不是全局快捷键,需要用户激活软件窗口才能实现快捷键对应的功能,…

【面试合集】说说微信小程序的发布流程?

面试官:说说微信小程序的发布流程? 一、背景 在中大型的公司里,人员的分工非常仔细,一般会有不同岗位角色的员工同时参与同一个小程序项目。为此,小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团…

数据结构【树+二叉树】

目录 线性表和非线性表 树的概念 树的存储表示 二叉树的概念 特殊二叉树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 顺序存储 链式存储 本篇我们开始进入数据结构中【树】的学习。 线性表和非线性表 逻辑结构:人想象出来的物理结构&#xf…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

MongoDB-数据库文档操作(2)

任务描述 文档数据在 MongoDB 中的查询和删除。 相关知识 本文将教你掌握&#xff1a; 查询文档命令&#xff1b;删除文档命令。 查询文档 我们先插入文档到集合 stu1 &#xff1a; document([{ name:张小华, sex:男, age:20, phone:12356986594, hobbies:[打篮球,踢足球…

【软件测试】学习笔记-测试基础架构

这篇文章探讨什么是测试基础架构。 什么是测试基础架构&#xff1f; 测试基础架构指的是&#xff0c;执行测试的过程中用到的所有基础硬件设施以及相关的软件设施。因此&#xff0c;我们也把测试基础架构称之为广义的测试执行环境。通常来讲&#xff0c;测试基础 架构主要包括…

【PostgreSQL内核学习(二十三)—— 执行器(ExecEndPlan)】

执行器&#xff08;ExecEndPlan&#xff09; 概述ExecEndPlan 函数ExecEndNode 函数 总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用…

压力测试+接口测试(工具jmeter)

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

DC电源模块与AC电源模块的对比分析

DC电源模块与AC电源模块的对比分析 BOSHIDA DC电源模块和AC电源模块是两种常见的电源模块&#xff0c;它们在供电方式、稳定性、适用范围等方面有所不同&#xff0c;下面是它们的对比分析&#xff1a; 1. 供电方式&#xff1a; DC电源模块通过直流电源供电&#xff0c;通常使用…

shiro实战

接下来我将用编码的方式&#xff0c;来演示如何使用shirojwt实现认证并下发token&#xff0c;但是没有整合到springboot中。只是shiro的API的调用 1. shirojwt 实现登录认证、获取资源的流程图 2.编码实现 &#xff08;1&#xff09;工程结构 &#xff08;2&#xff09;核心代…

msvcr110.dll缺失怎么解决,修复msvcr110.dll缺失的方法分享

首先&#xff0c;我们来了解一下msvcr110.dll是什么文件。msvcr110.dll是Microsoft Visual C 2012 Redistributable的一个组件&#xff0c;它包含了许多运行库函数&#xff0c;这些函数在编译和运行使用Visual C编写的程序时是必不可少的。简单来说&#xff0c;msvcr110.dll就是…

Unity解决Udp客户端无法接收数据的问题

Unity解决Udp客户端无法接收数据的问题 在我之前做过的项目中&#xff0c;其中不少涉及Udp客户端的项目。在这些项目中&#xff0c;一般只需要实现客户端向服务器端发送数据的功能就可以了&#xff0c;一般都不用接收服务器端发送的数据&#xff0c;但是也有同学使用了我分享的…

[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb&#xff08;You Only Look Once version 8 with Oriented Bounding Boxes&#xff09;是一种先进的对象检测算法&#xff0c;它在传统的Yolov3和Yolov4基础上进行了优化&#xff0c;加…

Next.js 开发指​南(GitHub 115k star​)

Next.js 是一个构建于 Node.js 之上的开源 Web 开发框架&#xff0c;它扩展了最新的 React 特性&#xff0c;集成了基于 Rust 的 JavaScript 工具&#xff0c;可以帮助你快速创建全栈 Web 应用 &#xff08;full-stack Web applications&#xff09; 。 对于有一定 React 基础…

软件测试|使用selenium进行多窗口操作

简介 在我们进行自动化测试的工作中&#xff0c;经常会点击某个元素或者链接就会自动打开一个新页面&#xff0c;需要我们转到新打开的页面去进行操作&#xff0c;这个时候我们就需要能够自动切换到新页面进行后续的操作&#xff0c;selenium同样支持这个功能&#xff0c;本文…

FineBI报表页面大屏小屏自适应显示问题

大屏正常显示 显示正常 小屏BI自适应显示 存在遮挡字体情况 小屏浏览器缩放显示 等比缩放后显示正常

【CV】使用 matplotlib 画统计图,并用 OpenCV 显示静图和动图

1. 效果 静图 动图 2.思路 准备数据使用 pyplot 画统计图图片写入流&#xff0c;流转图&#xff08;numpy&#xff09;matplotlib 颜色 RGB 转 OpenCV 颜色 BRG 4. 静图 代码过程有注释&#xff0c;很简单的实现。注意 matplotlib RGB 转 OpenCV BGR image image[:, :,…

【51单片机系列】proteus仿真单片机的串口通信

本文参考&#xff1a;https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据&#xff0c;并将接收的数据发送出去&#xff0c;利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口&am…

网络安全技术新手入门:利用永恒之蓝获取靶机控制权限

目录 前言 一、搜索永恒之蓝可用模块 二、使用攻击模块 三、配置攻击模块 四、攻击 五、总结 前言 相关法律声明&#xff1a;《中华人民共和国网络安全法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动&…