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

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
可观测可视化 Grafana 版,10个用户账号 1个月
简介: PV与PVC知多少?解锁CKA认证考点攻略!

往期精彩文章 :

理论

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。

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
---------
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
算法 调度
PV操作与前趋图题型
PV操作与前趋图题型
398 0
|
运维 网络虚拟化 5G
带你读《ONAP技术详解与应用实践》之一:网络自动化挑战及ONAP介绍
国内首部系统剖析ONAP的书籍,也是理论性与实战性兼具的网络自动化实践指导书!本书详细全面地介绍了网络自动化的挑战和发展趋势,以及ONAP的概况、架构设计理念、设计原则、各模块实现细节、关键特性、应用场景和案例实践等。通过本书读者可以深入理解ONAP,提升对网络自动化及相关领域的认知。作者及其团队成员均是华为网络开源领域的专家,长期参与社区的治理、贡献和回馈,致力于通过产业协作,打造统一的平台,降低集成成本,加快新技术导入,助力新一代网络运维系统升级。同时,本书也融入了作者及其团队在网络开源领域的深刻洞察和见解,书中分享了华为参与网络开源的实践经验,是电信网络转型的重要参考。
|
关系型数据库 Linux 数据库
|
安全 API Android开发
Android 15: 迈向64位时代的重大更新与全新体验
2024年,Google发布Android 15,迈向64位计算新时代。新系统淘汰32位应用,引入多项性能优化与新特性,如矢量emoji、预测性返回动画等,并预计随Pixel 9系列一同发布。开发者需更新应用确保兼容性,并利用新功能提升用户体验。
3313 15
Android 15: 迈向64位时代的重大更新与全新体验
|
存储 设计模式 开发框架
总结开发中基于DevExpress的Winform界面效果
总结开发中基于DevExpress的Winform界面效果
|
Java API 开发者
【面试题精讲】SPI 和 API 有什么区别?
【面试题精讲】SPI 和 API 有什么区别?
|
10月前
|
监控 API 索引
Elasticsearch集群健康检查
【11月更文挑战第4天】
308 3
|
调度 C++
PV操作知识点
PV操作知识点
544 1
error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
358 0