kubernetes核心技术之PV与PVC知识总结

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: kubernetes核心技术之PV与PVC知识总结

基本概念

管理存储是管理计算的一个明显问题。 该 PersistentVolume 子系统为用户和管理员提供了一个 API, 用于抽象如何根据消费方式提供存储的详细信息。 为此, 我们引入了两个新的API 资源: PersistentVolumePersistentVolumeClaim

PersistentVolume(PV) 是集群中由管理员配置的一段网络存储。 它是集群中的资源, 就像节点是集群资源一样。 PV 是容量插件, 如 Volumes, 但其生命周期独立于使用 PV 的任何单个 pod。 此 API 对象捕获存储实现的详细信息, 包括 NFSiSCSI或特定于云提供程序的存储系统。

PersistentVolumeClaim(PVC) 是由用户进行存储的请求。 它类似于 podPod消耗节点资源, PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源(CPU 和内存) 。 声明可以请求特定的大小和访问模式(例如, 可以一次读/写或多次只读) 。
   虽然 PersistentVolumeClaims 允许用户使用抽象存储资源, 但是 PersistentVolumes 对于不同的问题, 用户通常需要具有不同属性(例如性能) 。 群集管理员需要能够提供各种PersistentVolumes 不同的方式, 而不仅仅是大小和访问模式, 而不会让用户了解这些卷的实现方式。 对于这些需求, 有 StorageClass资源。StorageClass 为管理员提供了一种描述他们提供的存储的“类” 的方法。 不同的类可能映射到服务质量级别, 或备份策略, 或者由群集管理员确定的任意策略。 Kubernetes 本身对于什么类别代表是不言而喻的。 这个概念有时在其他存储系统中称为“配置文件” 。PVC PV 是一一对应的。

生命周期

PV 是群集中的资源。 PVC 是对这些资源的请求, 并且还充当对资源的检查。 PV PVC 之间的相互作用遵循以下生命周期:Provisioning ——-> Binding ——–>Using——>Releasing——>Recycling

供应准备 Provisioning---通过集群外的存储系统或者云平台来提供存储持久化支持。

  • 静态提供 Static: 集群管理员创建多个 PV。 它们携带可供集群用户使用的真实存储的详细信息。 它们存在于 Kubernetes API 中, 可用于消费。
  • 动态提供 Dynamic: 当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim时, 集群可能会尝试为 PVC 动态配置卷。 此配置基于 StorageClassesPVC 必须请求一个类, 并且管理员必须已创建并配置该类才能进行动态配置。 要求该类的声明有效地为自己禁用动态配置

绑定 Binding---用户创建 pvc并指定需要的资源和访问模式。 在找到可用 pv之前, pvc会保持未绑定状态。
      使用 Using---用户可在 pod 中像 volume 一样使用 pvc

释放 Releasing---用户删除 pvc来回收存储资源, pv将变成“released” 状态。 由于还保留着之前的数据, 这些数据需要根据不同的策略来处理, 否则这些存储资源无法被其他pvc使用。

回收 Recycling---pv 可以设置三种回收策略: 保留(Retain) , 回收(Recycle) 和删除(Delete) 。

  • 保留策略: 允许人工处理保留的数据。
  • 删除策略: 将删除 pv 和外部关联的存储资源, 需要插件支持。
  • 回收策略: 将执行清除操作, 之后可以被新的 pvc 使用, 需要插件支持

PV卷阶段状态

  • Available ---- 资源尚未被claim使用
  • Bound ----卷已经被绑定到claim了。
  • Released -- claim 被删除, 卷处于释放状态, 但未被集群回收。
  • Failed – 卷自动回收失败

演示:创建PV

第一步:编写 yaml 文件, 并创建 pv

创建 5 个 pv, 存储大小各不相同, 是否可读也不相同

apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv001
    labels:
      name: pv001
spec:
    capacity:
      storage: 2Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv001
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv002
    labels:
      name: pv002
spec:
    capacity:
      storage: 5Gi
    accessModes:
      - ReadWriteOnce
    nfs:
      path: /nfs/pv002
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv003
    labels:
      name: pv003
spec:
    capacity:
      storage: 20Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv003
      server: 10.91.74.201
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv004
    labels:
      name: pv004
spec:
    capacity:
      storage: 10Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv004
      server: 10.91.74.201
---
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv005
    labels:
      name: pv005
spec:
    capacity:
      storage: 15Gi
    accessModes:
      - ReadWriteOnce
      - ReadWriteMany
    nfs:
      path: /nfs/pv005
      server: 10.91.74.201

第二步:执行创建命令

