研发工程师玩转Kubernetes——PVC使用Label和storage选择PV

news2024/9/24 15:27:00

在《研发工程师玩转Kubernetes——local型PV和PVC绑定过程中的状态变化》和《研发工程师玩转Kubernetes——使用local型PV在不同Pod上共享数据》中,我们介绍了指定VPC的spec.volumeName为PV名称来绑定它们的方法。本文将介绍PVC在创建时,系统自动选择绑定哪个PV。
在设计上,PV是系统管理员分配的,它用于隔绝具体是哪种介质。比如一些PV来源于谷歌云,一些PV来源于阿里云,还有一些PV来源于AWS。
在这里插入图片描述
使用者只要通过PVC向其申请使用即可。
在这里插入图片描述
申请时可以通过spec.volumeName指定特定名称PV,还可以使用spec.selector在一堆PV中选择符合条件的PV。

创建多个PV

我们分别使用下面三个配置创建storage为256K、512K和1M的PV。它们都有名字是volume,值是lb-default-storage-class-pv的label。

# default_storage_class_pv_256k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv-256k
  labels:
    volume: lb-default-storage-class-pv
spec:
  capacity:
    storage: 256Ki
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud
# default_storage_class_pv_512k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv-256k
  labels:
    volume: lb-default-storage-class-pv
spec:
  capacity:
    storage: 512Ki
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud
# default_storage_class_pv_1024k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv-256k
  labels:
    volume: lb-default-storage-class-pv
spec:
  capacity:
    storage: 1Mi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud

创建带选择功能的PVC

PVC申请的空间是600K,介于512K和1M。

# default_storage_class_pvc_600k.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-storage-class-pvc-600k
spec:
  resources:
    requests:
      storage: 600Ki
  accessModes:
    - ReadWriteOnce
  selector:
    matchLabels:
      volume: lb-default-storage-class-pv

创建之后,我们查看该PVC的信息。

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

可以看到,因为这三个PV的Label都符合PVC的选择器。但是由于256K和512K的PV都小于600K的要求,于是它只能选择最接近它的1M大小的PV。

不匹配的Label

我们创建一个Label不匹配的PVC清单,并创建它。

# default_storage_class_pvc_100k_not_match.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-storage-class-pvc-100k-not-match
spec:
  resources:
    requests:
      storage: 100Ki
  accessModes:
    - ReadWriteOnce
  selector:
    matchLabels:
      volume: lb-default-storage-class-pv-not-match

可以看到它一直处于Pending状态,因为没有符合Label要求的PV。

