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

研发工程师玩转Kubernetes——local型PV和PVC绑定过程中的状态变化

PV全称是PersistentVolume,即持久卷,是由管理员事先准备好的资源。它可以是本地磁盘,也可以是网络磁盘。
PVC全称是PersistentVolumeClaim,即持久卷申领。它表示卷的使用者,对PV的申请。即我们可以认为,PV是整体,PVC是申请其中的部分。

local型PV

local类型的持久卷分配的是本地磁盘空间。K8S要求该类型的卷在配置时指定其节点亲和性(nodeAffinity),即我们优先(只能)在哪些节点上分配空间。

# default_storage_class_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: default-storage-class-pv
spec:capacity:storage: 100KivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainlocal:path: /tmpnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ubuntud

accessModes是卷的访问模式。有如下选项:

  1. ReadWriteOnce:读写权限,只能被一个Node挂载。
  2. ReadOnlyMany:只读权限,可以被多个Node挂载。
  3. ReadWriteMany:读写权限,可以被多个Node挂载。

由于上例是本地磁盘,所以只能是ReadWriteOnce,因为它只能被一个Node挂载。
persistentVolumeReclaimPolicy选择Retain,表示资源回收需要手工进行。
local和nodeAffinity表示我们将在ubuntud的/tmp目录下分配卷空间。

静态绑定的PVC

# default_storage_class_pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: default-storage-class-pvc
spec:resources:requests:storage: 10KivolumeName: default-storage-class-pvaccessModes:- ReadWriteOnce

volumeName指定了PV的名称。这样PVC就和PV进行了绑定。

绑定过程中状态的变化

我们创建上述资源PV。

kubectl create -f default_storage_class_pv.yaml 

然后观察其状态:

kubectl describe persistentvolume default-storage-class-pv
Name:              default-storage-class-pv
Labels:            <none>
Annotations:       <none>
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      
Status:            Available
Claim:             
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          100Ki
Node Affinity:     Required Terms:  Term 0:        kubernetes.io/hostname in [ubuntud]
Message:           
Source:Type:  LocalVolume (a persistent volume backed by local storage on a node)Path:  /tmp
Events:    <none>

可以看到PV处于Available状态。
然后我们创建绑定其的PVC:

kubectl create -f default_storage_class_pvc.yaml 

过段时间后我们查看PVC状态。

kubectl describe persistentvolumeclaims default-storage-class-pvc
Name:          default-storage-class-pvc
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        default-storage-class-pv
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      100Ki
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       <none>
Events:        <none>

可以看到PVC的状态是Bound(已绑定)。
最后我们看下PV的状态,它的状态也变成了Bound(已绑定)。至此,该PV和PVC已经绑定了。

kubectl describe persistentvolume default-storage-class-pv
Name:              default-storage-class-pv
Labels:            <none>
Annotations:       pv.kubernetes.io/bound-by-controller: yes
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      
Status:            Bound
Claim:             default/default-storage-class-pvc
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          100Ki
Node Affinity:     Required Terms:  Term 0:        kubernetes.io/hostname in [ubuntud]
Message:           
Source:Type:  LocalVolume (a persistent volume backed by local storage on a node)Path:  /tmp
Events:    <none>

已经绑定的PV不可以再绑定PVC。我们创建一个新的PVC,进行测试

# default_storage_class_pvc_invalid.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: default-storage-class-pvc-invalid
spec:resources:requests:storage: 10KivolumeName: default-storage-class-pvaccessModes:- ReadWriteOnce
 kubectl create -f default_storage_class_pvc_invalid.yaml

persistentvolumeclaim/default-storage-class-pvc-invalid created

显示创建成功,但是实际状态是Pending。原因是default-storage-class-pv已经绑定到其他PVC。

kubectl describe persistentvolumeclaims default-storage-class-pvc-invalid 
Name:          default-storage-class-pvc-invalid
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        default-storage-class-pv
Labels:        <none>
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      0
Access Modes:  
VolumeMode:    Filesystem
Used By:       <none>
Events:Type     Reason         Age               From                         Message----     ------         ----              ----                         -------Warning  FailedBinding  8s (x2 over 22s)  persistentvolume-controller  volume "default-storage-class-pv" already bound to a different claim.

删除过程中的状态变化

我们先删掉上面创建的PVC

kubectl delete persistentvolumeclaims default-storage-class-pvc-invalid
kubectl delete persistentvolumeclaims default-storage-class-pvc

然后观察PV的变化

kubectl describe persistentvolume default-storage-class-pv 
Name:              default-storage-class-pv
Labels:            <none>
Annotations:       pv.kubernetes.io/bound-by-controller: yes
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      
Status:            Released
Claim:             default/default-storage-class-pvc
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          100Ki
Node Affinity:     Required Terms:  Term 0:        kubernetes.io/hostname in [ubuntud]
Message:           
Source:Type:  LocalVolume (a persistent volume backed by local storage on a node)Path:  /tmp
Events:    <none>

