k8s-----存储卷(数据卷)

容器内的目录和宿主机的目录进行挂载。
容器的生命状态是短站的,delete删除,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态。
一旦回到初始状态,所有的后天编辑的文件都会消失。
容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被销毁,删除,重启,节点上的存储卷的数据依然存在,后续也可以进行继续使用。可以继续将容器内目录和宿主机挂载,保存的数据继续使用。

存储卷的方式

  1. emptyDir  容器内

  2. hostPath  本地本地

  3. NFS         远程

emptyDir

容器内部共享储存卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录。
emptvDir卷可以是pod当中容器在这个存储卷上读取和写入
emptyDir是不能挂载到节点的。随着pod的生命周期结束,emptvDir也会结束,数据也不会保留
容器内部共享。

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlemptyDir: {}

进入指定容器内查看挂载的文件

kubectl exec -it nginx2-96b45c96c-jvvg9 -c nginx2 bash

hostPath

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

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlhostPath:path: /opt/testtype: DirectoryOrCreate

NFS

所有pod内的目录都和节点上的nfs共享目录形成数据卷。所有的数据文件都保存在共享目录当中。集中方便管理。

nfs共享的工作流程图:

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlnfs:path: /data/volumesserver: 192.168.10.40
#这里的server可以是IP地址和主机名(需要做映射)

PVC和pv静态

pv:全称:persistent Volume 持久化存储卷,描述和定义一个存储卷,pv是由运维人员来定的。
pvc:全称:persist Volume Claim 持久化储存的请求。pvc实际上用来描述或者声明我希望使用声明什么样的pv来进行储存
pvc-pv是一一对应的关系(描述,储存(大小))
pvc-pv都是虚拟化的概念,是k8s的抽象的虚拟的储存资源。
pvc---pv-----nfs

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

pvc--pv是由生命周期管理的:

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

配置:静态,动态
绑定:就是把pv分配给pvc
使用:就是pod通过pvc使用储存资源
释放:pod解除volume的关系,删除pvc
回收:保留pv,让下一个pvc使用。

pv的四种状态:

状态文字描述表示
Avialable可以没有任何pvc绑定
Bound绑定pv已经绑定了pvc,绑定即使用
released释放pvc已经被删除了,但是pv的存储资源还没有被集群回收
Failed资源回收失败pv为不可用状态

pv的三种类型

类型缩写说明
ReadWriteOnceRWO储存pv可读可写,但只能被单个pod挂载。
ReadOnlyManyROX储存的pv可以以只读的方式被多个pod挂载
ReadWriteManyRWX储存可以支持读写的方式被多个pod共享

        hostPath 支持ReadWriteOnce的方式
        nfs可支持以上三种方式

        有ISCSI不支持ReadOnlyMany方式

iscsiadm -m session -P 3iscsiadm 查看服务器是否有iscsi设备
-m session 指定操作的会话模块,管理iscsi的会话
-P 3 显示详细信息的级别。级别是3 共0-3

集群回收pv资源的方式:

类型文字描述说明
Retain(默认)保留pod和挂载点的数据不会被删除
Recycle回收pv上的数据被删除,挂载点的数据也被删除
Delete淡出

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

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

实验

master01 192.168.10.10

node01     192.168.10.20

node02     192.168.10.30

nfs4           192.168.10.40

nfs4 ---192.168.10.40

mkdir v{1,2,3,4,5}
vim /etc/exports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)
exportfs -arv
#发布出去
showmount -e 192.168.10.40
#在每个节点上查看

master01主节点上创建PV.yaml文件

vim pv.yaml
apiVersion: v1
kind: PersistentVolume
#PersistentVolume就是PV但是yaml文件中要用全称
metadata:name: pv001labels:name: pv001
spec:
#设定pv的参数nfs:path: /data/v1
#定义pv的挂载位置server: 192.168.10.40
#声明pv来自哪个IP地址accessModes: ["ReadWriteMany", "ReadWriteOnce"]
#ReadWriteMany表示支持多个pod挂载
#ReadWriteOnly表示只支持单个pod挂载
#支持多种挂载方式capacity:storage: 1Gi
#定义pv的大小---apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/v2server: 192.168.10.40accessModes: ["ReadWriteOnce","ReadOnlyMany"]capacity:storage: 2Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 192.168.10.40accessModes: ["ReadWriteOnce","ReadWriteMany","ReadOnlyMany"]capacity:storage: 2Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv004labels:name: pv004
spec:nfs:path: /data/v4server: 192.168.10.40accessModes: ["ReadWriteMany","ReadOnlyMany"]persistentVolumeReclaimPolicy: Recyclecapacity:storage: 3Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv005labels:name: pv005
spec:nfs:path: /data/v5server: 192.168.10.40accessModes: ["ReadOnlyMany"]capacity:storage: 5Gi

