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----完成。

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

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

相关文章

docker screen 常用基础命令

1.docker基础命令 1.1开启docker systemctl start docker #开启docker service docker restart #重启docker systemctl stop docker #关闭docker 1.2查看命令 docker images #查看docker镜像docker ps #查看正在运行的镜像或者容器docker ps -a #查看所有容器1.3运…

算法部署过程中如何确保数据的安全?

在数字化时代,数据安全成为了企业和个人面临的一项主要挑战。随着技术的迅速发展,尤其在算法部署过程中,确保敏感数据的安全性变得更加复杂和关键。在这个背景下,软件加密和授权机制的作用显得尤为重要。软件加密不仅仅是转换数据…

IF=16.6 | Quick CTL细胞免疫佐剂免疫HLA转基因小鼠,助力TCR- T细胞构建!

023年10月12日,中国科学院微生物研究所高福研究团队和谭曙光研究团队于Nature Communications发表了题为KRAS G12V neoantigen specific T cell receptor for adoptive T cell therapy against tumors的研究论文。 影响因子:16.6 Doi:KRAS G…

HCS私有云简介

1、HCS简介和发展史 华为云产品:私有云和公有云,现在的私有云已经和公有云越来越像了FusionSphere是华为的一个品牌2016年,在5.0版本的时候,华为Openstack叫FusionSphere Openstack 5.0,底层用的是suse操作系统&#…

PLC编程中ST语言操作符的使用方法

ST(Structured Text)语言操作符主要用于PLC编程,主要包括算术运算符、比较运算符和逻辑运算符等。 算术运算符包括加()、减(-)、乘(*)、除(/)和指…

深信服技术认证“SCCA-C”划重点:交付和运维体系

为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。“考试重点”内容框架,帮助大家快速get重点知识。 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff…

记一次用Qt开发 “启动器” 的经历

项目背景 背景 工具多,需要频繁切换。Windows环境,因为日常用到的软件较多,大致如下 浏览器涉及3款 FirefoxChromeEdge 开发的编译器及IDE涉及 Visual StudioVisual Studio CodePycharmSublime Text 设备涉及 DeskTopMackbook AirNoteBook…

【模板规范】会议纪要模板

文章目录 1、简介2、纪要模板2.1、表格类会议纪要2.2、文档类会议纪要2.3、简易版项目纪要 3、会议纪要3.1、作用3.2、特点3.2.1、工作会议纪要3.2.2、代表会议纪要3.2.3、座谈会议纪要3.2.4、联席会议纪要3.2.5、办公会议纪要3.2.6、汇报会议纪要3.2.7、技术鉴定会议纪要 3.3、…

NVMe系统内存结构 - SGL

NVMe系统内存结构 - SGL 1 SGL简介2 SGL Segment3 SGL Descriptor3.1 SGL Data Block descriptor3.2 SGL Bit Bucket descriptor3.3 SGL Segment descriptor3.4 SGL Last Segment descriptor 4 SGL组织结构4.1 SGL1为SGL Data Block descriptor4.2 SGL1为SGL Last Segment desc…

【每日一题】2719. 统计整数数目-2024.1.16

题目; 2719. 统计整数数目 给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的…

解决Windows 10/11不能连接WiFi的几种办法,可以尝试

没有什么事情比电脑无法连接到互联网更令人沮丧了。当你的Windows 10/11电脑无法连接到网络时,本文将帮助你完成一些修复。 为什么我不能连接到网络 无线网络是复杂的,因为有几个故障点。从Wi-Fi交换机到软件冲突、路由器问题和ISP问题,找出网络故障可能很困难。 Windows…

兴达易控EtherCAT转Profibus网关让工业自动化变得轻松快捷

EtherCAT转Profibus网关&#xff08;XD-ECPBM20&#xff09;是一种用于实现不同通信协议间互联互通的设备。它主要用于工业控制系统中&#xff0c;能够将EtherCAT总线的数据传输转换为Profibus网络可接受的格式。这样的网关设备在工业自动化领域有着广泛的应用&#xff0c;因为…

zds1104示波器使用指南

1、设置语言 2、功能检测验证示波器是否正常工作 3、示波器面板按钮详解 3.1、软键 3.2、运行控制与操作区 3.3、水平控制区 3.4、垂直控制区 3.5、多功能控制区 3.6、断电启动恢复&#xff0c;auto setup&#xff0c;default setup&#xff0c;恢复出厂设置详细解释 3.7、触…

UE5 RPG AttributeSet的设置

AttributeSet 负责定义和持有属性并且管理属性的变化。开发者可以子类化UAttributeSet。在OwnerActor的构造方法中创建的AttributeSet将会自动注册到ASC。这一步必须在C中完成。 Attributes 是由 FGameplayAttributeData定义的浮点值。 Attributes能够表达从角色的生命值到角色…

基于ArcGIS的晕线制作

在借助ArcGIS进行制图时&#xff0c;我们有时需要为矢量边界添加晕线&#xff0c;今天就来探索一下基于ArcGIS的晕线制作操作。 软件版本&#xff1a;ArcMap10.4.1 方法一&#xff1a;制作多环缓冲区 工具路径&#xff1a;Analysis Tools-Proximity-Mutiple Ring Buffer 思…

SUKER书客重磅发布全新系列:书客Sun立式护眼台灯,护眼养眼新境界

近日&#xff0c;国内知名的光学国货品牌——SUKER书客在2024年新品发布上&#xff0c;正式发布了全新系列的书客Sun立式护眼台灯。 SUKER书客作为近年来快速发展的创新型光学技术品牌&#xff0c;曾推出的一系列产品都取得了刷新行业标准的成绩&#xff0c;他们坚持以创新为动…

Flink启动Yarn Session报错:Couldn‘t deploy Yarn session cluster

Flink版本&#xff1a;1.1.3 启动Yarn Session的语句&#xff1a;bin/yarn-session.sh -nm test -d 报错截图如下&#xff1a; 仅通过ERROR信息只能知道是yarn session集群未能正常启动&#xff0c;因此继续向下查找&#xff1a; 找到报错信息的Caused by部分&#xff1a; 报…

[ PyQt入门教程 ] Qt Designer工具的使用

Qt Designer是PyQt程序UI界面的实现工具&#xff0c;使用Qt Designer可以拖拽、点击完成GUI界面设计&#xff0c;并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 主要内容 1、Qt Designer程序主界…

WEB 3D技术 three.js 3D贺卡(2) 加入天空与水面效果

上文 WEB 3D技术 three.js 3D贺卡(1) 搭建基本项目环境 我们简单搭了一个贺卡雏形 然后 我们要引入一个hdr的一个天空的效果 所以 我们需要在代码中导入 RGBELoader //导入 RGBELoader hdr工具 import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"…

C++多线程学习[四]:多线程的通信和同步、互斥锁、超时锁、共享锁

一、多线程的状态 初始化 &#xff08;Init&#xff09;&#xff1a;该线程正在被创建。就绪 &#xff08;Ready&#xff09;&#xff1a;该线程在就绪列表中&#xff0c;等待CPU的调度。运行 &#xff08;Running&#xff09;&#xff1a;该线程正在运行。阻塞&#xff08;Bl…