k8s的存储卷(数据卷)

1、存储卷:容器内的目录和宿主机的目录进行挂载

2、容器在系统上的生命周期是短暂的,delete,k8s用控制器创建的pod,delete相当于重启,容器的状态也会恢复到初始状态,一旦回到初始状态,所有的后天编辑的文件都会消失。

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

4、存储卷的类型

emptyDir:

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

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

②emptyDir是不能挂载到节点的,随着pod的生命周期结束,emptyDir也会结束,数据也不会保留,不能做数据持久化

hostPath:

将容器内的挂载点和节点上的目录进行挂载hostPath可以实现数据的持久化,pod被销毁,数据不会丢失。除非node节点被销毁,数据才会丢失

* hostPath这种挂载方式非常直接,但有一个重要的限制:hostPath 是特定于节点的,而不是集群范围的

* 面:污点设置为noexecute,节点上的pod会被驱逐,文件数据是否存在?

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

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

③若存储卷类型为emptyDir,数据会丢失

NFS共享存储(推荐使用):

所有pod内的目录都和远程服务器上的nfs共享目录形成数据卷,所有的数据文件都保存在共享目录当中,集中管理、方便

5、emptyDir的实例

(1)创建挂载卷

(2)指定容器进入:kubectl exec -it nginx1-7b9b94c8b9-7j4tj -c nginx2 bash
①测试

(3)删除pod、存储卷也随之销毁

(4)查看pod内指定容器的日志:kubectl logs nginx1-7b57fbd6fb-9zvl7 -c nginx1

6、hostPath实例

7、NFS共享存储的实例

(1)创建共享目录
mkdir volumes
chmod 777 volumes/
vim /etc/exports
systemctl restart rpcbind
systemctl restart nfs
showmount -e

(2)配置yaml文件

(2)第一种:指定IP地址

①测试

(3)第二种:指定主机名

①所有节点配置主机映射

(4)删除deployment:kubectl delete -f test.yaml(删除基于yaml文件创建的)

8、PVC和PV(重点)

(1)PV(persistent volume):持久化存储卷

用来描述和定义一个存储卷,PV一般由运维人员定义

(2)PVC(persistent volume claim):持久化存储的请求

PVC实际上是用来描述或者声明希望使用什么样的PV来进行存储

(3)PVC和PV

①PVC和PV一一对应(描述、存储(大小)):静态请求、动态请求

②PV和PVC都是虚拟化的概念,是k8s中抽象的、虚拟的存储资源

③PVC——PV——nfs

④PV是集群当中的存储资源,PVC请求存储资源,也是对存储资源的一种检索(检查索引),选择一个最合适的PV来存储资源

⑤当pod运行之后,通过PVC请求到了PV,除非pod被销毁,否则无法删除PVC

(4)PV和PVC之间的生命周期管理:

①provisioning(配置)——PVC请求request——检索(找一个合适的PV)——PVC和PV绑定(binding)——使用——pod被删除——PV的releasing(释放)——recycling(回收)

配置:静态、动态

绑定:就是把PV分配给PVC

使用:就是pod通过PVC使用存储资源

释放:pod解除和挂载卷volume之间的关系,删除PVC

回收:保留PV,以供下一个PVC使用

PVC和PV之间的静态请求,一旦有上百个PVC,使用动态请求

(1)PV的状态

Available

可用,而且没有被任何PVC绑定(可以被请求)

Bound

绑定,PV已经绑定到了PVC,绑定即使用

Released

释放,PVC已经被删除了,但是PV的存储资源还没有被集群回收

Failed

表示PV的资源回收失败,而且PV为不可用状态

(2)PV的读写方式(配置文件里是全称)

ReadWriteOnce(RWO)

存储的PV可读可写,但是只能被单个pod挂载

ReadOnlyMany(ROX)

存储的PV可以以只读的方式被多个pod挂载

ReadWriteMany(RWX)

存储的PV可以以读写的方式被多个pod挂载

(3)PV的挂载方式(支持的读写方式)

nfs

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

hostpath

只支持ReadWriteOnce,其他两个都不支持

ISCSI

不支持ReadWriteMany

①查看机器上所有SCSI的设备:lsscsi

②查看服务器是否有ISCSI设备:iscsiadm -m session -P 3

iscsiadm -m session -P 3

iscsiadm

查看服务器是否有ISCSI设备