[root@master1 pv]# kubectl apply  -f pv_test.yaml
persistentvolume/pv001 created
persistentvolume/pv002 created
persistentvolume/pv003 created
persistentvolume/pv004 created
persistentvolume/pv005 created

第三步:查询验证

[root@master1 pv]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   2Gi        RWO,RWX        Retain           Available                                   7s
pv002   5Gi        RWO            Retain           Available                                   7s
pv003   20Gi       RWO,RWX        Retain           Available                                   7s
pv004   10Gi       RWO,RWX        Retain           Available                                   7s
pv005   15Gi       RWO,RWX        Retain           Available                                   7s

演示:创建PVC,绑定PV

第一步:编写yaml文件,并创建PVC。创建一个pvc, 需要6G存储; 所以不会匹配pv001、pv002、pv003 。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: mypvc
    labels:
      name: pv001
spec:
    accessModes:
     - ReadWriteMany
    resources:
      requests:
        storage: 6Gi
---
apiVersion: v1
kind: Pod
metadata:
   name: myweb
   labels:
      app: myweb
spec:
 volumes:
 - name: html
   persistentVolumeClaim:
     claimName: mypvc
 containers:
   - name: nginx
     image: reg.harbor.com/public/nginx:latest
     ports:
      - containerPort: 80
     resources:
      requests:
       memory: "64Mi"
       cpu: '250m'
      limits:
       memory: "128Mi"
       cpu: "500m"
     volumeMounts:
     - name: html
       mountPath: /usr/share/nginx/html/

第二步:执行命令创建

[root@master1 pv]# kubectl apply  -f vol-pvc-demo.yaml

第三步:查询验证

[root@master1 pv]# kubectl get pv,pvc
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
persistentvolume/pv001   2Gi        RWO,RWX        Retain           Available                                           35m
persistentvolume/pv002   5Gi        RWO            Retain           Available                                           35m
persistentvolume/pv003   20Gi       RWO,RWX        Retain           Available                                           35m
persistentvolume/pv004   10Gi       RWO,RWX        Retain           Bound       default/mypvc                           35m
persistentvolume/pv005   15Gi       RWO,RWX        Retain           Available                                           35m
NAME                          STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mypvc   Bound    pv004    10Gi       RWO,RWX                       20m
[root@master1 pv]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
46 3
|
2月前
|
Kubernetes Cloud Native 云计算
云原生时代的技术演进:Kubernetes与微服务架构的完美融合
随着云计算技术的飞速发展,云原生概念逐渐深入人心。本文将深入探讨云原生技术的核心——Kubernetes,以及它如何与微服务架构相结合,共同推动现代软件架构的创新与发展。文章不仅剖析了Kubernetes的基本工作原理,还通过实际案例展示了其在微服务部署和管理中的应用,为读者提供了一条清晰的云原生技术应用路径。
81 2
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes的奇妙之旅
【9月更文挑战第34天】在数字化浪潮中,云原生技术如Kubernetes已经成为IT行业的重要力量。本文旨在通过浅显易懂的方式,向初学者揭示Kubernetes的核心概念、架构设计及其在实际业务中的应用价值,帮助读者快速理解并掌握这一技术,为进一步深入学习和实践打下坚实基础。
57 1
|
3月前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
62 4
|
3月前
|
Kubernetes 负载均衡 Cloud Native
探索云原生技术:Kubernetes的魔法
【9月更文挑战第24天】 在数字化浪潮中,云原生技术如同现代航海的罗盘,指引着企业航向灵活、高效的未来。本文将深入剖析云原生世界的璀璨明星——Kubernetes,揭秘其如何在容器化的基础上,实现复杂应用的自动化部署、扩展和管理。从概念到实践,我们将一同领略Kubernetes如何简化运维、提高资源利用率,并推动微服务架构的发展。通过实际的代码示例,我们将手把手教你如何在云上构建和运行第一个Kubernetes集群,让理论与实践相结合,开启云原生之旅。
|
2月前
|
Kubernetes Cloud Native 调度
深入探讨容器化技术:Kubernetes 的魅力
【10月更文挑战第6天】深入探讨容器化技术:Kubernetes 的魅力
85 0
|
3月前
|
Kubernetes 负载均衡 监控
深入云原生技术:Kubernetes集群部署与管理
【9月更文挑战第17天】在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为企业新宠。本文将引导读者探索云原生的核心组件——Kubernetes,通过实际案例分析其部署与管理流程,旨在帮助技术从业者和企业决策者理解如何利用Kubernetes提升应用的可用性和性能。从基础概念到操作实践,我们将一同见证云原生技术的变革力量。
|
3月前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
3月前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
174 7
|
3月前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
76 0

相关产品

  • 容器服务Kubernetes版