PV 与 PVC 状态迁移

news2024/9/22 19:37:42

文章目录

  • 一、概述
    • 1、PV
    • 2、PVC
  • 二、状态变化
  • 三、实例
    • 1、单独创建 PV
      • 1.1、创建并应用 PV
      • 1.2、查看刚创建的 PV 状态
    • 2、单独创建 PVC
      • 2.1、创建并应用 PV
      • 2.2、查看刚创建的 PVC 状态
    • 3、等待绑定
    • 4、删除 PV
      • 4.1、查看 PV,PVC 状态
      • 4.2、真正删除 PV
      • 4.3、查看PV PVC 状态
    • 5、重新创建 PV
      • 5.1、重新创建之前与 PVC 绑定的 PV
    • 6、删除 PVC
      • 6.1、persistentVolumeReclaimPolicy: Retain 时删除 PVC 查看 PV 状态
      • 6.2、persistentVolumeReclaimPolicy: Delete 时删除 PVC 查看 PV 状态
      • 6.3、persistentVolumeReclaimPolicy: Recycle 时删除 PVC 查看 PV 状态
    • 7、手动删除 PVC 引用
      • 7.1、查看 PV 的 claimRef 属性
      • 7.2、删除 claimRef 对 PVC 的引用
      • 7.3、重建之前的 PVC 进行绑定
  • 四、状态迁移图
    • 1、PV 状态迁移图
    • 2、PVC 状态迁移图

一、概述

1、PV

定义:集群级别的资源。是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。与节点相绑定。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。 此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。

用途:PV 为应用提供持久化的存储空间,即使 Pod 被销毁或重新创建,数据仍然保留。

2、PVC

定义:命名空间(namespace)级别的资源。PVC 是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。 PVC 申领会请求特定的大小和访问模式

用途:PVC 允许用户请求特定大小和特性的存储空间,Kubernetes 自动将合适的 PV 与 PVC 匹配起来。

二、状态变化

操作PV 状态PVC 状态
创建 PV (单独)Available
创建 PVC (单独)Pending
等待绑定BoundBound
删除 PV(delete命令 --> 真正删除)Bound --> Terminating --> —Bound --> Lost
重新创建 PVAvailable --> BoundLost --> Bound
删除 PVCReleased(Retain)/ Failed(Delete/Recycle)清理失败
删除 PV 的 claimRefReleased(Retain)–> Available
重建 PVCAvailable --> BoundBound

三、实例

1、单独创建 PV

1.1、创建并应用 PV

kubectl apply -f task-pv.yaml
cat << EOF > task-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  local:
    path: /mnt/data/my-pv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node1
EOF

1.2、查看刚创建的 PV 状态

Available(可用): 表示可用状态,PV 刚被创建出来还未被任何 PVC 绑定

kubectl get pv task-pv

image-20240813144053580

2、单独创建 PVC

2.1、创建并应用 PV

kubectl apply -f task-pvc.yaml
cat << EOF > task-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual
EOF

2.2、查看刚创建的 PVC 状态

Pending (待定):当 PVC 被创建时,它会处于 Pending 状态,等待与合适的 PV 匹配。

kubectl get pvc task-pvc

image-20240813144840356

3、等待绑定

PVC — Bound (已绑定):当 PVC 成功与 PV 匹配并绑定时,PVC 的状态变为 Bound。这意味着 PVC 已经准备好被 Pod 使用。

PV — Bound(已绑定): 表示 PV 已经被 PVC 绑定

kubectl get pv task-pv
kubectl get pvc task-pvc

image-20240813145424026

4、删除 PV

当我们尝试删除正在绑定的 PV 时会发现 delete 操作会一直卡住

因为 Kubernetes 试图保持 PV 和 PVC 之间的绑定关系,直到 PVC 被删除或者 PV 的状态被显式地更改

kubectl delete pv task-pv

image-20240813150657114

4.1、查看 PV,PVC 状态

PV 没有被真正删除时,PV 处于 Terminating 状态,对 PVC 无影响 还是 Bound 状态

kubectl get pvc task-pvc
kubectl get pv task-pv

image-20240813151335163

4.2、真正删除 PV

想要真正删除 PV 需要修改 PV 中的 Finalizer 属性强制删除

kubectl edit pv task-pv
注释掉 finalizers: 及其值
image-20240813152308596

4.3、查看PV PVC 状态