-m session

指定操作的会话模块,管理iscsi

-P 3

显示详细信息的级别,级别就是3,显示详细信息

(4)集群回收PV资源的方式

Retain

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

Recycle

回收,PV上的数据会被删除,挂载点的数据也会被删除

Delete

删除,解绑时会自动删除PV上的数据,本地硬盘不能使用,只有云平台(AWS、EBS、GCE)支持动态卷、可以使用,PV不再可用(云平台自己处理)

9、静态请求

1创建nfs挂载目录

①节点查看nfs:showmount -e 20.0.0.72

(2)创建PV:一个yaml文件中定义多个类型

(3)定义PVC请求

(4)使用PV存储卷

①PVC发起请求,请求用哪个PV的存储,PV和物理存储做映射(挂载),物理设备提供存储卷
(5)删除PVC
①测试
kubectl delete deployments.apps nginx
kubectl delete pvc mypvc

②恢复PV的可用状态

(6)配置集群回收PV资源:Recycle

①persistentVolumeReclaimPolicy: Recycle

②删除,测试回收:PV上的数据会被删除,挂载点的数据也会被删除

(7)delete的PV回收方式

①删除测试:本地硬盘不支持delete,不会删除数据

(8)总结

k8s中存储卷的模式:

emptyDir

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

hostPath

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

nfs

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

PV和PVC:

(1)PVC请求,请求PV的存储(硬盘空间nfs)

(2)nfs支持PVC的所有挂载方式和读写模式

(3)hostpath仅支持readwriteonce

(4)PVC是以检索的方式找到匹配的PV资源

①检索挂载方式和读写模式

②检索PV能够提供的存储资源的大小

③谁适合选谁

④保留:默认可以不写

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

⑥删除:PV会变成failed模式,不可用,数据也会被删除

静态的PV和PVC:双方指定好配置

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

②开发负责PVC,运维负责和开发沟通好,期望的读写和挂载类型,以及存储空间

10、动态请求(基于nfs实现)

(1)发布PVC,自动生成PV,在共享服务器上直接生成挂载目录;PVC直接绑定和使用PV
①动态请求的默认回收策略:delete
(2)动态PV需要的组件

