当前位置: 首页 > news >正文

Kubernetes/k8s的存储卷/数据卷

k8s的存储卷/数据卷

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

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

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

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

可以继续将容器内目录的宿主机挂载,保存的数据继续使用。

1、emptyDir

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

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

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

容器内部共享lnmp

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

污点设置为:

NoExecute:的节点上pod会被驱逐,文件数据在不在

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

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

emptyDir的共享数据会丢失

NFS共享存储

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

pvc和pv

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

pvc:persistent Volume Claim持久存储的请求,pvc实际上是用来藐视或者声明我希望使用是什么样的pv来进行存储

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

pvc----pv---nfs

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

pvc和pv之间静态请求。一但又成百个pvc怎么办,还有动态pvc

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

pv和pvc之间是有生命周期管理:

1、Provisioning(配置)---pvc请求request-----检查索引(找一个合适的pv)---pvc和pv(bending绑定)----使用(使用完毕后)---pod被删除---pv的releasing(释放)-----recycling(回收)

配置:静态、动态

绑定:就是把pv分配给pvc

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

释放:实际上是pod解除和挂载卷volume的关系,删除掉pvc

回收:保留这个pv,以供下一个pvc使用

pv的四种状态:

Available:可用状态指的是可用,而且没有被任何pvc绑定

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

released:释放,pvc已经被删除了,但是pv的存储资源还没有被集群回收

Failed:表示pv的资源回收失败,而且这个pv不可用状态

ReadWriteOnce RWO,在配置文件里是全称,表示存储pv可读可写,但是只支持被单个pod挂载

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

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

读写挂载的两个方式

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

SCSI不支持ReadWriteMany

ISCSI支持ReadWriteOnce

iscsiadm -m session -P 3

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

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

-P 3:显示详细信息的级别,级别为3,显示详细信息

hostPath:只支持ReadWriteOnce方式,其他都不支持

集群回收pv资源的方式:

1、Retain:保留存储,pod和挂载点的数据不会被删除

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

3、Delete:删除,解绑时会自动删除pv上数据(本地硬盘不能使用)支持动态卷的可以使用,pv也不再可用(由云平台自己处理)

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

k8s存储卷的模式

emptDir:用于容器呢ide存储卷,随着pod被销毁,也会被销毁,数据不保留

hostPath:就是和节点目录的存储卷进行挂载,可以实现持久化存储,数据在每个节点上都有不方便集中管理

nfs:最常用的模式,共享目录存储卷,既可以实现在持久化,也可以数据集中,数据集中在一个目录方便管理

pv和pvc

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

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

hostPath仅支持ReadWriteOnce方式

pvc是检索的方式找到匹配的资源

检索挂载方式和读写模式

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

谁合适选谁

保留:默认可以不写

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

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

一个实验:

在NFS主机上创建共享目录,并且进行exportfs发布 
mkdir /data/v{1..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 -avf
在master主机编写pv资源创建yaml
vim /opt/pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv001labels:name: pv001
spec:nfs:path: /data/v1server: 20.0.0.95accessModes: ["ReadWriteMany","ReadWriteOnce"]capacity:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/v2server: 20.0.0.95accessModes: ["ReadWriteOnce"]capacity:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 20.0.0.95accessModes: ["ReadWriteMany","ReadWriteOnce"]capacity:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004labels:name: pv004
spec:nfs:path: /data/v4server: 20.0.0.95accessModes: ["ReadWriteMany","ReadWriteOnce"]capacity:storage: 4Gi---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005labels:name: pv005
spec:kubectl apply -f pv-demo.yaml
创建pvc资源,并且设置匹配绑定相应的pv 
vim /opt/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc
spec:accessModes: ["ReadWriteMany"]resources:requests:storage: 2Gi---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.22name: nginx1volumeMounts:- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: htmlpersistentVolumeClaim:claimName: mypvc---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc1
spec:accessModes: ["ReadWriteMany"]resources:requests:storage: 2Gi---
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: nginx1volumeMounts:- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: htmlpersistentVolumeClaim:claimName: mypvc1

http://www.lryc.cn/news/277873.html

相关文章:

  • 【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞
  • Android - 串口通讯(SerialPort)
  • 如何使用設置靜態住宅IP
  • 在学习爬虫前的准备
  • windows下安装oracle-win-64-11g超详细图文步骤
  • Go模板后端渲染时vue单页面冲突处理
  • 笔记本摄像头模拟监控推送RTSP流
  • 鸿蒙开发已解决-ArkTS编译时遇到arkts-no-obj-literals-as-types错误
  • 实现目标检测中的数据格式自由(labelme json、voc、coco、yolo格式的相互转换)
  • 一文读懂JVS逻辑引擎如何调用规则引擎:含详细步骤与场景示例
  • 苹果应用上架是否需要软件著作权?
  • LDD学习笔记 -- Linux字符设备驱动
  • 杰理AC63串口收发实例
  • 麦芯(MachCore)开发教程1 --- 设备软件中间件
  • reset命令
  • Linux内核--进程管理(十二)LinuxIO基础知识与概念
  • gem5学习(11):将缓存添加到配置脚本中——Adding cache to the configuration script
  • 上海雏鸟科技无人机灯光秀跨年表演点亮三国五地夜空
  • 学生备考护眼台灯怎么样选择?2024五款好用台灯安利
  • Java学习,一文掌握Java之SpringBoot框架学习文集(6)
  • 美团点评秋招前端测评分享
  • docker安装nodejs,并更改为淘宝源
  • Vue中的class和style绑定
  • 出版实务 | 出版物的成本及其构成
  • docker 部署项目的操作文档,安装nginx
  • spring boot 源码解读与原理分析
  • Python基础(二十四、JSON和pyecharts)
  • Java 并发之《深入理解 JVM》关于 volatile 累加示例的思考
  • GPM合并资料整理-GEM部分
  • STM32使用1.69寸液晶显示模块使用缓冲区实现快速刷新全屏显示字符串功能