kubectl describe persistentvolumeclaims default-storage-class-pvc-100k-not-match
Name:          default-storage-class-pvc-100k-not-match
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Used By:       <none>
Events:
  Type    Reason         Age               From                         Message
  ----    ------         ----              ----                         -------
  Normal  FailedBinding  5s (x2 over 11s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

无法满足大小的PVC

之前创建的600K大小的default-storage-class-pvc-600k已经把default-storage-class-pv-256k占用了,只剩下512K和256K大小的PV。
我们再创建一个不满足剩余PV大小的PVC。

# default_storage_class_pvc_700k.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-storage-class-pvc-700k
spec:
  resources:
    requests:
      storage: 700Ki
  accessModes:
    - ReadWriteOnce
  selector:
    matchLabels:
      volume: lb-default-storage-class-pv

观察其状态,可以发现其也处于Pending状态。

kubectl describe persistentvolumeclaims default-storage-class-pvc-700k 
Name:          default-storage-class-pvc-700k
Namespace:     default
StorageClass:  
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Used By:       <none>
Events:
  Type    Reason         Age              From                         Message
  ----    ------         ----             ----                         -------
  Normal  FailedBinding  8s (x2 over 9s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

延迟绑定

对于处于Pending状态的PVC,只要我们创建符合条件的PV,系统就会自动将其绑定。
创建下面的PV,它大小是2M,可以满足上面700K请求空间的PVC。

# default_storage_class_pv_2m.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv-2048k
  labels:
    volume: lb-default-storage-class-pv
spec:
  capacity:
    storage: 2Mi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud

然后再观察之前处于Pending状态的PVC状态。可以看到其变成了Bound状态,且其绑定的PV就是刚创建的符合其条件的default-storage-class-pv-2048k。

kubectl describe persistentvolumeclaims default-storage-class-pvc-700k
Name:          default-storage-class-pvc-700k
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        default-storage-class-pv-2048k
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      2Mi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       <none>
Events:
  Type    Reason         Age                     From                         Message
  ----    ------         ----                    ----                         -------
  Normal  FailedBinding  2m36s (x26 over 8m37s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

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

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

相关文章

SpringBoot 简单入门部署

1. 环境要求 Java 8 (配置环境变量)Maven 3.3idea 2019.1.2 及以上 1.1 maven 配置 <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/n…

中国IT统一运维ITSM软件市场,云智慧再次稳居榜首!

日前&#xff0c;国际数据公司IDC发布《2022年中国IT统一运维软件市场总结》报告&#xff0c;报告显示&#xff0c;云智慧2022年全年继续保持ITSM市场第一。 图1&#xff1a;2022年中国IT统一运维ITSM软件市场&#xff0c;云智慧再次夺冠 根据IDC数据显示&#xff0c;2022年中…

重发布选路最佳实验

题目 IP地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; 双点重发布 R2&#xff1a; rip 1 version 2 network 12.0.0.0 network 2.0.0.0 import-route ospf 1 ospf 1 import-route rip 1 route-policy R2 area 0.0.0.0 network 23.1.1.0 0.0…

实现链式队列

dl.h dl.c main.c 结果

14-矩阵相乘及其运算法则

矩阵与向量的乘法 在这一篇文章中我们就将基于上一篇重新审视矩阵的这个视点来理解矩阵的乘法&#xff0c;那么在这一篇&#xff0c;我们主要来看一下矩阵和向量的乘法。这里这个线性方程组是上一小节给大家举的模拟的一个非常简单的小型经济系统的例子&#xff0c;我们可以把…

DAY04_SpringMVC—SpringMVC简介PostMan和ApiFox工具使用SpringMVC请求与响应REST风格

目录 一 SpringMVC简介1 SpringMVC概述问题导入1.1 SpringMVC概述 2 入门案例问题导入2.0 回顾Servlet技术开发web程序流程2.1 使用SpringMVC技术开发web程序流程2.2 代码实现【第一步】创建web工程&#xff08;Maven结构&#xff09;【第二步】设置tomcat服务器&#xff0c;加…

【C++从0到王者】第十九站:手把手教你写一个反向迭代器

文章目录 一、反向迭代器与正向迭代器的区别二、适配器模式来实现反向迭代器三、手撕反向迭代器 一、反向迭代器与正向迭代器的区别 反向迭代器与正向迭代器的解引用都是一样的&#xff0c;都是可以直接找到该位置里面存储的值。不同的是他们之间的运算规则不同&#xff0c;反…

剑指 Offer 61. 扑克牌中的顺子

题目描述 从若干副扑克牌中随机抽 5 张牌&#xff0c;判断是不是一个顺子&#xff0c;即这5张牌是不是连续的。2&#xff5e;10为数字本身&#xff0c;A为1&#xff0c;J为11&#xff0c;Q为12&#xff0c;K为13&#xff0c;而大、小王为 0 &#xff0c;可以看成任意数字。A 不…

从零开始:构建您自己的直播带货软件开发计划

1. 确定目标和需求 在开始开发之前&#xff0c;您需要明确您的目标和需求。考虑以下问题&#xff1a; 您的直播带货软件是面向哪个市场和用户群体&#xff1f; 您的软件需要支持哪些主要功能&#xff0c;如实时视频直播、商品展示、购买支付、实时互动等&#xff1f; 您是否需…

无人驾驶实战-第十二课(强化学习自动驾驶系统)(完)

在七月算法上报了《无人驾驶实战》课程&#xff0c;老师讲的真好。好记性不如烂笔头&#xff0c;记录一下学习内容。 课程入口&#xff0c;感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 强化学习&#xff…

无刷电机控制

无刷电机控制 特点: 线圈不动&#xff0c;磁极转动电子换向方式消除了有刷电机的缺点单位质量/功率转矩大驱动较复杂

(十六)大数据实战——安装使用mysql版的hive服务

前言 hive默认使用的是内嵌据库derby&#xff0c;Derby 是一个嵌入式数据库&#xff0c;可以轻松地以库的形式集成到应用程序中。它不需要独立的服务器进程&#xff0c;所有的数据存储在应用程序所在的文件系统中。为了支持hive服务更方便的使用&#xff0c;我们使用mysql数据…

湘大 XTU OJ 1223 Repeat One 题解:最后面进行取模转变成一边取模一边计算

一、链接 Repeat One 二、题目 题目描述 求由最小的一个N&#xff0c;N个数码1组成的数能被M整除&#xff1f; 比如M3时&#xff0c;111能被3整除。M2时&#xff0c;则不存在这样的N。 输入 第一行是一个整数K(K≤1,000),表示样例的个数。 以后每行一个整数M(1≤M≤1,000,000…

BigDecimal使用总结

BigDecimal Java在java.math包中提供的API类BigDecimal&#xff0c;用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 在实际应用中&#xff0c;需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算&a…

docker案例复现

$uri导致的CRLF注入漏洞 前期准备dockerdocker compose 漏洞配置 前期准备 docker 要完成这样的测试&#xff0c;需要我们有一定的环境&#xff0c;也就是需要大家去安装docker 更新系统软件包&#xff1a; sudo yum update 安装 Docker 的依赖软件包&#xff1a; sudo yum …

WEB集群——LVS-DR 群集、nginx负载均衡

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡。 一、 LVS-DR 群集 1、LVS-DR工作原理 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09; 名称缩写说明 虚拟IP地址(Virtual IP Address) VIPDirector用于向客户端计算机提供服务的IP地址真实…

TSINGSEE青犀视频安防监控视频平台EasyCVR设备在线,视频无法播放的原因排查

可支持国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等多种协议接入的安防监控视频平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、…

R语言4_安装BayesSpace

环境Ubuntu22/20, R4.1 你可能会报错说你的R语言版本没有这个库&#xff0c;但其实不然。这是一个在Bioconductor上的库。 同时我也碰到了这个问题&#xff0c;ERROR: configuration failed for package systemfonts’等诸多类似问题&#xff0c;下面的方法可以一并解决。 第…

docker小白第二天

centos上安装docker docker官网&#xff0c;docker官网&#xff0c;找到下图中的doc文档。 进入如下页面 选中manuals&#xff0c;安装docker引擎。 最终centos下的docker安装文档链接&#xff1a;安装文档链接. 具体安装步骤&#xff1a; 1、打开Centos&#xff0c;输入命…

设计模式之Bridge模式的C++实现

目录 1、Bridge模式的提出 2、Bridge模式的定义 3、Bridge模式总结 4、需求描述 5、多继承方式实现 6、使用Bridge设计模式实现 1、Bridge模式的提出 在软件功能模块设计中&#xff0c;如果类的实现功能划分不清晰&#xff0c;使得继承得到的子类往往是随着需求的变化&am…