首页 > 其他分享 >【K8s】专题十二(3):Kubernetes 存储之 PersistentVolumeClaim

【K8s】专题十二(3):Kubernetes 存储之 PersistentVolumeClaim

时间:2024-08-26 10:53:13浏览次数:13  
标签:PV Kubernetes 对象 demo 绑定 PVC K8s PersistentVolumeClaim

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

Linux 专栏 | Docker 专栏 | Kubernetes 专栏


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)


目录

一、基本介绍

二、工作原理

三、资源清单(示例)

四、相关说明

1、状态类型(Status)

2、可能情形

3、Pod 挂载


一、基本介绍

在 Kubernetes 中,PersistentVolumeClaim(持久化卷声明,PVC)是一种与存储相关的资源对象,可以定义申请容量、访问模式等内容。

PVC 与 PV 共同构成了 Kubernetes 中持久存储的基础,它们之间的关系是请求与分配的关系:

  • PV 代表集群中的实际存储资源,可以是任何类型(如 NFS、iSCSI、云存储等), 包含了存储的具体实现细节,如存储位置、容量大小、访问模式等
  • PVC 是对 PV 的请求,包含了用户预期获得的存储资源的详细规格


二、工作原理
  • 定义对象:在 PVC 对象的资源清单中可以指定其存储类、访问模式、存储容量等配置信息
  • 创建对象:Kubernetes 按照管理员预先定义好的资源清单创建 PVC 对象
  • 绑定:当一个 PVC 对象创建后,静态模式下 Kubernetes 会寻找一个匹配的 PV 进行绑定;在动态模式下 StorageClass 会根据 PVC 的申请动态创建 PV 对象。这个过程可以是立即的,也可以是延迟的
  • 使用:PVC 对象与 PV 对象完成绑定后,Pod 就可以通过挂载 PVC 来访问持久化存储。Pod 的资源清单中会包含对 PVC 对象的引用,Kubernetes 负责将与 PVC 对象绑定的 PV 对象挂载到 Pod 的容器中
  • 销毁:当 PVC 对象被销毁时,Kubernetes 会根据 PV 的回收策略来处理 PV 对象


三、资源清单(示例)
# 静态存储供应模式
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demo-pvc
spec:
  storageClass: ""      # 确保 PVC 绑定到由管理员预先创建的 PV,而不是由 SC 动态创建的新 PV
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

------------------------------------------------------------------------------
# 动态存储供应模式
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demo-pvc
spec:
  storageClass: "demo-sc"    # 确保 PVC 绑定到由 SC 动态创建的新 PV
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi


四、相关说明
1、状态类型(Status)

PVC 对象创建后,通常会存在以下几种状态:

  • Pending:PVC 对象已被创建,但尚未绑定 PV
  • Bound:PVC 对象已成功绑定 PV
  • Lost:PVC 对象绑定的 PV 已不可用或丢失
  • Failed:PVC 对象无法满足其请求

新建 PVC 对象后,Kubernetes 会根据资源清单的声明查找处于 Available 状态的 PV 对象

  • 如果没找到, PVC 对象状态就会一直处于 Pending
  • 如果能找到,会自动将 PV 对象和 PVC 对象进行绑定,对象状态就会变为 Bound

2、可能情形
  • 如果 PVC 对象声明的容量小于 PV 对象声明的容量,PVC 对象和 PV 对象可以绑定,且容量为 PV 对象声明的容量值
  • 如果 PVC 对象声明的容量大于 PV 对象声明的容量,PVC 对象和 PV 对象无法绑定
  • 如果 PVC 对象和 PV 对象声明的 accessModes 不一致,PVC 对象和 PV 对象无法绑定

3、Pod 挂载
  • Pod 挂载 PVC 时要使用相对路径,避免使用 “ / ” 开头
  • 当多个 Pod 挂载同一个 PVC 时,可以在数据目录下设置子目录(subPath)以避免冲突
  • 当单个 Pod 要在同一个 PVC 下使用 subPath 属性时,name 需要保持一致,否则会出现报错:unmounted volumes=[data], unattached volumes=[data logs default-token-4ss5k]: timed out waiting for the condition
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo-deployment
  template:
    metadata:
      labels:
        app: demo-deployment
    spec:
      containers:
      - name: demo-container
        image: demo-image:latest
        ports:
        - containerPort: 80