此时PV因为绑定的PVC被删除,而其persistentVolumeReclaimPolicy选择了Retain,资源没有被回收,而变成了Released状态。卷的状态如下:

  • Available(可用)-- 卷是一个空闲资源,尚未绑定到任何申领;
  • Bound(已绑定)-- 该卷已经绑定到某申领;
  • Released(已释放)-- 所绑定的申领已被删除,但是资源尚未被集群回收;
  • Failed(失败)-- 卷的自动回收操作失败。

这个时候我们再创建上述PVC,还是会处于pending状态。因为PV没有处于Available状态。

kubectl create -f default_storage_class_pvc.yaml

persistentvolumeclaim/default-storage-class-pvc created

kubectl describe persistentvolumeclaims default-storage-class-pvc
Name:          default-storage-class-pvc
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        default-storage-class-pv
Labels:        <none>
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      0
Access Modes:  
VolumeMode:    Filesystem
Used By:       <none>
Events:Type     Reason         Age   From                         Message----     ------         ----  ----                         -------Warning  FailedBinding  8s    persistentvolume-controller  volume "default-storage-class-pv" already bound to a different claim.

再绑定Released状态的PV

使用下面指令,删除描述绑定信息的claimRef段。

kubectl edit persistentvolume default-storage-class-pv
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: PersistentVolume
metadata:annotations:pv.kubernetes.io/bound-by-controller: "yes"creationTimestamp: "2023-08-09T09:26:04Z"finalizers:- kubernetes.io/pv-protectionname: default-storage-class-pvresourceVersion: "285190"uid: 09782be4-09b9-4116-9b44-8dbb75f08dbf
spec:accessModes:- ReadWriteOncecapacity:storage: 100KiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: default-storage-class-pvcnamespace: defaultresourceVersion: "285153"uid: c55398f4-77cd-4627-8a11-57b0e049c594local:path: /tmpnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ubuntudpersistentVolumeReclaimPolicy: RetainvolumeMode: Filesystem
status:phase: Released

保存完后过一会儿,PV就会变成Available状态。而之前处于Pending状态的PVC也会因为PV的状态变化从Pending变成Bound状态,PV也会进而变成Bound状态

kubectl describe persistentvolume default-storage-class-pv 
Name:              default-storage-class-pv
Labels:            <none>
Annotations:       pv.kubernetes.io/bound-by-controller: yes
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      
Status:            Bound
Claim:             default/default-storage-class-pvc
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          100Ki
Node Affinity:     Required Terms:  Term 0:        kubernetes.io/hostname in [ubuntud]
Message:           
Source:Type:  LocalVolume (a persistent volume backed by local storage on a node)Path:  /tmp
Events:    <none>
kubectl describe persistentvolumeclaims default-storage-class-pvc
Name:          default-storage-class-pvc
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        default-storage-class-pv
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      100Ki
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       <none>
Events:        <none>

参考资料

  • https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/
  • https://cloud.tencent.com/document/product/457/47014

相关文章:

研发工程师玩转Kubernetes——local型PV和PVC绑定过程中的状态变化

PV全称是PersistentVolume&#xff0c;即持久卷&#xff0c;是由管理员事先准备好的资源。它可以是本地磁盘&#xff0c;也可以是网络磁盘。 PVC全称是PersistentVolumeClaim&#xff0c;即持久卷申领。它表示卷的使用者&#xff0c;对PV的申请。即我们可以认为&#xff0c;PV是…...

HTTP——十一、Web的攻击技术

HTTP 一、针对Web的攻击技术1、HTTP 不具备必要的安全功能2、在客户端即可篡改请求3、针对Web应用的攻击模式 二、因输出值转义不完全引发的安全漏洞1、跨站脚本攻击2、SQL 注入攻击3、OS命令注入攻击4、HTTP首部注入攻击5、邮件首部注入攻击6、目录遍历攻击7、远程文件包含漏洞…...

Python-OpenCV中的图像处理-图像金字塔

Python-OpenCV中的图像处理-图像金字塔 图像金字塔高斯金字塔拉普拉斯金字塔 金字塔图像融合 图像金字塔 同一图像的不同分辨率的子图集合&#xff0c;如果把最大的图像放在底部&#xff0c;最小的放在顶部&#xff0c;看起来像一座金字塔&#xff0c;故而得名图像金字塔。cv2…...

ArcGIS、ENVI、InVEST、FRAGSTATS技术教程

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注…...

Unity-Linux部署WebGL项目MIME类型添加

在以往的文章中有提到过使用IIS部署WebGL添加MIME类型使WebGL项目在浏览器中能够正常加载&#xff0c;那么如果咱们做的是商业项目&#xff0c;往往是需要部署在学校或者云服务器上面的&#xff0c;大部分情况下如果项目有接口或者后台管理系统&#xff0c;后台基本都会使用Lin…...

MySQL:表的约束和基本查询

表的约束 表的约束——为了让插入的数据符合预期。 表的约束很多&#xff0c;这里主要介绍如下几个&#xff1a; null/not null,default, comment, zerofill&#xff0c;primary key&#xff0c;auto_increment&#xff0c;unique key 。 空属性 两个值&#xff1a;null&am…...

mysql统计近7天数据量,,按时间戳分组

