PV与PVC知多少?解锁CKA认证考点攻略!

news2024/10/1 12:10:16

往期精彩文章 :

  • 提升CKA考试胜算:一文带你全面了解RBAC权限控制!
  • 揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
  • CKA认证必备:掌握k8s网络策略的关键要点
  • 提高CKA认证成功率,CKA真题中的节点维护全攻略!
  • 数据无忧,一学就会:掌握CKA认证必备的etcd备份与还原秘籍!
  • 提升你的云技能:深入了解CKA认证之k8s升级秘籍!
  • 揭秘CKA认证:Service四层代理的神秘面纱
  • 提升CKA认证成功率:Kubernetes Ingress七层代理全攻略!
  • CKA考生注意:这些Deployment要点能助你一臂之力!
  • 从NodeSelector到NodeAffinity:探索Kubernetes节点亲和性的进化之路
  • 提升CKA考试效率:精准统计Ready状态Node节点的实用攻略
  • CKA考试必备:解锁Pod封装多容器的高级技巧!

理论

1、PV概念

持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。

  • PV是对K8S存储资源的抽象,PV一般由运维人员创建和配置,供容器申请使用。
  • 注意:PV没有命名空间限制!!!

2、PVC概念

持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样PVC申领也可以请求特定的大小和访问模式 。

  • Pod 在使用 PVC 时必须与PVC在同一个Namespace下。
  • 注意:PVC有命名空间限制!!!

3、PV与PVC的关系

PV相当于对磁盘的分区,PVC相当于APP(应用程序)向某个分区申请多少空间。比如说安装WPS程序时,一般会告知我们安装它需要多少存储空间,让你选择在某个磁盘下安装。如果将来某个分区磁盘满了,也不会影响别的分区磁盘的使用。 一旦 PV 与PVC绑定,Pod就可以使用这个 PVC 了。如果在系统中没有满足 PVC 要求的 PV,PVC则一直处于 Pending 状态,直到系统里产生了一个合适的 PV。

PV与PVC的关系

4、StorageClass概念

K8S有两种存储资源的供应模式:静态模式和动态模式,资源供应的最终目的就是将适合的PV与PVC绑定:

  • 静态模式:管理员预先创建许多各种各样的PV,等待PVC申请使用。
  • 动态模式:管理员无须预先创建PV,而是通过StorageClass自动完成PV的创建以及与PVC的绑定。

StorageClass就是动态模式,根据PVC的需求动态创建合适的PV资源,从而实现存储卷的按需创建。

5、PV的访问模式

模式解析
ReadWriteOnce(RWO)可读可写,但只支持被单个节点挂载
ReadOnlyMany(ROX)只读,可被多个节点挂载
ReadWriteMany(RWX)多路可读可写,这种存储可以以读写的方式被多个节点共享、不是每一种存储都支持者三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS,在pvc绑定pv时通常根据两个条件来判定,是存储的大小,另一个就是模式

6、PV的回收策略

