Kubernetes----高级存储之PVC

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Kubernetes----高级存储之PVC

一、PVC简介

PVC是资源的申请,用来声明对存储空间、访问模式、存储类别需求信息,如下为PVC的资源文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes:  # 访问模式
  selector:  # 采用标签对PV选择
  storageClassName:  # 存储类别
  resources:  # 请求空间
    requests:
      storage: 2Gi

PVC的关键配置参数说明

  • 访问模式(accessModes)

用于描述用户应用对存储资源的访问权限

  • 选择条件

通过Label Selecot的设置,可使PVC对于系统中已存在的PV进行筛选

  • 存储类别

PVC在定义时可以设定需要的后端存储的类别,只有设置了该class的PV才能被系统选出

  • 资源请求

对存储资源的请求

二、PVC实例

编写pvc.yaml文件,申请PV,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
  namespace: dev
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc2
  namespace: dev
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc3
  namespace: dev
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

使用如下命令创建pvc

[root@master volume]# kubectl apply -f pvc.yaml
namespace/dev created
persistentvolumeclaim/pvc1 created
persistentvolumeclaim/pvc2 created
persistentvolumeclaim/pvc3 created
[root@master volume]#

查看创建好的pvc资源,如下:

[root@master volume]# kubectl get pvc -n dev
NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc1   Bound    pv2      2Gi        RWX                           2m15s
pvc2   Bound    pv1      2Gi        RWX                           2m15s
pvc3   Bound    pv3      2Gi        RWX                           2m15s
[root@master volume]#

此时再查看一下PV,如下,已经存在绑定关系了

[root@master volume]# kubectl get pv
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS   REASON   AGE
auth-mysql-pv   10Gi       RWO            Retain           Bound    lbsheng/auth-mysql-pv-claim   manual                  8d
pv1             2Gi        RWX            Retain           Bound    dev/pvc2                                              31h
pv2             2Gi        RWX            Retain           Bound    dev/pvc1                                              31h
pv3             2Gi        RWX            Retain           Bound    dev/pvc3                                              31h
[root@master volume]#

在创建pod的yaml中申请pvc,编辑pod_pvc.yaml文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod1
  namespace: dev
spec:
  containers:
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt;sleep 10;done;"]
    volumeMounts:
    - name: volume
      mountPath: /root/
  volumes:
  - name: volume
    persistentVolumeClaim:
      claimName: pvc1
      readOnly: false

使用如下命令创建资源:

[root@master volume]# kubectl apply -f pod_pvc.yaml
pod/pod1 created
[root@master volume]#

根据上面的创建的资源可以发现,pvc1使用的是pv2,而pv2挂载的是nfs中的/root/data/pv2的目录,此时查看目录如下,已经存在out.txt文件了

[root@master volume]# ls /root/data/pv2
out.txt
[root@master volume]#

使用tail命令可以发现out.txt文件中的内容

[root@master volume]# tail -f /root/data/pv2/out.txt
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1

如下删除pod以及pvc

[root@master volume]# kubectl delete -f pod_pvc.yaml
pod "pod1" deleted
[root@master volume]# kubectl delete -f pvc.yaml
namespace "dev" deleted
persistentvolumeclaim "pvc1" deleted
persistentvolumeclaim "pvc2" deleted
persistentvolumeclaim "pvc3" deleted
[root@master volume]#

此时再查看pv可以发现此时pv的绑定关系已经释放了

[root@master volume]# kubectl get pv
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                         STORAGECLASS   REASON   AGE
auth-mysql-pv   10Gi       RWO            Retain           Bound      lbsheng/auth-mysql-pv-claim   manual                  8d
pv1             2Gi        RWX            Retain           Released   dev/pvc2                                              31h
pv2             2Gi        RWX            Retain           Released   dev/pvc1                                              31h
pv3             2Gi        RWX            Retain           Released   dev/pvc3                                              31h
[root@master volume]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
JSON Kubernetes Shell
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
|
3月前
|
Kubernetes Shell Perl
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
|
3月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
285 1
|
3月前
|
存储 Kubernetes Go
【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例
【Azure K8S | AKS】在AKS集群中创建 PVC(PersistentVolumeClaim)和 PV(PersistentVolume) 示例
|
2月前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
143 7
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
3月前
|
存储 Kubernetes 调度
在K8S中,什么是PV和PVC?
在K8S中,什么是PV和PVC?
|
3月前
|
存储 缓存 Kubernetes
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
23天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。