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内容器的高可用性和弹性伸缩

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

  2. 从一个例子学习 instanceof 和 getclass 的区别

    判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆.下面从一个例子说明两者的区别: public class Test_drive { pu ...

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

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

  4. 用一个例子学习CSS的伪类元素

    CSS伪类元素是一个非常酷的东西!首先我们理解一下它,:before :after 伪类元素,也就是虚假的元素.它可以插入在元素的前面或者后面,而在HTML文档结构中,它却是不存在的,因为Js是无法通 ...

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

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

  6. 一个简单的例子理解Kubernetes的三种IP地址类型

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

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

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

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

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

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

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

随机推荐

  1. 基于PHPExcel的常用方法总结

    // 通常PHPExcel对象有两种实例化的方式// 1. 通过new关键字创建空白文档$phpexcel = newPHPExcel();// 2. 通过读取已有的模板创建$phpexcel =PH ...

  2. n皇后问题--DFS输出棋盘

    N皇后问题 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对 ...

  3. bugzilla部署问题

    2018-09-25 1.部署环境 kvm虚拟机内    centos 7 系统    httpd+mariadb+bugzilla 关闭系统selinux.防火墙 setenforce 临时关闭se ...

  4. PIE SDK灾前灾后对比

    灾前灾后对比功能是GIS软件中常用的功能之一,指利用多时相获取的覆盖同一地表区域的遥感影像及其它辅助数据来确定和分析地表变化.它利用计算机图像处理系统,对不同时段目标或现象状态的变化进行识别.分析:它 ...

  5. js动态实现时分秒

    <div id="time" style="color: #96C2DD;</div>      <script type="text/ ...

  6. oracle 基础知识(四) 构成

    一, oracle服务 一个oracle 服务由一个oracle 实例和一个oracle数据库组成. oracle = instance + database 总体概念: 二, oracle 实例 0 ...

  7. lnmp 一键搭建脚本

    转载注明出处!!!!!!!!! 不足之处望多多指教. 不明之处站内私. #!/bin/bash #################################################### ...

  8. GCD - Extreme(欧拉函数变形)

    题目链接:https://vjudge.net/problem/UVA-11426 题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n. 的 ...

  9. 第十七章:使用media插件来播放声音

    前面已经讲过如何基于push notification自定义sound,但是还是存在几个问题: IOS app在前台运行的时候,如何播放sound?因为这个时候push notification是不起 ...

  10. 一些Andoid studio常用的快捷键

    常用快捷键    Android Studio是基于IntelliJ IDEA的,我们都知道,IDEA是一个很方便很好用的IDE,其中有许多快捷键,但是太多快捷键我们也记不住. 其实,我们可以记住几个 ...