k8s-数据卷

存储卷----数据卷

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

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

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

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

emptyDir

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

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

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

只能用于内部共享

演示:

进入容器:

hostPath:

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

污点设置为NoExecute:节点上的pod会被驱逐,文件数据在不在?

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

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

EmptyDir被驱逐,数据会丢失

演示

查看不同pod输出的日志

第三种

NFS共享存储方式:

所有的pod内部的目录都和节点上的NFS共享形成数据同步,所有文件都将保存在一个目录当中,便于管理

验证

用主机名做

找不到,挂载卷因为没有映射

每个主机都做映射

HostPath和NFS是我们常用的方式,推荐使用NFS

PVC和PV(必问)

PV:全称persistent volume持久化存储卷,描述和定义一个存储卷,PV是由我们运维人员来定的

PVC:全称persistent Volume Claim 持久化存储的请求,PVC实际上是用来描述或者声明我希望使用什么样PV来进行存储

PVC---->pv------NFS 意思就是说,PVC请求PV

PVC是发起一个请求,PVC是提供一个虚拟化的存储卷

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

结构图:

PVC和PV之间的静态请求,一旦百个PVC怎么办,所有引申出了动态请求

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

PV和PVC之间是有生命周期管理:

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

配置:静态,动态

绑定:就是把PV分配给PVC

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

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

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

PV的状态:

Available:可用,而且没有被任何PVC绑定

Bound:绑定,PV已经绑定了PVC,绑定即使用

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

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

ReadWriteOnce: RWO,配置文件里面是全称,存储PV可读可写,但是只能被单个pod挂载

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

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

EmptyDir:不考虑

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

ISCSI:不支持ReadWriteMany

hostPath:只支持ReadWriteOnce方式

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

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

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

集群回收PV资源的方式:

Retain保留,pod和挂载点的数据不会被删除

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

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

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

演示PVC静态和资源回收方式:

映射(全部)

发布

每个节点查看:

vim pv.yml

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv001

labels:

name: pv001

spec:

nfs:

path: /data/v1

server: 20.0.0.74

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 1Gi


apiVersion: v1

kind: PersistentVolume

metadata:

name: pv002

labels:

name: pv002

spec:

nfs:

path: /data/v2

server: 20.0.0.74

accessModes: ["ReadWriteOnce"]

capacity:

storage: 2Gi


apiVersion: v1

kind: PersistentVolume

metadata:

name: pv003

labels:

name: pv003

spec:

nfs:

path: /data/v3

server: 20.0.0.74

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 2Gi


apiVersion: v1

kind: PersistentVolume

metadata:

name: pv004

labels:

name: pv004

spec:

nfs:

path: /data/v4

server: 20.0.0.74

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 4Gi


apiVersion: v1

kind: PersistentVolume

metadata:

name: pv005

labels:

name: pv005

spec:

nfs:

path: /data/v5

server: 20.0.0.74

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 5Gi

定义一个PVC请求:

vim pvc.yml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mypvc

spec:

accessModes: ["ReadWriteMany"]

#pvc期望请求的PV的读写挂载类型是什么

resources:

requests:

storage: 2Gi

#PVC期望请求PV的存储大小是2G。上面合起来的意思:期望读写模式:ReadWriteMany 并且大小是2G


apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: nginx

name: nginx

spec:

replicas: 3

selector:

matchLabels:

app: nginx

template:

metadata:

labels:

app: nginx

spec:

containers:

  • image: nginx:1.22

name: nginx

volumeMounts:

  • name: html

mountPath: /usr/share/nginx/html

volumes:

  • name: html

persistentVolumeClaim:

claimName: mypvc

选择了PV003

测试:

怎么删除PVC

删不掉,因为pod还在

怎么删呢,删除pod

处在回收状态

怎么让其回到可用状态

kubectl edit pv pv003

回到了available状态

配置回收策略

persistentVolumeReclaimPolicy: Recycle

稍微等等

也就是挂载内容被回收,也就是被删除了

persistentVolumeReclaimPolicy: Delete

先删pod,再删PVC,删除之后数据卷还在

动态卷是要删除的,这里还在,只是演示一下

怎么恢复:

总结:

k8s当中存储卷的模式:

EmptyDir:用于容器内共享,随着pod被销毁,也会被销毁,数据不保留

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

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

PV和PVC

PVC是一种请求----PV存储资源----------硬盘空间(NFS)

NFS支持PVC的所有挂载方式和读写模式

hostPath仅支持readwriteOnce方式

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

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

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

谁合适选谁

保留:默认可以不写

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

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

相关推荐
撸码到无法自拔1 小时前
openEuler 22.04使用yum源最快速度部署k8s 1.20集群
云原生·容器·kubernetes
PzZzang25 小时前
dockerfile1.0
docker
州周7 小时前
k8s 安装ingress并配置flink服务
容器·flink·kubernetes
qq_312920118 小时前
VSCode连接远程docker环境
ide·vscode·docker
凌鲨8 小时前
OpenSeaOtter使用手册-项目简介
docker
R-sz9 小时前
如何清理docker垃圾
spring cloud·docker·eureka
UTF杠810 小时前
Sonatype Nexus OSS 构建私有docker 仓库
运维·docker·容器·开源
wit_@10 小时前
什么是docker?关于docker容器的全面详细介绍
人工智能·docker·容器·eureka·aigc·agi
qq_4489410810 小时前
4、dockerfile实现lnmp和elk
docker
胡八一11 小时前
docker 部署 Kafka 单机和集群
docker·容器·kafka