k8s 存储卷和pvc,pv

存储卷---数据卷

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

容器在系统上的生命周期是短暂的,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.mzph.cn/news/628263.shtml

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

相关文章

SpringBoot教程(十六) | SpringBoot集成swagger(全网最全)

SpringBoot教程(十六) | SpringBoot集成swagger(全网最全) 一. 接口文档概述 swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具,在前后端开发之前,后端要先出接口文档&#xff0c…

Mysql-redoLog

Redo Log redo log进行刷盘的效率要远高于数据页刷盘,具体表现如下 redo log体积小,只记录了哪一页修改的内容,因此体积小,刷盘快 redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快Redo log 格式 在MySQL的InnoDB存储引擎中,redo log(重做日志)被用…

C++ 输入用户名和密码 防止注入攻击

1、问题解释:注入攻击 ,无密码直接登录数据库 可视化展示 1.1、当你的数据库为:其中包含三个字段id user 以及md5密码 1.2、在使用C堆数据库信息进行访问的时候,使用多条语句进行查询 string sql "select id from t_user…

Spring自带分布式锁你用过吗?

环境:SpringBoot2.7.12 本篇文章将会为大家介绍有关spring integration提供的分布式锁功能。 1. 简介 Spring Integration 是一个框架,用于构建事件驱动的应用程序。在 Spring Integration 中,LockRegistry 是一个接口,用于管理…

使用Postman测试WebService接口

文章目录 使用Postman测试WebService接口1. 访问wsdl地址2. Postman配置1. URL及Headers设置2. Body设置3. 响应结果 使用Postman测试WebService接口 1. 访问wsdl地址 接口地址如:http://localhost:8101/ws/hello?wsdl 2. Postman配置 1. URL及Headers设置 2. B…

跟着小德学C++之数据库基础

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

【揭秘】sleep()、wait()、park()三种休眠方式的终极对比

在Java中,线程休眠的三种方式包括Thread.sleep、Object.wait和LockSupport.park。Thread.sleep使线程在指定时间后进入休眠,状态为TIMEDWAITING,不会释放锁。Object.wait需在对象锁的保护下调用,会释放该对象的锁,使线…

leetcode 动态规划(单词拆分)

139.单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 …

图解智慧:数据可视化如何助你高效洞悉信息?

在信息爆炸的时代,数据扮演着越来越重要的角色,而数据可视化则成为解读和理解海量数据的得力工具。那么,数据可视化是如何帮助我们高效了解数据的呢?下面我就以可视化从业者的角度来简单聊聊这个话题。 无需深奥的专业知识&#x…

第1章 数据结构与算法介绍

文章目录 1.1 数据结构和算法内容介绍1.1.1 先看几个经典的算法面试题1.1.2 数据结构和算法的重要性1.1.3 本套数据结构和算法内容介绍1.1.4 课程亮点和授课方式 1.1 数据结构和算法内容介绍 1.1.1 先看几个经典的算法面试题  字符串匹配问题:: 有一…

wpf使用Popup封装数据筛选框

(关注博主后,在“粉丝专栏”,可免费阅读此文) 类似于DevExpress控件的功能 这是DevExpress的winform筛选样式,如下: 这是DevExpress的wpf筛选样式,如下: 这是Excel的筛选样式,如下: 先看效果 本案例使用wpf原生控件封装,功能基本上都满足,只是颜色样式没有写…

为何我选择山海鲸可视化:五大优势解析

在众多的可视化产品中,我选择了山海鲸可视化,这并非偶然。在对比了其他同类产品后,我发现山海鲸可视化具有许多独特的优势和特点,使得它成为了我心目中的理想选择。下面我简单说一下我选择这款产品的几大原因,希望对在…

最新国内可用GPT4、Midjourney绘画、DALL-E3文生图模型教程

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

【python 的各种模块】(9) 在python使用PIL( 即pillow模块 ) 修改图片

目录 1 导入PIL模块(pillow) 1.1 PIL的全称:Python Imaging Library 1.2 导入PIL模块 1.2.1 可用的导入形式 1.2.2 常用的导入形式 1.2.3 PIL下面的常用子模块 2 PIL.Image的方法 (读入,生成和显示图片) 2.1 用 PIL.Image…

蓝桥杯AcWing学习笔记 8-2数论的学习(下)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论(下) 蓝桥杯省赛中考的数论不是很多,这里讲几个蓝桥杯常考的知识点。 约数个数定理 我们如何去求一个数的约数个数呢? N N N分解质因数的结果: N P 1 α…

HTML+CSS-02

阿里巴巴矢量图标库的使用 阿里巴巴网址矢量图标库网址 https://www.iconfont.cn/ 如何使用 选择需要的icon图标加入购物车下载代码 在将解压后的文件夹复制到项目中进入demo_index.html中打开就可以看到示例的三种用法 三种引入方法 Unicode 引用 Unicode 是字体在网页端…

vscode(visual studio code) 免密登陆服务器

1.生成密钥 首先,在本地,打开命令输入框: WinR–>弹出输入框,输入cmd,打开命令框。 然后,在命令框,输入 ssh-keygen -t rsa -C "love"按两次回车键,问你是否重写,选择…

人工智能SCI二区期刊Applied Intelligence高被引录用论文合集,含2024最新

今天给着急发论文的同学推荐一本期刊:《APPLIED INTELLIGENCE》。 该刊由SPRINGER出版商于1991年创刊,刊期Bimonthly,专注于人工智能和神经网络的研究,重点关注有关创新智能系统的方法论及其在解决现实生活复杂问题的研究进展&am…

Springboot中使用Filter过滤器

1、概述 springboot工程中使用Filter过滤器与其他地方使用基本相同,只是注入的方式不同。 2、创建Filter过滤器 实现Filter接口,重写doFilter方法 filterChain.doFilter(servletRequest,servletResponse);表示放行 public class MyFilter implement…

Rocketmq rust版本-开篇

我是蚂蚁背大象(Apache EventMesh PMC&Committer),文章对你有帮助给Rocketmq-rust star,关注我GitHub:mxsm,文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsmapache.com Rust重构Rocketmq,大家好我是mxsm(Apache EventMesh PMC&Comm…