【K8S 存储卷】K8S的存储卷+PV/PVC

目录

一、K8S的存储卷

1、概念:

2、挂载的方式:

2.1、emptyDir:

2.2、hostPath:

2.3、NFS共享存储:

二、PV和PVC:

1、概念

2、请求方式

3、静态请求流程图:

4、PV和PVC的生命周期

5、PV的状态:

6、PV的读写挂载方式:

7、回收策略:

三、PV和PVC静态请求实验:

1、默认的Retain保留策略:

2、设置Recycle回收释放策略:

3、Delete回收策略

4、总结:


一、K8S的存储卷

1、概念:

存储卷:数据卷

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

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

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

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

2、挂载的方式:

2.1、emptyDir:

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

emptyDir卷可以使pod中的容器在这个存储卷上读取和写入,这个emptyDir是不能挂载到节点的。随着pod的生命周期结束,emptyDir也会结束,数据不会保留

实验部署:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.22name: nginx1volumeMounts:- 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: {}

#-c进入指定容器
kubectl exec -it nginx-c669845b5-grs7s -c nginx2 bash

emptyDir说白了就是容器内部共享,重启数据就没有了

2.2、hostPath:

将容器内的挂载点和节点上的目录进行挂载

hostPath可以实现数据的持久化。

node节点在他就在,node节点一旦被销毁,数据也将丢失

注意点:

污点设置为NoExecute驱逐时,会把pod驱逐,那么pod的hostPath的文件数据还在不在?

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

但是前提是基于控制器创建的pod

pod被驱逐,会在其他node节点重新部署,又会在其他节点生成一个新的存储卷。数据依然可以持久化

但是emptyDir的数据被驱逐,数据会丢失

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.22name: nginx1volumeMounts:- 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/test0type: DirectoryOrCreate

#-c查看不同容器的日志
kubectl logs nginx-dir-84469899f7-ww65t -c nginx2

2.3、NFS共享存储:

在63主机上,创建nfs共享目录:

去验证是否发布:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.22name: nginx1volumeMounts:- 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: /dataserver: 20.0.0.63

这里的server可以是共享节点的IP地址也可以是主机名,主机名要和所有K8S节点做映射

映射之后,可以用主机名共享

所有pod内的目录都和节点上的nfs共享目录形成数据卷,所有的数据文件都保存在共享目录中。增删改查对所有pod都生效

集中、方便管理

一般用hostPath和nfs,推荐用nfs

二、PV和PVC:

1、概念

PV:全称Persistent Volume持久化存储卷,描述和定义一个存储卷,PV是由运维人员来定的。

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

PVC和PV是一一对应的关系(描述、存储(大小))

PVC来请求PV,nfs提供存储

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

2、请求方式

PV和PVC的请求方式有两种:静态和动态请求

PVC和PV之间的静态请求,一旦有成百个PVC,工总量太大,所有还有动态PVC

3、静态请求流程图:

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

4、PV和PVC的生命周期

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

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

配置:配置静态、动态

绑定:就是把PV分配给PVC

使用:就是pod通过PVC使用存储策略----NFS

释放:pod解除和Volume的关系,删除PVC

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

5、PV的状态:

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

Bound:绑定,表示PV已经绑定到了PVC,绑定就代表使用

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

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

6、PV的读写挂载方式:

ReadWriteOnce:RWO,在yaml配置文件中是全称,表示存储PV是可读可写,但是只能被单个pod挂载。

ReadOnlyMany:ROX,存储的PV可以以制度的方式被多个pod挂载

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

nfs:以上三种读写挂载方式都能支持

hostPath:只支持ReadWriteOnce方式

磁盘类型:

SCSI:不支持ReadWriteMany

ISCSI:不支持ReadWriteMany

查看节点的磁盘类型:

#查看iscsi设备

iscsiadm -m session -P 3

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

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

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

#查看scsi设备

lsscsi

7、回收策略:

整个集群回收PV资源的方式:

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

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

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

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

只有挂载点先解除,才能删除PVC

三、PV和PVC静态请求实验:

1、默认的Retain保留策略:

pv文件:

vim pv.yaml

                                                                                                                                                                          