执行

kubectl apply -f pv.yaml
#创建PV
kubectl get pv
#查看PV状态

master01定义一个请求向PV发起请求

vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc
spec:accessModes: ["ReadWriteMany"]
#pvc期望请求的pv的读写挂载类型是什么resources:requests:storage: 2Gi
#pvc期望请求pv的储存大小是2G
#期望的pv类型:ReadWriteMany 大小2G---apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: mypvc
#定义pvc的名称.由mypc获取PV

执行

 
kubectl get pv
#查看PV状态
表示请求成功到k8s
kubectl get pv
cd v3
echo 123 > index.html回到master01主机
kubectl get pod -o wide
curl nginx副本IP测试
彻底的删除
删除pod
kubectl delete deployments.apps nginx2
kubectl delete deployments.apps nginx1删除(pod存在,无发删除)
kubectl delete pvc mypvc去k8s4查看共享文件是否存在
在Retain下,让pvc的状态由released手动转为Available(可用)
kubectl edit pv pv004

修改策略Recycle,让pv的状态released自动转变为Available(可用)

vim pv.yaml

persistentVolumeReclaimPolicy: Recycle

PVC发起请求选择使用哪个PV的存储

PV通过挂载的方式和物理存储做映射

最终由物理设备提供存储卷

若是Recycle回收策略


总结:

存储卷的三种模式:

  1. emptvDir: 容器内存储卷,随着pod被销毁,也会被销毁,数据不保留
  2. hostPath: 节点目录的存储卷,可以实现持久化存储。数据在每个节点上都有
  3. nfs:共享目录储存卷,可以实现持久化,数据集中在一个目录,方便管理

pv和pvc

  1. pvc请求-------------》pv的存储资源--------》nfs硬盘空间
  2. nfs支持pvc的所有挂载方式和读写模式
  3. hostPath仅支持ReadWriteOnce 方式
  4. pvc是以检索的方式找到匹配的pv资源

检索:挂载方式和读写模式  和  pv提供检索资源的大小
谁适合就用谁

资源回收方式:

  1. 保留:默认方式
  2. 回收:自动回收,节点上的数据将会被删除
  3. 删除: pv会变成failed模式,不可用,数据也会被删除。

PVC和PV之间静态请求。一旦成百个PVC负载能力将会下降,这就需要使用动态PVC

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

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

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

相关文章

vue的mvvm模式

1.mvvm优点: 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候,View也可以不变。 可复用&…

ASP.NET Core中实现个人资料上传图片功能

当用户需要在ASP.NET Core中实现修改个人资料的功能时,其中一个常见的需求就是允许上传个人头像图片。下面将详细介绍如何在ASP.NET Core中实现修改个人资料上传图片的功能。 步骤一:控制器中添加一个HttpPost方法 首先,我们在控制器中添加…

Vue入门五(Vue-CLI项目搭建|vue项目目录介绍|vue项目开发规范|es6导入导出语法)

文章目录 一、Vue-CLI 项目搭建介绍node环境搭建1) 下载与安装2)测试是否安装成功 安装vue-cli安装vue脚手架 创建Vue项目1)使用命令创建项目2)使用图形化界面创建项目 二、vue项目目录介绍1.命令行运行vue项目2.Pycharm中运行项目3.目录结构…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷④

任务二 单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax:”(x为2、3或4);其中变量x、y均须为整型。编写程序代码,使用JUnit框架编写测试类对编写的程序代码…

系列十三、查询数据库中某个库、表、索引等所占空间的大小

一、information_schema数据库 1.1、概述 information_schema数据库是MySQL出厂默认带的一个数据库,不管我们是在Linux中安装MySQL还是在Windows中安装MySQL,安装好后都会有一个数据库information_schema,这个库中存放了其他库的所有信息。 …