策略解析
Retain不清除、保留volume(需要手动清除)
Recycle删除数据,即rm -rf /thevolume/* (只有nfs和hostPath支持)
Delete删除储存资源,比如删除aws ebs卷(只有aws EBS,GCE PD,Azure Disk和cinder支持)

7、PV的状态

状态解析
Available可用,没有被PVC绑定的空闲资源。
Bound已绑定,已经被PVC绑定
Released已释放,PVC被删除,但是资源还未被重新使用。
Failed失败,自动回收失败

案例演示

NFS安装

本案例演示使用NFS作为后端的存储,在K8S所有节点上都要安装NFS客户端软件,下面采用控制平面作为NFS服务端。

  1. 在控制平面安装NFS服务端:
apt install nfs-kernel-server  nfs-common -y
  1. 并配置共享目录,编辑/etc/exports这个文件
/nfs/data *(rw,sync,no_root_squash)

这表示将 /data 目录共享给所有客户端,具有读写权限。

  1. 修改配置文件,需要执行下面的命令使其生效
exportfs -a
  1. 在所有的节点上安装NFS客户端
apt install nfs-common -y
  1. 节点上安装完后,通过执行如下命令验证NFS是否配置正确
node01 $ showmount -e 172.30.1.2
Export list for 172.30.1.2:
/nfs/data *
node01 $ 

上面的命令是列出NFS服务器所有的共享目录,172.30.1.2是NFS服务器的地址。

创建PV

下面创建一个用于持久化存储MYSQL数据的PV,大小为2Gi

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    pv: mysql-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs-slow
  nfs:
    path: /nfs/data
    server: 172.30.1.2

执行PV的创建后,如下图,PV目前的状态为Available

创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  labels:
    pv: mysql-pvc
spec:
  storageClassName: nfs-slow
  resources:
    requests:
      storage: 2Gi
  accessModes:
    - ReadWriteOnce
  selector:
    matchLabels:
      pv: mysql-pv

执行创建PVC命令后,pv的状态就从原来的Available变成Bound,如下图:

本来想通过标签的方式去关联PV和PVC的,但是,在v.1.29.0版本,通过标签的方式PVC的创建一直处于Pending中。最后通过查询官方文档通过storageClassName这个字段才成功Bound

创建Deploy资源

在Deployment中调用PVC资源,mysql-deploy.yaml资源清单如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "@123456@"
        ports:
        - containerPort: 3306
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysqlvolume
      volumes:
      - name: mysqlvolume
        persistentVolumeClaim: 
          claimName: mysql-pvc #使用的pvc名字
        

执行如下命令,提交资源清单返回结果如下:

CKA真题

持久卷PersistentVolume

真题截图

中文解析

切换 k8s 集群环境:kubectl config use-context hk8s
Task
创建一个 pv,名字为app-config,大小为 2Gi, 访问权限为ReadWriteManyVolume的类型为 hostPath,路径为 /srv/app-config

官方参考文档

配置 Pod 以使用 PersistentVolume 作为存储

做题解答

  1. 切换K8s集群环境
kubectl config use-context hk8s
  1. 按照题目的要求,编写PV的资源清单
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  app-config
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"
  1. 提交PV资源清单
kubectl apply -f pv.yaml
  1. 通过下面的命令检查PV的状态。

持久卷申领(PVC)

真题截图

中文解析

切换 k8s 集群环境:kubectl config use-context ok8s
Task
创建一个名字为 pv-volume 的 pvc,指定 storageClass 为csi-hostpath-sc,大小为 10Mi。然后创建一个 Pod,名字为web-server,镜像为 nginx,并且挂载该 PVC 至 /usr/share/nginx/html,挂载的权限为 RedWriteOnce。之后通过 kubectl edit 或者 kubectl path 将 pvc 改成 70Mi,并且记录修改记录。

官方参考文档

配置 Pod 以使用 PersistentVolume 作为存储

做题解答

  1. 切换K8s集群环境
kubectl config use-context hk8s
  1. 按照题目的要求,编写PVC的资源清单
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  storageClassName: csi-hostpath-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: html-volume
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: web-server
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: html-volume
  1. 提交资源清单
kubectl apply -f pod.yaml
  1. 修改PVC的容量从原来的10Mi改成70Mi
kubectl edit pvc pv-volume


--------
  resources:
    requests:
      storage: 70Mi
  storageClassName: csi-hostpath-sc
---------

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

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

相关文章

蓝桥省赛倒计时 35 天-双指针

双指针介绍 双指针算法是一种常用的算法技巧,它通常用于在数组或字符串中进行快速查找、匹配、排序或移动操作。 pointer 双指针并非真的用指针实现,一般用两个变量来表示下标(在后面都用指针来表示)。 双指针算法使用两个指针在数…

【Java JVM】Class 文件

Java 的口号 “一次编写, 到处运行 (Write Once, Run Anywhere)” 的基础: JVM 和 所有平台都统一支持的程序存储格式 – 字节码 (Byte Code)。 只要在对应的平台安装对应的 JVM, 将我们编写的源码编译为 Class 文件, 就能达到了一次编写, 导出运行的目标, 中间的所有细节由不同…

0103n阶行列式-行列式-线性代数

文章目录 一 n阶行列式二 三阶行列式三 特殊行列式结语 一 n阶行列式 ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ∣ \begin{vmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\cdots&\cdots…

大型房企知识竞赛活动方案

(一) 线上挑战赛 1、加入团队 个人可以依据自身情况选择加入初始团队,也可创建团队。 2、题库来源 参考权威题库,适当加入公司帮扶贫困县的相关历史数据题目 3、小程序活动专题页 模块包括:党史知识线上挑战赛、活动宣…

Unity 采用自定义通道ShaderGraph实现FullScreen的窗户雨滴效果

效果如下 ShaderGraph实现 N21 随机化 DragLayer分层 将DragLayer分成四层,分别调整每层的缩放和大小 Shader实现的链接(Unity 雨水滴到屏幕效果) 我也是参考这个实现Shader Graph

Android7.1 ANR error 弹窗处理

Android7.1 ANR error 弹窗处理 问题描述解决方法 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 7.1.2 Kernel: 3.10 问题描述 有时会用到第三方apk,内置到系统中&…

通信-CAN-00 标准概述

总结了下CAN的基本知识,实际CAN的标准,内容,工具使用,上位机开发,下位机开发等,后续会找时间慢慢更新。本文主要介绍CAN标准,并对11898进行了进一步的介绍。 1 CAN概念 CAN-Controller Area N…

C++ 多状态dp

目录 按摩师 打家劫舍 打家劫舍2 删除并获得点数 粉刷房子 按摩师 面试题 17.16. 按摩师 最大值问题 f : 预约此次的最长时间 g :不预约此次的最长时间 出现的错误:return max(f[n - 1]), g[n - 1]); 注意:①题目没给nums的范围&…

软件杯 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

【C++】深度解剖多态

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是多态,熟练掌握多态的定义&a…

预约自习室

预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node,后端开发框架采用Express,数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架,Element-UI作为开发的组件库,微信小程序。期间采用axios实现网页数据获取&a…

[java入门到精通] 19 网络编程,设计模式

今日目标 网络编程 TCP通信 Junit单元测试 单例设计模式 多例设计模式 工厂设计模式 1 网络编程 1.1 软件架构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件B/S结构 &#xff1a…

Biomedical knowledge graph-enhanced prompt generation for large language models

1. 生物医学知识图谱增强大语言模型提示生成 论文地址:[2311.17330] Biomedical knowledge graph-enhanced prompt generation for large language models (arxiv.org) 源码地址:https://github.com/BaranziniLab/KG_RAG 2. 摘要 大语言模型&#xff0…

MySQL--索引优化实战篇(1)

前言: 我们常说的SQL优化,简单来说就是索引优化,通过合理创建索引,调整SQL语法等,来提升查询效率,想要进行SQL优化,就必须知道索引的原理,而且能够看懂SQL的执行计划。 MySQL–索引…

基于springboot的校园二手交易平台(程序+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…

STM32OLED调试工具

OLED介绍 4个引脚的oled : GND引脚接地,VCC接3.3v的电源 SCL与SDA是I2C通信的引脚 使用OLED显示屏驱动函数模块 接线图 将oled函数调试的代码引入到工程项目中 oled工程代码 OLED.C文件代码 #include "stm32f10x.h" #include "OLED_Font…

论文笔记 Where Would I Go Next? Large Language Models as Human Mobility Predictor

arxiv 2023 08的论文 1 intro 1.1 人类流动性的独特性 人类流动性的独特特性在于其固有的规律性、随机性以及复杂的时空依赖性 ——>准确预测人们的行踪变得困难近期的研究利用深度学习模型的时空建模能力实现了更好的预测性能 但准确性仍然不足,且产生的结果…

【Python数据结构与判断1/7】复杂的多向选择

目录 导入 举个栗子 代码优化 elif 栗子 执行顺序 情况一 情况二 情况三 if-elif-else特性 三种判断语句小结 if if-else if-elif-else 嵌套语句 if嵌套 栗子 执行顺序 相互嵌套 Tips Debug 总结 导入 在前面,我们学习了单向选择的if语句和多项…

超越α!PixArt家族新秀PixArt-Σ: 由弱到强训练的文本生成4K图像DiT(华为诺亚)

文章链接: https://arxiv.org/pdf/2403.04692 开源地址:https://pixart-alpha.github.io/PixArt-sigma-project/ PixArt-Σ,这是一个能够直接生成4K分辨率图像的Diffusion Transformer(DiT)。PixArt-Σ相比其前身PixAr…

【unity实战】3D水系统,游泳,潜水,钓鱼功能实现

最终效果 文章目录 最终效果素材将项目升级为URP画一个水潭地形材质升级为URP创建水调节水第一人称人物移动控制游泳水面停留添加水下后处理水下呼吸钓鱼参考完结 素材 https://assetstore.unity.com/packages/vfx/shaders/urp-stylized-water-shader-proto-series-187485 将…