apiVersion: v1
kind: PersistentVolume
metadata:name: pv001labels:name: pv001
spec:nfs:path: /data/v1server: 20.0.0.66accessModes:- ReadWriteMany- ReadWriteOncecapacity:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/v2server: 20.0.0.66accessModes:- ReadWriteOncecapacity:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 20.0.0.66accessModes:- ReadWriteMany- ReadWriteOncecapacity:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004labels:name: pv004
spec:nfs:path: /data/v4server: 20.0.0.66accessModes:- ReadWriteMany- ReadWriteOncecapacity:storage: 4Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005labels:name: pv005
spec:nfs:path: /data/v5server: 20.0.0.66accessModes:- ReadWriteMany- ReadWriteOnce- ReadOnlyManycapacity:
storage: 5Gi

PVC声明式文件:

vim pvc.yaml

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: nginxname: nginxspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: mypvc

PVC—请求用哪个PV存储—PV和物理存储做映射(挂载)—物理设备提供存储

nfs共享目录查看文件

取消挂载:

要取消挂载,要先删除pod,再删pvc。想回到最后状态,最后修改pv配置文件

#先删除pod
kubectl delete deployment nginx#删除PVC请求
kubectl delete pvc mypvc

#kubectl get pv

#修改pv配置文件
kubectl edit pv pv003

#查看pv状态

kubectl get pv

取消挂载之后,nfs共享目录的数据也会被删除

2、设置Recycle回收释放策略:

kubectl apply -f pv.yaml

删除pod,再删pvc请求

不用修改edit

kubectl delete deployments.apps nginx
kubectl delete pvc mypvc
kubectl get pv

3、Delete回收策略

Delete不支持本地,只支持云平台

取消挂载:

先删pod,再删pvc。想回到最初状态,最后修改pvc配置文件

kubectl delete deployments.apps nginx
kubectl delete pvc mypvc
kubectl edit pv pv003

4、总结:

K8S中存储卷的模式:

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

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

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

PV和PVC:

PVC请求—PV的存储资源—硬盘空间(NFS)

NFS支持PVC的所有挂载方式和读写模式,最好用

hostPath:仅支持ReadWriteOnce模式

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

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

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

谁合适选谁

保留:默认,可以不写

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

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

静态比较麻烦,如何能自动的匹配PV资源呢?——动态PVC

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

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

相关文章

基于ubuntu2204使用kubeadm部署k8s集群

部署k8s集群 基础环境配置安装container安装runc安装CNI插件部署1.24版本k8s集群(flannel)安装crictl使用kubeadm部署集群节点加入集群部署flannel网络配置dashboard 本集群基于ubuntu2204系统使用kubeadm工具部署1.24版本k8s,容器运行时使用…

Unity | Shader基础知识(第九集:shader常用单词基础知识速成)

目录 一、顶点(Vertex)和法线(Normal) 二、UV信息 三、 基础数据种类 1 基础数据种类 2 基础数据数组 3 基础数据数组的赋值 4 对数据数组的调用 四、 基础矩阵 1 基础矩阵种类 2 对矩阵数组的调用 2.1对一个数据的调用 2.2对多个数据的调用 2…

机器之心 AI 技术--人工智能助力个性化视频实战经验分享(文末送书)

【清华社&机器之心】视频生成前沿研究与应用特别活动 在视频生成即将迎来技术和应用大爆发之际,为了帮助企业和广大从业者掌握技术前沿,把握时代机遇,机器之心AI论坛就将国内的视频生成技术力量齐聚一堂,共同分享国内顶尖力量…

华为云AI:轻松实现图像识别调用