JS加密/解密之js加密小工具

JS加密的原理和方法 什么是JS加密 JS加密是一种将js代码转换成不易被阅读和修改的形式的技术JS加密的目的是保护js代码的版权,防止被恶意篡改或盗用JS加密的难度和效果取决于加密算法的复杂性和安全性 JS加密的常见方法 压缩和混淆:将js代码的空格&a…

17_网络编程

文章目录 网络数据传输的基本原理UDP发送端步骤接收端步骤DatagramSocketDatagramPacket举例版本1:发送端发送消息,接收端接收并打印版本2:创建一个NetworkUtils工具类优化版本1版本3:发送端接收端相互发送版本4:使用多线程 TCP客…

搭建LNMP网站平台并部署Web应用

本章主要介绍: 安装Nginx安装MySQL安装PHP在LNMP平台中部署 Web 应用 构建LNMP网站平台就像构建LAMP平台一样,构建LNMP平台也需要Linux服务器,MySQL数据库,PHP解析环境,区别主要在Nginx 与 PHP的协作配置上&#xff0…

Kotlin程序设计(三)高级用法

Kotlin程序设计高级篇 在学习了前面的内容之后,相信各位小伙伴应该对Kotlin这门语言有了一些全新的认识,我们已经了解了大部分的基本内容,从本章开始,就是对我们之前所学的基本内容的进一步提升。 泛型 在前面我们学习了最重要…

缓存代理服务器

1 缓存代理 1.1 缓存代理的概述 web代理的作用 缓存网页对象,减少重复请求 存储一些之前被访问的或且可能将要备再次访问的静态网页资源对象,使用户可以直接从缓存代理服务器获取资源,从而减少上游原始服务器的负载压力,加快整…

ubuntu20固定串口名称

查看串口的详细信息 udevadm info --name/dev/ttyUSB0结果: P: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 N: ttyUSB0 L: 0 S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UAR…

Qt 6之五:创建菜单

Qt 6之五:创建菜单 Qt是一种跨平台的C应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。 Qt 6之一:简介、安…

DHCP动态主机配置协议

文章目录 DHCP1、DHCP的优势2、DHCP的分配方式3、DHCP的租约过程4、服务器配置命令格式命令图文详解 DHCP DHCP:动态主机配置协议 1、DHCP的优势 减少管理员的工作量 避免输入错误的可能 避免IP地址冲突 当更改IP地址段时,不需要重新配置每个用户的…

Qt 三维柱状图 Q3DBar 和 三维条形图中的数据序列 QBar3DSeries

(一) 使用 Q3DBars 图形类和 QBar3DSeries 序列类可以绘制三维柱状图 窗口右侧是用 Q3DBars 和 QBar3DSeries 绘制的三维柱状图,这个图只有一个QBar3DSeries序列,数据是按行存储的,可以有多行。水平方向是行坐标轴和列坐标轴,使用…

阿里云服务器新购、续费、升级优惠政策与活动汇总

阿里云作为国内领先的云服务提供商,始终致力于为客户提供优质、高效的服务。为了更好地满足客户的需求,阿里云经常推出各种优惠政策与活动。本文将为大家详细介绍阿里云服务器的新购、续费、升级优惠政策与优惠活动,帮助大家更好地了解并利用…

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

MySQL中datetime和timestamp的区别

datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…

Vue.js设计与实现阅读-2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

Java中的多线程

进程和线程的概念 进程是应用程序的执行实例有独立的内存空间和系统资源。 线程是进程中执行运算的最小单位&#xff0c;可完成一个独立的顺序控制流程 一。一个进程可以包含多个线程&#xff0c;每个线程都独立执行特定的任务&#xff0c; 是CPU调度和分派的基本单位。 多线…

轴承滚珠故障的理论推导与计算(修订中...)

1.缘起 轴承故障故障位置在高频&#xff0c;如果不即时处理&#xff0c;恶化后&#xff0c;滚珠会有单颗故障迅速恶化到多颗&#xff0c;如果此时电机承载较大负载&#xff0c;轴承的恶化&#xff0c;会牵连到相关的动力轴。是一个不可不进行监测的项目。 2.频谱特征 轴承的…