Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它。

而容器产生的数据,会随着Pod消亡而自动消失。

为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,以下简称PV)和Persistent Volume Claim(持久卷申请,以下简称PVC)。

PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集群的资源。

PV跟Docker里的Volume(卷)类似,不过会有独立于Pod的生命周期。

使用kubectl get pv查看列表:

而PVC是用户的一个请求,跟Pod类似。Pod消费Node的资源,PVC消费PV的资源。

Pod 能够申请特定的资源(CPU和内存);PVC能够申请特定的尺寸和访问模式,例如可以加载一个读写实例或者多个只读实例,(就是上图kubectl get pvc返回结果的Access Mode这一列的值RWO, ROX等等)而无须感知这些实例背后具体的存储实现。

我们来看一个具体的PVC实例,名称为nginx-pvc:

kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-pvc spec: storageClassName: default accessModes: - ReadOnlyMany resources: requests: storage: 1Gi

使用命令kubectl create -f pvc.yaml创建这个yaml文件定义的persistent volume claim:

然后定义一个pod,消费这个名为nginx-pvc的persistent volume claim:

使用kubectl describe pvc nginx-pvc查看这个persistent volume claim对应生成的persistent volume:

现在我用命令kubectl cp train.jpg nginx-storage-pod:/usr/share/nginx/html将两个文件train.jpg和index.html文件拷贝到pod内部文件路径/usr/share/nginx/html下面:

现在切换到nginx-storage-pod pod里,在/usr/share/nginx/html目录下果然发现了这两个文件:

接下来我定义了另一个pod,同样适用nginx-pvc这个PVC:

创建完这个pod之后,then kubectl exec -ti another ash 进入pod内部/usr/share/nginx/html,同样发现了index.html和train.jpg.

这个例子说明persistent volume claim能够用于在多个pod间共享持久化数据。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法相关推荐

  1. 在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩...

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用 ...

  2. 在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩

    上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用,并且已经成功地将一个包含了这个UI5应用的docker镜像上传到Dock ...

  3. 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

    kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果. 命令行创建一个deployment: kubectl run ...

  4. 学习 Kubernetes 的 Why 和 How - 每天5分钟玩转 Docker 容器技术(114)

    这是一个系统学习 Kubernetes 的教程,有下面两个特点: 系统讲解当前最流行的容器编排引擎 Kubernetes 包括了安装部署.应用管理.网络.存储.监控.日志管理等多各个方面. 重实践并兼 ...

  5. k8s 查看ip地址属于哪个pod_一个简单的例子理解Kubernetes的三种IP地址类型

    很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚. 本文我们通过一个最简单的例子来学习. 用如下命令行创建一个基于nginx的deployment ...

  6. 一个具体的例子学习Java volatile关键字

    相信大多数Java程序员都学习过volatile这个关键字的用法.百度百科上对volatile的定义: volatile是一个类型修饰符(type specifier),被设计用来修饰被不同线程访问和 ...

  7. 通过rxjs的一个例子, 来学习SwitchMap的使用方法

    switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...

  8. 如何在Kubernetes里创建一个Nginx service

    Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...

  9. SpringBoot应用和PostgreSQL数据库部署到Kubernetes上的一个例子

    创建一个名为ads-app-service的服务: 上述Service的yaml文件里每个字段,在Kubernetes的API文档里有详细说明. https://kubernetes.io/docs/ ...

最新文章

  1. ATS 5.3.0在反向代理模式下实现正向代理功能方法
  2. 高频面试题:秒杀场景设计
  3. 突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...
  4. 人工智能(5)---一文解读人工智能创业的5大坑
  5. 如何从 Python 列表中删除重复项
  6. 笔记 Json语法 01
  7. 59. C# -- .NET Framework 常用命名空间总结
  8. java中的Vector的用法
  9. 测试AS3的性能9800粒子
  10. 数据结构期末复习(四)
  11. 失眠就吃安眠药真的好吗?好心情送你沾枕到天亮的诀窍
  12. 数据结构练习题――中序遍历二叉树
  13. Python的数据分析中交叉验证
  14. 关于系统升级将暂停人爱官网、人爱数字化平台、人爱软件平台的通知
  15. 数据分析(一)- 数据分析基础及matplotlib
  16. Adams导入SW模型不显示
  17. Python~~~有料才能 有派
  18. Perl语言面向对象入门
  19. 安装easyswoole(宝塔坑)
  20. 网络电话语音通话的android实现

热门文章

  1. sonar plugin DefaultMeasure与DefaultHighlighting
  2. sonar 报错日志分析(根据日志跟踪源码执行)
  3. ps -ef 输出结果的具体含义
  4. sklearn自学指南(part33)--流形学习
  5. SAP UI5 应用开发教程之二十 - SAP UI5 的表达式绑定用法讲解
  6. SAP 电商云 Spartacus UI 回归测试 wish-list.core-e2e-spec.ts
  7. 关于 jMeter 结果报表里的 APDEX (Application Performance Index)
  8. Angular单元测试框架里API toHaveBeenCalledTimes的工作原理
  9. 如何查找历史版本的SAP UI5 API文档
  10. 网友关于 S/4HANA里的Call List和E-mail集成的提问