当编辑 PV 并删除 PV 中的 Finalizer 属性强制删除 PV 时 PVC 会变为 Lost 状态

kubectl get pvc task-pvc
kubectl get pv task-pv

image-20240813152554408

5、重新创建 PV

5.1、重新创建之前与 PVC 绑定的 PV

PV 由 刚创建的 Available --> Bound 绑定状态

PVC 由之前的 Lost 状态 --> Bound 绑定状态

过一会,会发现 PVC 和 PV 都变为 Bound 状态

kubectl apply -f task-pv.yaml

kubectl get pv task-pv

kubectl get pvc task-pvc

image-20240813153936058

6、删除 PVC

这个时候的 PV 状态由自己定义的 persistentVolumeReclaimPolicy字段来决定

6.1、persistentVolumeReclaimPolicy: Retain 时删除 PVC 查看 PV 状态

persistentVolumeReclaimPolicy: Retain 时删除 PVC 与其绑定的 PV 处于Released 状态

image-20240813160158969

kubectl delete pvc task-pvc

kubectl get pv task-pv

image-20240813154855214

6.2、persistentVolumeReclaimPolicy: Delete 时删除 PVC 查看 PV 状态

persistentVolumeReclaimPolicy: Delete 时删除 PVC 与其绑定的 PV 处于 Failed 状态(清理失败)

image-20240813162911550

kubectl get pv

image-20240813162712773

6.3、persistentVolumeReclaimPolicy: Recycle 时删除 PVC 查看 PV 状态

persistentVolumeReclaimPolicy: Recycle 时删除 PVC 与其绑定的 PV 处于 Failed 状态(清理失败)

image-20240813163024825

kubectl get pv

image-20240813163206818

7、手动删除 PVC 引用

7.1、查看 PV 的 claimRef 属性

通过查看 PV 的 claimRef 属性,会发现其中还保留着 PVC 的绑定信息

kubectl get pv task-pv -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"task-pv"},"spec":{"accessModes":["ReadWriteOnce"],"capacity":{"storage":"1Gi"},"local":{"path":"/mnt/data/my-pv"},"nodeAffinity":{"required":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"kubernetes.io/hostname","operator":"In","values":["k8s-node1"]}]}]}},"persistentVolumeReclaimPolicy":"Retain","storageClassName":"manual"}}
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: "2024-08-13T08:38:42Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: task-pv
  resourceVersion: "98232"
  uid: 74442248-2aea-436d-9e66-45af7b36405a
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: task-pvc
    namespace: default
    resourceVersion: "98206"
    uid: e0cb8efc-68a5-4044-8b63-9c633eeb4e6f
  local:
    path: /mnt/data/my-pv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node1
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  volumeMode: Filesystem
status:
  phase: Released

image-20240813164406341

7.2、删除 claimRef 对 PVC 的引用

由于PVC只能和Available的状态的PV进行绑定。删除 claimRef 对 PVC 的引用,这个时候 Kubernetes 的 PV Controller watch 到 PV 变化后,就会将 PV 修改为 Available 状态,Available 状态的 PV 就可以被其他 PVC 绑定了。

删除 claimRef 部分

PV 会从 Released 状态变为 Available 状态

