0
点赞
收藏
分享

微信扫一扫

揭秘PV与PVC:CKA认证考试的必备知识!

介绍

在Kubernetes(K8S)中,PersistentVolume(PV)和PersistentVolumeClaim(PVC)是用于管理持久化存储的重要概念。PV用于抽象存储资源,而PVC用于请求这些资源。本教程将深入介绍PV和PVC的概念、用法以及如何在K8S集群中使用它们。

揭秘PV与PVC:CKA认证考试的必备知识!_CKA

什么是PersistentVolume(PV)?

PersistentVolume(PV)是K8S集群中的持久化存储资源,它是集群中独立于Pod的一种抽象。PV可以是任何类型的持久化存储,例如NFS、iSCSI、AWS EBS等。PV具有自己的生命周期,它独立于Pod的创建和删除。


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

什么是PersistentVolumeClaim(PVC)?

PersistentVolumeClaim(PVC)是Pod对PV的请求。当Pod需要持久化存储时,它会创建一个PVC来请求适合其需求的PV。PVC定义了所需的存储容量和访问模式(例如Read-WriteOnce、ReadOnlyMany等)。

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

如何使用PV和PVC?

以下是使用PV和PVC的基本步骤:

1. 创建PersistentVolume(PV)

您可以手动创建PV,也可以使用存储类(StorageClass)动态创建。以下是手动创建PV的示例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /data

2. 创建PersistentVolumeClaim(PVC)

使用PVC请求PV。以下是创建PVC的示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

3. 将PVC绑定到Pod

在Pod的配置中引用PVC。例如:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

PV的访问模式

模式

解析

ReadWriteOnce(RWO)

可读可写,但只支持被单个节点挂载

ReadOnlyMany(ROX)

只读,可被多个节点挂载

ReadWriteMany(RWX)

多路可读可写,这种存储可以以读写的方式被多个节点共享、不是每一种存储都支持者三种方式,像共享方式,目前支持的还比较少,比较常用的是NFS,在pvc绑定pv时通常根据两个条件来判定,是存储的大小,另一个就是模式

PV的回收策略

PV有不同的回收策略,包括Retain、Delete和Recycle。根据您的需求选择合适的策略。

策略

解析

Retain

不清除、保留volume(需要手动清除)

Recycle

删除数据,即rm -rf /thevolume/* (只有nfs和hostPath支持)

Delete

删除储存资源,比如删除aws ebs卷(只有aws EBS,GCE PD,Azure Disk和cinder支持)

PV的状态

状态

解析

Available

可用,没有被PVC绑定的空闲资源。

Bound

已绑定,已经被PVC绑定

Released

已释放,PVC被删除,但是资源还未被重新使用。

Failed

失败,自动回收失败

结论

通过本教程,您现在应该对Kubernetes中的PV和PVC有了更深入的了解。PV和PVC提供了一种强大的方式来管理持久化存储,并为容器化应用程序提供了可靠的存储解决方案。继续探索PV和PVC的高级用法,并根据您的需求合理地配置和管理持久化存储资源。


CKA真题

持久卷PersistentVolume

真题截图

揭秘PV与PVC:CKA认证考试的必备知识!_PV_02

中文解析

切换 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的状态。

揭秘PV与PVC:CKA认证考试的必备知识!_K8S_03

持久卷申领(PVC)

真题截图

揭秘PV与PVC:CKA认证考试的必备知识!_CKA_04

中文解析

切换 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
---------

举报

相关推荐

0 条评论