卷插件(Provisionerk8s本身支持的动态PV创建不包括nfs,要需要声明和安装一个外部插件(nfs使用的是nfs-client)

Provisioner

存储分配器:动态创建PV,然后根据PVC的请求自动绑定和使用

②StorageClass:定义PV的属性、存储类型、大小、回收策略

(3)使用nfs实现动态PV,nfs支持的方式nfs-client,Provisioner适配nfs-client

动态请求的过程

provisioner卷插件(存储分配器):支持nfs、创建PV目录

storageclass:定义PV的属性

1、创建serviceAccount账户:管理NFS Provisioner插件在k8s集群中的权限

①让卷插件provisioner能够在集群内部通信、获取资源、监听事件、创建、删除和更新PV

2、基于Deployment来创建NFS Provisioner,由卷插件的pod动态创建PV

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

①给PV赋予属性:PVC被删除之后PV的状态、PV的回收策略、动态扩缩容

4、创建PVC(声明期望的PV属性)和pod

(4)第一步:创建nfs-client-Provisioner卷插件
①创建nfs共享目录

②创建serviceAccount账户:管理NFS Provisioner插件在k8s集群中的权限

NFS Provisioner:是一个插件,没有权限是无法在集群中获取k8s的消息。这个插件要有权限能够监听apiserver、获取(个体)、list(获取集群的列表资源)、create、delete、watch(监听事件)

rbac:role-based access control(基础权限控制),定义角色在集群中可以使用的权限

vim nfs-client-rbac.yaml

kubectl apply -f nfs-client-rbac.yaml

(5)第二步:基于Deployment来创建NFS Provisioner(provisioner:创建PV)
①屏蔽self-link字段:vim /etc/kubernetes/manifests/kube-apiserver.yaml

1.20版本之后有一个新的机制:

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

* self-link的值是一个url,也是指向该资源对象在k8s中的api路径

* self-link的作用:更好的实现资源对象的查找和引用

kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

kubectl delete pod kube-apiserver -n kube-system
kubectl get pod -n kube-system

②基于deployment部署nfs-provisioner插件:vim nfs-client-provisioner.yaml

* nfs-provisioner的客户端,以pod的方式运行在集群中,监听k8s集群当中PV的请求,动态的创建与nfs服务器相关的PV

* 容器内使用的配置,在nfs-provisioner当中定义好环境变量,传给容器

* 环境变量:storageclass的名称、nfs服务器的地址、nfs的目录

quay.io/external_storage/nfs-client-provisioner:latest

kubectl apply -f nfs-client-provisioner.yaml
kubectl get pod

(6)第三步:创建StorageClass,负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立关联
①vim nfs-client-storageclass.yaml
kubectl apply -f nfs-client-storageclass.yaml
kubectl get storageclasses.storage.k8s.io

kubectl get storageclasses.storage.k8s.io

NAME

storageclass的名称

PROVISIONER

对应的创建PV的provisioner的插件

RECLAIMPOLICY

回收策略,保留

VOLUMEBINDINGMODE

卷绑定模式,immediate表示PVC请求创建PV时,系统会立即绑定一个可用的PV

waitforfirstconsumer:第一个使用者出现之后再绑定PV

ALLOWVOLUMEEXPANSION

true表示可以在运行时可以对PV进行扩容

(7)第四步:创建PVC(vim pvc-pod.yaml)

kubectl apply -f pvc-pod.yaml

①访问

8测试

①访问测试

②删除测试
kubectl delete deployments.apps nginx2
kubectl delete pvc nfs-pvc1

③恢复PV

(9)修改回收策略
①修改回收策略:vim nfs-client-storageclass.yaml
kubectl delete storageclasses.storage.k8s.io nfs-client-storageclass
kubectl apply -f nfs-client-storageclass.yaml
kubectl get storageclasses.storage.k8s.io

②创建deployment

③测试删除pod、删除PVC

kubectl delete deployments.apps nginx2
kubectl delete pvc nfs-pvc1

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

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

相关文章

时间序列数据的季节性检测

时间序列分析是统计学和数据科学的一个基本研究领域,它为理解和预测序列数据中的模式提供了一个强大的框架。特别是时间序列数据,它捕获连续时间间隔内的信息,使分析师能够揭示趋势,季节性模式和其他时间依赖性。在时间序列分析的…

css深度选择器 /deep/

一、/deep/的含义和使用 /deep/ 是一种 CSS 深度选择器,也被称为深度组合器或者阴影穿透组合器,主要用在 Web 组件样式封装中。 在 Vue.js 或者 Angular 中,使用了样式封装技术使得组件的样式不会影响到全局,也就是说组件内部的…

远程访问及控制

文章目录 远程访问及控制一、SSH远程管理1、SSH(Secure Shell)协议定义2、SSH的优点3、OpenSSHell 二、配置OpenSSH服务端1、sshd_config配置文件的常用选项2、sshd服务支持的两种验证方式2.1 密码验证2.2 秘钥对验证 三、SSH客户端程序的使用1、基本用法…

数据结构(三)堆和哈希表

目录 哈希表和堆什么是哈希表 ?什么是堆 ?什么是图 ?案例一:使用python实现最小堆案例二 : 如何用Python通过哈希表的方式完成商品库存管理闯关题 (包含案例三:python实现哈希表) 本…

鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本&#…

canvas创建图像数据,并在画布上展示

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

简单整理FFmpeg相关命令集

FFmpeg相关命令集 简单整理了FFmpeg相关命令,主要包括ffplay播放控制和媒体播放命令、ffmpeg命令相关参数以及常用的提取音视频等命令。 🎡导航小助手🎡 FFmpeg相关命令集1.ffmpeg命令分类查询2.ffplay命令2.1 ffplay播放控制2.2 ffplay命令…

【J-Flash基本使用总结】

【J-Flash基本使用总结】 VX:hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ J-Flash下载程序到单片机 ■ J-Flash拼接多个hex或bin文件■ J-Flash读单片机的option byte■ J-Flash读单片机Flash数据■ 将读出来的文件用jflash烧录到其他的芯片■ 设…

【C++ 程序设计入门基础】- 第4节-函数

1、函数 函数是对实现某一功能的代码的模块化封装。 函数的定义&#xff1a; 标准函数&#xff1a; 输入 n 对整数的 a、b &#xff0c;输出它们的和。 #include <iostream> #include <windows.h> using namespace std;int add(int a,int b);//函数原型声明int…

Python数据分析案例34——IMDB电影评论情感分析(Transformer)

电影评论的情感分析 案例背景 很多同学对电影系列的数据都比较喜欢&#xff0c;那我就补充一下这个最经典的文本分类数据集&#xff0c;电影情感评论分析。用神经网络做。对国外的英文评论文本进行分类&#xff0c;看是正面还是负面情感。 数据集介绍 数据集&#xff1a;IMDb…

java每日一题——ATM系统编写(答案及编程思路)

前言&#xff1a; 基础语句学完&#xff0c;也可以编写一些像样的程序了&#xff0c;现在要做的是多加练习&#xff0c;巩固下知识点&#xff0c;打好基础&#xff0c;daydayup! 题目&#xff1a;模仿银行ATM系统&#xff0c;可以创建用户&#xff0c;存钱&#xff0c;转账&…

VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络

VMware workstation安装debian-12.1.0虚拟机&#xff08;最小化安装&#xff09;并配置网络 Debian 是一个完全自由的操作系统&#xff01;Debian 有一个由普罗大众组成的社区&#xff01;该文档适用于在VMware workstation平台安装最小化安装debian-12.1.0虚拟机。 1.安装准…

索引和视图

索引和视图 一、实验目的 学会使用SQL语句CREATE INDEX创建索引。学会使用SQL语句DROP INDEX删除索引。学会使用SQL语句CREATE VIEW创建视图的用法。掌握使用SQL语句ALTER VIEW修改视图的方法。了解删除视图的SQL语句DROP VIEW的用法。 二、实验内容SQL语句CREATE INDEX创建索…

谷粒商城-缓存使用分布式锁SpringCache(5天)

缓存使用 1.1.1 哪些数据适合放入缓存 即时性、 数据一致性要求不高的 访问量大且更新频率不高的数据&#xff08;读多&#xff0c; 写少&#xff09; 例如&#xff1a;电商类应用&#xff0c; 商品分类&#xff0c; 商品列表等适合缓存 本地缓存 使用Map进行本地缓存 本地缓存…

基于JavaWeb+BS架构+SpringBoot+Vue智慧党建系统设计与实现

基于JavaWebBS架构SpringBootVue智慧党建系统设计与实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 概 述 1 1.1 课题研究背景 1 1.2 课题研究意义 1 1.3 课题研究内容 2 2 系统开…

MySQL 基于 GTID 主从复制

GTID 定义 GTID 是 MySQL 事务标识&#xff0c;为每一个提交的事务都生成一个标识&#xff0c;并且是全局唯一的&#xff0c;这个特性是从 MySQL5.6 引进的。 组成 GTID 是由 UUID TID&#xff0c;UUID 是MySQL的唯一标识&#xff0c;每个MySQL实例之间都是不同的。TID是代表…

速度之巅-位图算法

1:简单通俗来讲就是速度非常之快 以字节为单位,用一位一位寻找 #include <iostream> using namespace std; //加载数据 //就是将能被3整除的位设置为:1 void init(char* data, int len) {unsigned int n len * 8;for (unsigned i 0; i < n; i){if (i%30){//判断能被…

DNS从入门到精通

DNS从入门到精通 Dns从入门到精通 DNS从入门到精通一、DNS原理二、企业高速缓存dns的搭建三、DNS相关名词解释四、权威DNS搭建编辑子配置文件&#xff08;主要写我们维护的域zone)开始解析 五、权威dns中的数据记录种类及应用编辑子配置文件&#xff08;主要写我们维护的域zone…

图像提取大师:轻松从指定时长中获取某帧的图片,视频剪辑方法

在数字媒体时代&#xff0c;视频和图像已成为生活中不可或缺的部分。要从视频中提取某一帧作为图片&#xff0c;或者在视频剪辑时要采用其他的方法来达到需求的效果。下面来看云炫AI智剪如何轻松地从指定时长的视频中获取某帧的图片&#xff0c;视频剪辑的新方法。 视频中按指定…

JMeter定时器之同步定时器

JMeter定时器之同步定时器 1. 背景2. 目的3. 介绍4. 例子4.1单个请求4.2多个请求 1. 背景 在实际生活中大家肯定遇到过一种场景&#xff0c;就是在某一时间或某一时刻&#xff0c;某件商品进行抢购&#xff0c;相当于秒杀&#xff1b;但是用JMeter进行测试的时候&#xff0c;如…