k8s中的PV和PVC存储介绍
目录
一.PV介绍
1.含义
2.关键配置参数
二.PVC介绍
1.含义
2.关键参数配置
三.PV和PVC的生命周期问题
1.PV的生命周期会有4个阶段
2.用户申请空间PV的周期流程
3.PV和PVC的使用/释放/回收
四.案例演示
1.NFS配置
2.新建PV
3.新建PVC
4.新建Pod测试
5.模拟删除Pod后后端目录内数据不会受影响
一.PV介绍
1.含义
称为持久化卷,是对底层的共享存储的一种抽象。一般情况下PV由 kubernetes管理员进行创建和配置,关联于底层具体的共享存储技术,并通过插件完成与共享存储的对接。
2.关键配置参数
这些参数在后面的例子中都有用到
(1)存储类型
这是要与底层存储对应的东西,像后面用到的nfs等类型
(2)存储能力
capacity,支持使用storage子项进行配置
(3)访问模式
accessModes,用户对于该存储资源的访问权限,有如下三种模式(因存储类型而异):
ReadWriteOnce(RWO):读写,被单个节点挂载
ReadOnlyMany(ROX): 只读,可被多节点挂载
ReadWriteMany(RWX):读写,可被多节点挂载
(4)回收策略
persistentVolumeReclaimPolicy,pv不供使用之后的三种处理策略(因存储类型而异):
Retain 保留数据,需要管理员手工清理数据
Recycle清除数据
Delete删除与 PV 相连的后端存储完成删除操作
(5)存储类别
storageClassName,设定一个类别,pvc需要匹配此类的pv时才能相匹配,pvc不申请具有类的pv时,只能与没有设定类的pv匹配,不能和设定了类的pv匹配
二.PVC介绍
1.含义
持久卷声明,是用户对于存储需求的一种声明。用户向kubernetes系统发出的一种资源需求申请(可以是访问模式,存储空间,存储类别的需求),kubernetes再进一步去申请PV
2.关键参数配置
(1)访问模式
accessModes,主要是配置用户对存储资源的访问权限
(2)筛选条件
selector,和以往的selector一样,对有label的pv进行选择
(3)存储类别
storageClassName,上文已提及
(4)资源请求
resources,通过requests-storage子项进行资源大小申请
三.PV和PVC的生命周期问题
1.PV的生命周期会有4个阶段
Available:可用状态,还未被任何 PVC 绑定
Bound:PV 已经被 PVC 绑定
Released:PVC 被删除,但是资源还未被集群重新声明
Failed:该 PV 的自动回收失败
2.用户申请空间PV的周期流程
管理员创建PV,用户创建PVC,kubernetes通过PVC请求去找符合条件的PV并将PV与PVC绑定,匹配成功后用户进行使用,不成功则将PVC标记为Pending状态,一直持续到匹配到下一个符合条件的PV
3.PV和PVC的使用/释放/回收
通过volume挂载来使用PVC,使用完毕后删除掉PVC即可,但是现在PV却不能立刻去绑定另外的PVC,因为上面不清楚是否还存在残留数据(取决于你PV配置的回收策略),清除完毕后就可以进行信心PVC的绑定
四.案例演示
如下案例以nfs,my-pv1,my-pv2,my-pvc1,my-pvc2,my-pod1,my-pod2等资源来演示,主要是演示对于nginx访问日志的简单存储问题
1.NFS配置
存储类型选择NFS来演示
[root@k8s-master pv]# cat /etc/exports
/root/pv/pv1 192.168.2.0/24(rw,no_root_squash) #共享后端目录,可以自己新建
/root/pv/pv2 192.168.2.0/24(rw,no_root_squash)
[root@k8s-master pv]# systemctl restart nfs
[root@k8s-master pv]# pwd
/root/pv
[root@k8s-master pv]# ll
total 12
-rw-r--r-- 1 root root 1011 Mar 7 20:14 pod.yaml
drwxr-xr-x 5 root root 74 Mar 7 20:16 pv1
drwxr-xr-x 5 root root 74 Mar 7 20:14 pv2
-rw-r--r-- 1 root root 353 Mar 6 21:54 pvc.yaml
-rw-r--r-- 1 root root 555 Mar 7 15:59 pv.yaml
2.新建PV
[root@k8s-master pv]# cat pv.yaml
apiVersion: v1
kind: Namespace
metadata:name: myns
---
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv1namespace: myns
spec:capacity:storage: 1G #共1GaccessModes:- ReadWriteMany #可读写persistentVolumeReclaimPolicy: Retain #需手动删除后端内容nfs: #nfs挂载信息path: /root/pv/pv1 #刚才建立的后端目录server: 192.168.2.150
---
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv2namespace: myns
spec:capacity: storage: 1GaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/pv/pv2server: 192.168.2.150
3.新建PVC
[root@k8s-master pv]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc1namespace: myns
spec:accessModes:- ReadWriteManyresources:requests:storage: 500M #申请500M
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc2namespace: myns
spec:accessModes:- ReadWriteManyresources:requests:storage: 600M
4.新建Pod测试
[root@k8s-master pv]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata: name: my-pod1namespace: myns
spec:containers:- name: my-nginx1image: nginxports:- name: nginx-port1containerPort: 80volumeMounts:- name: my-volumemountPath: /var/log/nginx- name: my-busybox1image: busyboxcommand: ["/bin/sh","-c","tail -f /logs/access.log"]volumeMounts:- name: my-volumemountPath: /logsvolumes:- name: my-volumepersistentVolumeClaim:claimName: my-pvc1
---
apiVersion: v1
kind: Pod
metadata:name: my-pod2namespace: myns
spec:containers:- name: my-nginx2image: nginxports:- name: nginx-port2containerPort: 80volumeMounts:- name: my-volumemountPath: /var/log/nginx- name: my-busybox2image: busyboxcommand: ["/bin/sh","-c","tail -f /logs/access.log"]volumeMounts:- name: my-volumemountPath: /logsvolumes:- name: my-volumepersistentVolumeClaim:claimName: my-pvc2
[root@k8s-master pv]# kubectl get pv,pvc,pod -n myns -o wide
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
persistentvolume/my-pv1 1G RWX Retain Bound myns/my-pvc1 22m Filesystem
persistentvolume/my-pv2 1G RWX Retain Bound myns/my-pvc2 22m Filesystem
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
persistentvolumeclaim/my-pvc1 Bound my-pv1 1G RWX 22m Filesystem
persistentvolumeclaim/my-pvc2 Bound my-pv2 1G RWX 22m Filesystem
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/my-pod1 2/2 Running 0 7m43s 10.244.107.195 k8s-node3 <none> <none>
pod/my-pod2 2/2 Running 0 7m43s 10.244.36.67 k8s-node1 <none> <none>
[root@k8s-master pv]# ansible all -m shell -a "curl 10.244.107.195" #访问产生日志
[root@k8s-master pv]# ansible all -m shell -a "curl 10.244.36.67"
[root@k8s-master pv]# cat pv1/access.log
10.244.36.64 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
10.244.169.128 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.2.153 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
[root@k8s-master pv]# cat pv2/access.log
10.244.169.128 - - [07/Mar/2024:12:15:20 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.2.151 - - [07/Mar/2024:12:15:20 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
10.244.107.192 - - [07/Mar/2024:12:15:20 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
5.模拟删除Pod后后端目录内数据不会受影响
[root@k8s-master pv]# kubectl get pods -n myns
NAME READY STATUS RESTARTS AGE
my-pod1 2/2 Running 0 14m
my-pod2 2/2 Running 0 14m
[root@k8s-master pv]# kubectl delete pod my-pod1 my-pod2 -n myns
pod "my-pod1" deleted
pod "my-pod2" deleted
[root@k8s-master pv]# ll
total 12
-rw-r--r-- 1 root root 1011 Mar 7 20:14 pod.yaml
drwxr-xr-x 5 root root 74 Mar 7 20:16 pv1
drwxr-xr-x 5 root root 74 Mar 7 20:14 pv2
-rw-r--r-- 1 root root 353 Mar 6 21:54 pvc.yaml
-rw-r--r-- 1 root root 555 Mar 7 15:59 pv.yaml
[root@k8s-master pv]# cat pv1/access.log
10.244.36.64 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
10.244.169.128 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.2.153 - - [07/Mar/2024:12:15:05 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
相关文章:
k8s中的PV和PVC存储介绍
目录 一.PV介绍 1.含义 2.关键配置参数 二.PVC介绍 1.含义 2.关键参数配置 三.PV和PVC的生命周期问题 1.PV的生命周期会有4个阶段 2.用户申请空间PV的周期流程 3.PV和PVC的使用/释放/回收 四.案例演示 1.NFS配置 2.新建PV 3.新建PVC 4.新建Pod测试 5.模拟删除P…...

SpringMVC--03--前端传数组给后台
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 案例1乘客个人信息方法1:表单提交,以字段数组接收方法2:表单提交,以BeanListModel接收方法3:将Json对象序…...

【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…...

99.qt qml-单例程序实现
在之前讲过: 58.qt quick-qml系统托盘实现https://nuoqian.blog.csdn.net/article/details/121855993 由于,该示例只是简单讲解了系统托盘实现,并没有实现单例程序,所以多次打开后就会出现多个exe出现的可能,本章出一章QML单例程序实现, 多次打开始终只显示出第一个打开…...

【软件工程】可用性测试:提升软件、网站与产品用户体验的关键环节
🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 正文 关注点 界面设计: 导航测试: 交互测试: 易用性测试: 多平台兼容性: 我…...
EPLAN的国产平替软件?SuperWORKS自动化版尝鲜
在电气设计领域,EPLAN作为德国老牌软件,知名度较高,使用体验也非常好!在中国市场,是否有一款国产软件与之媲美?答案当然是有的! 接下来为大家分享一款宝藏级别的国产电气设计软件——SuperWORK…...

【MySQL 系列】MySQL 架构篇
在我们开始了解 MySQL 核心功能之前,首先我们需要站在一个全局的视角,来看 SQL 是如何运作执行的。通过这种方式,我们可以在头脑中构建出一幅 MySQL 各组件之间的协同工作方式,有助于我们加深对 MySQL 服务器的理解。 文章目录 1、…...
C++初阶:类与对象(初篇)
目录 1. 类与对象1.1 引子:结构体与类1.2 什么是类(类的定义方式)1.3 类和结构体的区别1.4 类的访问限定符与封装1.4.1 访问限定符1.4.2 类的作用域与类的实例化 1.5 类对象的模型1.5.1 类内部资源的存储方式1.5.3 类大小的计算方式 1.6 this…...

Docker 创建容器并指定时区
目录 1. 通过环境变量设置时区(推荐)2. 挂载宿主机的时区文件到容器中3. 总结 要在 Docker 容器中指定时区,可以通过两种方式来实现: 1. 通过环境变量设置时区(推荐) 在 Docker 运行时,可以通…...
springboot文件上传修改临时文件路径
1、配置:spring.servlet.multipart.location/data/tmp 2、代码 Configuration public class MultipartConfig {Value("${spring.servlet.multipart.location}")private String tmpLocation;Beanpublic MultipartConfigElement multipartConfigElement()…...

testvue-新增图表功能(教师那边-后续放到管理员那边)-src/main.js ,router/index.js
1.安装--然后在src/main.js中 导入 和 使用2修改:common/sidebar.vue ,page/ echarts.vue , router/index.js , src/main.js 3sidebar.vue <template><div class"sidebar"><el-menuclass"sidebar-el-menu":default-active&quo…...

[HackMyVM]Quick 2
kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…...

Mybatis-Plus实现Service封装
文章目录 5.1 MP封装Service介绍5.1.1 说明5.1.2 实现流程5.1.3 核心API介绍 5.2 MP封装Service快速入门5.2.1 定义服务扩展接口5.2.2 定义服务实现5.2.3 测试测试 5.3 MP封装Service实现CRUD操作 5.1 MP封装Service介绍 5.1.1 说明 MybatisPlus为了开发更加快捷,…...

平台工程指南:从架构构建到职责分工
平台工程只是 DevOps 专业化的另一个术语,还是另有所指?事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩,以各个团队为中心。不幸的是,在许多地方,DevOps 引发了新的问题,如工具激增和…...

Docker系列之docker与docker-compose离线安装
docker离线安装 一、离线安装包二、安装命令三、配置四、docker-compose 一、离线安装包 上传离线安装包至/root/目录下,docker离线安装包下载链接。 二、安装命令 cd /root mkdir k8sOfflineSetup tar -xzvf k8sOfflineSetup-2020-02-20.tar.gz -C k8sOfflineSe…...

css flex 布局换行
默认使用display: flex;是不换行的,只需要加上flex-wrap: wrap;就行了,效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了,但是每行的边距不一样 加上这个就行了ÿ…...

使用腾讯云快速搭建WordPress网站流程详解
专栏系列文章: WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么?为什么用它建站?怎么安装与部署? 初次安装WordPress后如何进行网站设置(主题安装、…...
JavaScript发展历史与JavaScript的版本发展
JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它最初由Netscape公司的Brendan Eich设计,并于1995年在网景导航者浏览器上首次实现。由于Netscape与Sun合作,并希望其外观与Java相似,因此被命名为JavaScrip…...
零基础如何系统自学Python
零基础系统自学Python 学习前的准备 明确学习目标 Python 一共有两大版本,即 Python2 以及 Python3,Python2 已停止维护,强烈建议直接上手 Python3。Python 可以说是无所不能,主要有以下几大方向,建议选择自己感兴趣…...

华为OD机试 - 字符串统计(Java 2024 C卷 100分)
目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...