...
        volumeMounts:
        - name: pvc                  # 错误示范:data
          mountPath: /data
          subPath: data
        - name: pvc                  # 错误示范:logs
          mountPath: /logs
          subPath: logs
      volumes:
      - name: pvc               # 错误示范:volumes 有两个元素,分别是 data 和 logs
        persistentVolumeClaim:
          claimName: demo-pvc
...

标签:PV,Kubernetes,对象,demo,绑定,PVC,K8s,PersistentVolumeClaim
From: https://blog.csdn.net/2401_82795112/article/details/141263276

相关文章

  • k8s~ServiceAccount_ClusterRole_ClusterRoleBinding
    apisix的k8s服务发现配置命名空间权限是基于KubernetesRBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。KubernetesRBACAPI定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明如下:Rol......
  • 06--kubernetes.pod管理与投射数据卷
    前言:上一章记录了部署k8s常用的两个方式,这一章就简单一些,整理一下k8s资源对象的配置和管理命令。1、集群状态检查前天搭建的环境,然后关机了两天今天开启后第一时间需要检查集群环境是否正常[root@k8s-master1~]#kubectlgetnodeNAMESTATUSROLESAGE......
  • Kubernetes 与 dockershim
    dockershim是什么?https://v1-27.docs.kubernetes.io/zh-cn/blog/2022/05/03/dockershim-historical-context/在Kubernetes的早期,只支持一个ContainerruntimesDockerEngine,当时并没有太多其他选择,而Docker是使用容器的主要工具,所以这不是一个有争议的选择。之后kuberne......
  • k8s中coredns访问连接拒绝问题解决
    问题现象1、节点访问coredns连接拒绝2、内部pod无法正常进行解析问题解决思路检查CoreDNSPod状态是否正常[root@k8s-master01~]#kubectlgetpods-nkube-system-lk8s-app=kube-dnsNAMEREADYSTATUSRESTARTSAGEcoredns-7b8d6fc5......
  • Kubernetes前提条件准备
    环境条件升级内核修改内核参数配置cgroup安装CRI内核参数配置网络流量转发cat<<EOF|sudotee/etc/modules-load.d/k8s.confoverlaybr_netfilterEOF 启用模块modprobeoverlaymodprobebr_netfilter 调整内核参数net.ipv4.ip_forward......
  • Kubernetes大规模集群
    Kubernetes资源限制Kubernetes单个集群支持的最大节点数为5,000。Kubernetes标准的配置:每个节点的Pod数量不超过110节点数不超过5,000Pod总数不超过150,000容器总数不超过300,000你可以通过添加或删除节点来扩展集群。集群扩缩的方式取决于集群的部署方式以下集......
  • Kubernetes 从0到1
    Kubernetes建设考虑点部署一套Kubernetes集群需要考虑多个方面,包括应用层面、中间件、数据库、流量入口等。以下是一些关键方面:基础设施:选择适当的云提供商或物理硬件来部署Kubernetes集群。确保网络和存储资源的可用性和性能。考虑集群的地理位置和可用性区域。以上综合......
  • Kubernetes v1.28.2 & Calico eBPF
    集群初始化简略步骤初始化集群kubeadminit\--skip-phases=addon/kube-proxy\--apiserver-cert-extra-sans=35.229.220.159,127.0.0.1,10.0.0.3,10.0.0.4,10.0.0.5,10.254.0.2\--control-plane-endpoint=apiserver.unlimit.club\--apiserver-advertis......
  • 修改kubeadm证书过期时间及更新k8s集群证书
    一、为什么要修改kubeadm证书时间Kubernetes官方提供了kubeadm工具安装kubernetes集群,使用这个工具安装集群非常便捷,使部署和升级Kubernetes变得简单起来。不过该工具有点坑的就是,使用其安装的kubernetes集群的大部分证书有效期只有一年,需要在证书过期前,使用更新操作......
  • 初识混沌工程(Chaos Engineering): k8s install chaosblade
    混沌工程文档:https://chaosblade.io/docs/helm:https://github.com/helm/helm/releaseschaosblade:https://github.com/chaosblade-io/chaosblade/releaseschaosblade-box:https://github.com/chaosblade-io/chaosblade-box/releasesmetrics-server:https://gith......