文章目录 前言一、环境配置关键步骤 二、图像识别实例媒资图像标签名人识别 总结 前言 基于华为云AI服务和java使用SDK实现图像识别,主要以媒资图像标签和名人识别为例。 一、环境配置 Maven(没有直接下载华为的SDK包,而是使用Maven安装依赖…

韩语翻译是怎么收费的

近年来,随着中韩交流的日益密切,韩语翻译在国内的需求呈现出不断增长的态势。无论是韩语笔译还是口译,其应用领域都非常广泛。那么,韩语翻译的价格是否高昂?翻译公司又是如何进行报价的呢? 在翻译领域&…

C2-3.3.2 机器学习/深度学习——数据增强

C2-3.3.2 数据增强 参考链接 1、为什么要使用数据增强? ※总结最经典的一句话:希望模型学习的更稳健 当数据量不足时候: 人工智能三要素之一为数据,但获取大量数据成本高,但数据又是提高模型精度和泛化效果的重要因…

UCF101 数据集介绍与下载

一、介绍 UCF101 是一个现实动作视频的动作识别数据集,收集自YouTube,提供了来自101个动作类别的13320个视频。官方:https://www.crcv.ucf.edu/research/data-sets/ucf101/ 数据集名称:UCF-101(2012) 总视…

06、Kafka ------ 各个功能的作用解释(ISR 同步副本、非同步副本、自动创建主题、修改主题、删除主题)

目录 CMAK 各个功能的作用解释★ ISR副本 (同步副本)★ 非同步副本★ 自动创建主题★ 修改主题★ 删除主题 CMAK 各个功能的作用解释 ★ ISR副本 (同步副本) 简单来说 ,ISR 副本 就是 Kafka 认为与 领导者副本 同步的副本。 ISR&#xff0…

双位置继电器DLS-5/2TH 额定电压:110VDC 触点形式:7开3闭 柜内安装

系列型号: DLS-5/1电磁式双位置继电器; DLS-5/2电磁式双位置继电器; DLS-5/3电磁式双位置继电器; DLS-5/2G电磁式双位置继电器; DLS-5/3 220VDC双位置继电器 一、用途 1.1用途 DLS-5双位置继电器(以下简称产品)用于各种保护与自动控制系统中,作为切换…

JPEG格式详解Baseline、Progressive的区别

文章目录 JPEG的简介压缩质量/压缩比率色彩空间基线和渐进子采样存储选项 基线和渐进基线格式渐进格式: 子采样4:4:4(无损)4:2:24:2:0 JPEG的简介 JPEG(Joint Photographic Experts Group)是一种常见的图像压缩格式&a…

SpringBoot 配置文件加载优先级

SpringBoot 配置文件加载优先级 前言SpringBoot 配置文件加载优先级 前言 最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 SpringBoot 配置文件加载优先级 整理加载顺序第一个肯…

电子学会C/C++编程等级考试2023年12月(一级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分…

蓝凌EIS智慧协同平台 ShowUserInfo.aspx SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 ShowUserInfo.aspx接口处未对用户输入的SQL语句进行过滤或验证…

Xcode15 升级问题记录

这里写自定义目录标题 新版本Xcode15升级问题1:rsync error: some files could not be transferred (code 23) at ...参考 新版本Xcode15升级 下载地址:https://developer.apple.com/download/all/ 我目前使用的版本是Xcode15.2 我新创建了一个项目&…

植物大战僵尸小游戏抖音快手直播搭建弹幕插件教程

植物大战弹幕插件功能介绍 该插件由梦歌技术部团队支持开发,本插件软件通过监测抖音弹幕信息,获取礼物数据触发脚本插件对应的功能; 功能目前基本上已经完善,后期功能会陆续上线支持更新,全新的脚本监测稳定方便实用…

文心一言API调用,保姆级案例分享

分享一个调用文心一言API的案例。今天自己用程序去过去文心一言模型中获取结果。 文心一言API调用如何收费? 官方给送了20块钱的体验券! 后续收费规则如下 如何开通所需要要的 API key 和 Secret key? api调用需要先在千帆平台开通API key 。…

openGauss学习笔记-193 openGauss 数据库运维-常见故障定位案例-备机卡住-数据库只读

文章目录 openGauss学习笔记-193 openGauss 数据库运维-常见故障定位案例-备机卡住-数据库只读193.1 switchover操作时,主机降备卡住193.1.1 问题现象193.1.2 原因分析193.1.3 处理办法 193.2 磁盘空间达到阈值,数据库只读193.2.1 问题现象193.2.2 原因分…

数据结构第十二弹---堆的应用

堆的应用 1、堆排序2、TopK问题3、堆的相关习题总结 1、堆排序 要学习堆排序,首先要学习堆的向下调整算法,因为要用堆排序,你首先得建堆,而建堆需要执行多次堆的向下调整算法。 但是,使用向下调整算法需要满足一个前提…

面试算法110:所有路径

题目 一个有向无环图由n个节点(标号从0到n-1,n≥2)组成,请找出从节点0到节点n-1的所有路径。图用一个数组graph表示,数组的graph[i]包含所有从节点i能直接到达的节点。例如,输入数组graph为[[1&#xff0c…

微信小程序Canvas画布绘制图片、文字、矩形、(椭)圆、直线

获取CanvasRenderingContext2D 对象 .js onReady() {const query = wx.createSelectorQuery()query.select(#myCanvas).fields({ node: true, size: true }).exec((res) => {const canvas = res[0].nodeconst ctx = canvas.getContext(2d)canvas.width = res[0].width * d…