kind: PersistentVolume
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"task-pv"},"spec":{"accessModes":["ReadWriteOnce"],"capacity":{"storage":"1Gi"},"local":{"path":"/mnt/data/my-pv"},"node
Affinity":{"required":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"kubernetes.io/hostname","operator":"In","values":["k8s-node1"]}]}]}},"persistentVolumeReclaimPolicy":"Retain","storageClassName":"manu
al"}}
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: "2024-08-13T08:52:58Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: task-pv
  resourceVersion: "99447"
  uid: f89d6765-88fb-4b33-8dc1-157f25c7d798
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  local:
    path: /mnt/data/my-pv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node1
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  volumeMode: Filesystem
status:
  phase: Released

image-20240813165501372

7.3、重建之前的 PVC 进行绑定

会发现集群中的 PV 与 PVC 立即进行了绑定都变为 Bound 状态

kubectl apply -f task-pvc.yaml

kubectl get pvc,pv

image-20240813165809504

四、状态迁移图

1、PV 状态迁移图

image-20240814001106256

1、创建好一个 PV 后 PV 就处于一个 Available 状态,当一个 PV 与 一个 PVC 绑定的时候,这个 PV 就会进入 Bound 状态

2、一个处于 Bound 状态且回收策略时 Retain 的 PV ,其关联的 PVC 删除后,变为 Released ;回收策略为 Recycle/Delete 时清理失败会变为 Failed 状态

3、当删除 PV 的 claimRef (对 PVC 的引用)时,PV 由 Released 变为 Available

4、当 Recycle 失败时状态变为 Failed

5、通过手动删除 PVC 信息,状态由 Failed 变为 Available

2、PVC 状态迁移图

image-20240813232801201

1、当 PVC 被创建时会短暂处于 Pending 状态等待集群中由匹配的 PV 与其绑定。当一个 Pending 的 PVC 成功与 PV 绑定时 PVC 的状态变为 Bound

2、当删除 PV 时分两种情况:第一种没有删除 PV 中的 Finalizer 属性时 PV 不会被删除 PVC 仍处于 Bound 状态;第二种删除了 PV 中的 Finalizer 属性时 PV 被强制删除导致 PVC 由 Bound 状态变为 Lost 状态

3、处于 Lost 状态的 PVC 再次与一个 PV 绑定后变为 Bound 状态

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

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

相关文章

PaLM-E: An Embodied Multimodal Language Model

发表时间&#xff1a;arXiv 6 Mar 2023 作者单位&#xff1a;Robotics at Google Motivation&#xff1a;大型语言模型已被证明可以执行复杂的任务。然而&#xff0c;在现实世界中启用一般推理&#xff0c;例如对于机器人问题&#xff0c;提出了落地的挑战。 解决方法&#…

探索全新AI编码代理框架:Agent Zero

引言 在科技的不断进步中&#xff0c;人工智能&#xff08;AI&#xff09;正越来越多地融入我们的日常生活。今天&#xff0c;我要为大家介绍一款全新的AI编码代理框架——Agent Zero。这款框架不仅可以自动化处理编码任务&#xff0c;还能操作文本、应用程序前端等&#xff0…

【微信小程序】页面导航和导航传参

什么是页面导航 小程序中实现页面导航的两种方式 1.声明式导航 (1). 导航到 tabBar 页面 (2). 导航到非 tabBar 页面 (3).后退导航 2.编程式导航 (1).导航到 tabBar 页面 示例代码如下&#xff1a; (2).导航到非 tabBar 页面 示例代码如下&#xff1a; (3).后退导航 示例…

WSL2Linux 子系统(十)

WSL 中启用图形界面 上一篇文章 《WSL2Linux 子系统(九)》 讲解详细讲 WSL&#xff08;Windows Subsystem for Linux&#xff09;解几种常见硬盘挂载方法。本篇讲述 WSL 显示画面的几种方法。WSL 本身不直接支持图形界面&#xff0c;在 WSL 环境中播放视频画面需要额外处理或者…

进程的执行和进程的结束

exec函数族&#xff1a; 作用&#xff1a;可以在一个程序中启动另外一个功能,用新的进程段替换当前进程的段. exec函数族用于替换当前进程的映像&#xff0c;允许程序在运行时加载并执行新的程序代码。 execl: l:list path:要执行的文件的路径 arg:要执行的文件的参数&a…

C#利用ffmpeg和opencv进行视频的解码播放

目录 说明 效果 项目 代码 下载 说明 利用周杰大佬的开源项目 Sdcb.FFmpeg 项目地址&#xff1a;https://github.com/sdcb/Sdcb.FFmpeg/ 效果 C#利用ffmpeg和opencv进行视频的解码播放 项目 代码 using OpenCvSharp; using Sdcb.FFmpeg.Codecs; using Sdcb.FFmpeg.F…

【SpringBoot】【autopoi】java生成word,基于模版生成(文本、图片、表格)

基于模版生成word 1、引入maven2、word模版编写3、java代码4、效果 AutoPoi的主要特点 参考文献 https://help.jeecg.com/autopoi/autopoi/prequel/test.html 1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以简单明了 1、…

【大模型从入门到精通17】openAI API 构建和评估大型语言模型(LLM)应用5

这里写目录标题 理论问题&#xff1a;实践问题&#xff1a;理论实践 理论问题&#xff1a; 1.描述评估LLM应用程序输出的重要性&#xff0c;并提及至少三个维度&#xff0c;这些输出应该在这几个维度上被评估。 2.解释在评估LLM应用程序时开发稳健的性能指标的作用&#xff0c…

uniapp多图上传uni.chooseImage上传照片uni.uploadFile,默认上传9张图

uniapp多图上传uni.chooseImage上传照片uni.uploadFile 代码示例&#xff1a; /**上传照片 多图*/getImage() {uni.chooseImage({count: 9, //默认9sizeType: [original, compressed], //可以指定是原图还是压缩图&#xff0c;默认二者都有sourceType: [album], //从相册选择/…

【论文理解】Pixel-level Extrinsic Calibration LiDAR and Camera

Pixel-level Extrinsic Self Calibration of High Resolution LiDAR and Camera in Targetless Environments 无目标环境中高分辨率激光雷达和相机的像素级外参估计 摘要 Our approach does not require checkerboards but can achieve pixel-level accuracy by aligning na…

数据结构8.13

作业&#xff1a;链栈&#xff0c;自己实现一遍&#xff0c;但是节点存储不是整数&#xff0c;存储学生信息&#xff08;年龄&#xff0c;分数&#xff0c;姓名&#xff09;三级引用。 1、建立学生信息结构体&#xff0c;将data改为学生信息结构体类型。 #include <myhead…

深度学习---------------卷积层

目录 从全连接到卷积分类猫和狗的图片重新考察全连接层原则1------平移不变性原则2------局部性 总结 卷积层二维交叉相关二维卷积层交叉相关 vs 卷积一维和三维交叉相关总结 图像卷积二维互相关运算实现二维卷积层图像中目标的边缘检测该部分总代码该部分总代码 问题 从全连接…

安装MySQL数据库【后端 8】

安装MySQL数据库 MySQL是世界上最流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;之一&#xff0c;广泛应用于Web应用程序开发中。无论你是初学者还是有一定经验的开发者&#xff0c;掌握MySQL的安装都是必不可少的技能。本文将指导你如何在不同的操作系统上安装…

在 SOCKS 和 HTTP 代理之间如何选择?

在 SOCKS 和 HTTP 代理之间进行选择需要彻底了解每种代理的工作原理以及它们传达的配置。只有这样&#xff0c;您才能轻松地在不同类型的代理之间进行选择。 本文概述了 HTTP 和 SOCKS 代理是什么、它们如何运作以及它们各自带来的好处。此外&#xff0c;我们将比较这两种代理类…

1、Unity【基础】3D数学

3D数学 文章目录 3D数学1、数学计算公共类Mathf1、Mathf和Math2、区别3、Mathf中的常用方法&#xff08;一般计算一次&#xff09;4、Mathf中的常用方法&#xff08;一般不停计算&#xff09;练习 A物体跟随B物体移动 2、三角函数1、角度和弧度2、三角函数3、反三角函数练习 物…

三、虚拟机安装CentOS 7

编写目的&#xff1a; 1.做个记录&#xff0c;防止参考的博客被删 2.做个基础的虚拟机镜像&#xff0c;无应用&#xff0c;固定ip&#xff0c;能联网即可。后面直接克隆一个镜像&#xff0c;安装Jenkins等 目录 一、下载CentOS镜像 二、vmware配置CentOS虚拟机 1.打开vmw…

MSF经典attack示范

免责声明:本文仅做分享... 目录 Nessus官网 指定攻击 自动在线攻击 nmap扫 查看扫到的服务 查看主机 离线攻击 Msfvenom 本地快速传递文件的方法-->py 哈希传递攻击 提权 后渗透阶段 1-收集操作系统和版本信息 2-主机名称&环境变量 3-用户账户信息 4-远…

Stable Diffusion绘画 | ControlNet应用-NormalMap(法线贴图)

NormalMap(法线贴图)&#xff0c;指的是一张只有红绿蓝RGB颜色的图片&#xff0c;通过指定的发法线算法&#xff0c;用RGB颜色相互混合搭配来表示物体的凹凸情况&#xff0c;常用于3D贴图模型使用。 整体配置如下&#xff1a; ControlNet 的法线控制可以把任何的图片转化为法线…

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接&#xff0c;安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…

书生浦语大模型全链路开源开放体系学习

书生浦语大模型的开源体系经过一年努力&#xff0c;已实现从数据收集到模型部署的全链路打通。课程介绍了书生浦语的最新进展&#xff0c;包括7B和20B模型的开源及其性能提升。新版本模型在推理能力和上下文处理上表现优异&#xff0c;支持超长上下文和复杂任务解决。开源工具涵…