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

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--前端传数组给后台

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 案例1乘客个人信息方法1&#xff1a;表单提交&#xff0c;以字段数组接收方法2&#xff1a;表单提交&#xff0c;以BeanListModel接收方法3&#xff1a;将Json对象序…...

【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…...

99.qt qml-单例程序实现

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

【软件工程】可用性测试:提升软件、网站与产品用户体验的关键环节

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 关注点 界面设计&#xff1a; 导航测试&#xff1a; 交互测试&#xff1a; 易用性测试&#xff1a; 多平台兼容性&#xff1a; 我…...

EPLAN的国产平替软件?SuperWORKS自动化版尝鲜

在电气设计领域&#xff0c;EPLAN作为德国老牌软件&#xff0c;知名度较高&#xff0c;使用体验也非常好&#xff01;在中国市场&#xff0c;是否有一款国产软件与之媲美&#xff1f;答案当然是有的&#xff01; 接下来为大家分享一款宝藏级别的国产电气设计软件——SuperWORK…...

【MySQL 系列】MySQL 架构篇

在我们开始了解 MySQL 核心功能之前&#xff0c;首先我们需要站在一个全局的视角&#xff0c;来看 SQL 是如何运作执行的。通过这种方式&#xff0c;我们可以在头脑中构建出一幅 MySQL 各组件之间的协同工作方式&#xff0c;有助于我们加深对 MySQL 服务器的理解。 文章目录 1、…...

C++初阶:类与对象(初篇)

目录 1. 类与对象1.1 引子&#xff1a;结构体与类1.2 什么是类&#xff08;类的定义方式&#xff09;1.3 类和结构体的区别1.4 类的访问限定符与封装1.4.1 访问限定符1.4.2 类的作用域与类的实例化 1.5 类对象的模型1.5.1 类内部资源的存储方式1.5.3 类大小的计算方式 1.6 this…...

Docker 创建容器并指定时区

目录 1. 通过环境变量设置时区&#xff08;推荐&#xff09;2. 挂载宿主机的时区文件到容器中3. 总结 要在 Docker 容器中指定时区&#xff0c;可以通过两种方式来实现&#xff1a; 1. 通过环境变量设置时区&#xff08;推荐&#xff09; 在 Docker 运行时&#xff0c;可以通…...

springboot文件上传修改临时文件路径

1、配置&#xff1a;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修改&#xff1a;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为了开发更加快捷&#xff0c;…...

平台工程指南:从架构构建到职责分工

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

Docker系列之docker与docker-compose离线安装

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

css flex 布局换行

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

使用腾讯云快速搭建WordPress网站流程详解

专栏系列文章&#xff1a; WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么&#xff1f;为什么用它建站&#xff1f;怎么安装与部署&#xff1f; 初次安装WordPress后如何进行网站设置&#xff08;主题安装、…...

JavaScript发展历史与JavaScript的版本发展

JavaScript是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。它最初由Netscape公司的Brendan Eich设计&#xff0c;并于1995年在网景导航者浏览器上首次实现。由于Netscape与Sun合作&#xff0c;并希望其外观与Java相似&#xff0c;因此被命名为JavaScrip…...

零基础如何系统自学Python

零基础系统自学Python 学习前的准备 明确学习目标 Python 一共有两大版本&#xff0c;即 Python2 以及 Python3&#xff0c;Python2 已停止维护&#xff0c;强烈建议直接上手 Python3。Python 可以说是无所不能&#xff0c;主要有以下几大方向&#xff0c;建议选择自己感兴趣…...

华为OD机试 - 字符串统计(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...