可以使用以下 SQL 语句来统计近7天的数据量&#xff0c;并按时间戳分组。如果某一天没有数据&#xff0c;则将其填充为0。 SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), %Y-%m-%d) AS date,COUNT(*) AS count FROM table_name WHERE timestamp > UNIX_TIMESTAMP(DATE_SUB…...

无涯教程-Perl - endnetent函数

描述 此功能告诉系统您不再希望使用getnetent从网络列表中读取条目。 语法 以下是此函数的简单语法- endnetent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perluse Socket;while ( ($name, $aliases, $addrtype, $net) getnetent() )…...

Selenium的xpath高级写法-实用篇

系列文章目录 提示&#xff1a;阅读本章之前&#xff0c;请先阅读目录 文章目录 系列文章目录前言获取父级获取前一个兄弟级获取后一个兄弟级获取内容包含某些内容获取内容是空 前言 获取父级 //div[text()‘我是子级’]/parent::div[text()‘我是父级’] 获取前一个兄弟级 //d…...

阿里云官方关于数据安全保护的声明

“阿里云监控用户的数据流量&#xff1f;”“真的假的&#xff1f;”随着近日早晨 朱峰肥鹅旅行 对阿里云的一条朋友圈截图传遍了整个IT圈。 对于网络上的各种传播&#xff0c;以下是阿里云的官方答复&#xff0c;原文如下&#xff1a; 关于数据安全保护的声明 今天有客户反映…...

【神经网络手写数字识别-最全源码(pytorch)】

Torch安装的方法 学习方法 1.边用边学&#xff0c;torch只是一个工具&#xff0c;真正用&#xff0c;查的过程才是学习的过程2.直接就上案例就行&#xff0c;先来跑&#xff0c;遇到什么来解决什么 Mnist分类任务&#xff1a; 网络基本构建与训练方法&#xff0c;常用函数解析…...

React、Vue和Angular的优缺点

React React 是一个用于构建用户界面的 JAVASCRIPT 库。React 主要用于构建 UI&#xff0c;很多人认为 React 是 MVC 中的 V&#xff08;视图&#xff09;。React 起源于 Facebook 的内部项目&#xff0c;用来架设 Instagram 的网站&#xff0c;并于 2013 年 5 月开源。React …...

ArcGIS Pro根据不同条件显示不同标注

在某些情况下&#xff0c;我们需要根据不同的条件在地图上进行标注&#xff0c;比如我们想要在地图上显示广东省人口从2005年到2010年的变化情况&#xff0c;可以使用ArcGIS Pro的标注类功能实现&#xff0c;这里为大家介绍一下制作方法&#xff0c;希望能对你有所帮助。 标注分…...

DynamicsCRM专栏导览

不知不觉,专栏已经有5个订阅了。很高兴,自己的付出有了回报。很感谢大家的信任。 大家的订阅给了我很好的正反馈,也让我有了更强的动力,更大的责任感,去把这个专栏做好。 于是就有了这篇导览。这篇导览是我根据过往的开发经验总结出来的一个学习的框架。有些部分可能还没…...

Vue自定义指令使用

本篇文章讲述使用Vue自定义指令&#xff0c;并在项目中完成相应功能。 在平常Vue脚手架项目中&#xff0c;使用到 自定义指令较少&#xff0c;一般都是使用的自带指令&#xff0c;比如 v-show 、v-if 、 v-for 、 v-bind 之类的。这些已经能够满足大多数项目使用。更多的可能也…...

python爬虫之scrapy框架介绍

一、Scrapy框架简介 Scrapy 是一个开源的 Python 库和框架&#xff0c;用于从网站上提取数据。它为自从网站爬取数据而设计&#xff0c;也可以用于数据挖掘和信息处理。Scrapy 可以从互联网上自动爬取数据&#xff0c;并将其存储在本地或在 Internet 上进行处理。Scrapy 的目标…...

winform中嵌入cefsharp, 并使用selenium控制

正常说&#xff0c; 需要安装的包 下面是所有的包 全部代码 using OpenQA.Selenium.Chrome; using OpenQA.Selenium; using System; using System.Windows.Forms; using CefSharp.WinForms; using CefSharp;namespace WindowsFormsApp2 {public partial class Form1 : Form{//…...

【leetcode】349. 两个数组的交集(easy)

给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 思路&#xff1a; 先遍历nums1将其元素不重复地添加到哈希表a中&#xff1b;建立哈希表dup用于存储b和a重复的元素&#xff1b;遍历nums2…...

leetcode 2616. 最小化数对的最大差值

在数组nums中找到p个数对&#xff0c;使差值绝对值的和最小。 思路&#xff1a; 最小差值应该是数值相近的一对数之间产生&#xff0c;让数值相近的数字尽量靠在一起方便计算&#xff0c;所以需要排序。 这里不去直接考虑一对对的数字&#xff0c;而是直接考虑差值的取值。 …...

npm install 安装慢的问题处理

原因 npm install 默认使用的安装镜像时国外的镜像&#xff0c;国内使用会受到网络的限制。 解决方案 更换网络更换npm的安装镜像为国内&#xff0c;比如&#xff1a; npm config set registry https://registry.npm.taobao.org...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...