数据管理 - 每天5分钟玩转 Docker 容器技术(147)

本章将讨论 Kubernetes 如何管理存储资源。

首先我们会学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储;然后我们会实践几种常用的 Volume 类型并理解它们各自的应用场景;最后,我们会讨论 Kubernetes 如何通过 Persistent Volume 和 Persistent Volume Claim 分离集群管理员与集群用户的职责,并实践 Volume 的静态供给和动态供给。

Volume

本节我们讨论 Kubernetes 的存储模型 Volume,学习如何将各种持久化存储映射到容器。

我们经常会说:容器和 Pod 是短暂的。
其含义是它们的生命周期可能很短,会被频繁地销毁和创建。容器销毁时,保存在容器内部文件系统中的数据都会被清除。

为了持久化保存容器的数据,可以使用 Kubernetes Volume。

Volume 的生命周期独立于容器,Pod 中的容器可能被销毁和重建,但 Volume 会被保留。

本质上,Kubernetes Volume 是一个目录,这一点与 Docker Volume 类似。当 Volume 被 mount 到 Pod,Pod 中的所有容器都可以访问这个 Volume。Kubernetes Volume 也支持多种 backend 类型,包括 emptyDir、hostPath、GCE Persistent Disk、AWS Elastic Block Store、NFS、Ceph 等,完整列表可参考 https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes

Volume 提供了对各种 backend 的抽象,容器在使用 Volume 读写数据的时候不需要关心数据到底是存放在本地节点的文件系统中呢还是云硬盘上。对它来说,所有类型的 Volume 都只是一个目录。

我们将从最简单的 emptyDir 开始学习 Kubernetes Volume。

emptyDir

emptyDir 是最基础的 Volume 类型。正如其名字所示,一个 emptyDir Volume 是 Host 上的一个空目录。

emptyDir Volume 对于容器来说是持久的,对于 Pod 则不是。当 Pod 从节点删除时,Volume 的内容也会被删除。但如果只是容器被销毁而 Pod 还在,则 Volume 不受影响。

也就是说:emptyDir Volume 的生命周期与 Pod 一致。

Pod 中的所有容器都可以共享 Volume,它们可以指定各自的 mount 路径。下面通过例子来实践 emptyDir,配置文件如下:

这里我们模拟了一个 producer-consumer 场景。Pod 有两个容器 producer和 consumer,它们共享一个 Volume。producer 负责往 Volume 中写数据,consumer 则是从 Volume 读取数据。

① 文件最底部 volumes 定义了一个 emptyDir 类型的 Volume shared-volume

② producer 容器将 shared-volume mount 到 /producer_dir 目录。

③ producer 通过 echo 将数据写到文件 hello 里。

④ consumer 容器将 shared-volume mount 到 /consumer_dir 目录。

⑤ consumer 通过 cat 从文件 hello 读数据。

执行如下命令创建 Pod:

kubectl logs 显示容器 consumer 成功读到了 producer 写入的数据,验证了两个容器共享 emptyDir Volume。

因为 emptyDir 是 Docker Host 文件系统里的目录,其效果相当于执行了 docker run -v /producer_dir 和 docker run -v /consumer_dir。通过 docker inspect 查看容器的详细配置信息,我们发现两个容器都 mount 了同一个目录:

这里 /var/lib/kubelet/pods/3e6100eb-a97a-11e7-8f72-0800274451ad/volumes/kubernetes.io~empty-dir/shared-volume 就是 emptyDir 在 Host 上的真正路径。

emptyDir 是 Host 上创建的临时目录,其优点是能够方便地为 Pod 中的容器提供共享存储,不需要额外的配置。但它不具备持久性,如果 Pod 不存在了,emptyDir 也就没有了。根据这个特性,emptyDir 特别适合 Pod 中的容器需要临时共享存储空间的场景,比如前面的生产者消费者用例。

下一节我们学习 hostPath Volume。

书籍:

1.《每天5分钟玩转Kubernetes》
https://item.jd.com/26225745440.html

2.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

3.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#上位机——倒计时计时器

C#工控上位机——倒计时计时器 第一步:找出需要的工具 第二步:对工具进行布局 第三步:修改各个工具的属性 using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using…

小白信用卡提额攻略,2年轻松提额20万!

说到小白申请信用卡,很多人都会很迷茫,不要说信用卡提额20万,就算第一次申请能批个5000就已经很不错了,再说了就算你有100万额度的信用卡,有什么用呢?有个2万左右的信用卡额度就差不多够用了嘛!…

索罗斯等华尔街金融大鳄,为什么名声那么臭?

首先,索罗斯等金融大鳄本身玩的是金融,利用金融规则去赚钱,这本身并没有什么错,因为人家没有抢,没有偷,而是光明正大的搞。但是索罗斯等金融大鳄确实给很多国家带来过灾难,所以从道德上讲&#…

C#上位机——串口发送

C#上位机——串口发送 第一步:搭建框架 第二步:设置属性 第三步:编写代码,实现各个模块之间的联系和功能。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System…

阿里当初50亿美元收购UC,现在看来是不是亏大了?

近段阿里收购UC的陈年旧事又被大家翻出来讨论了,很多网友说当初阿里花50亿美金收购UC明显是巨亏了!但事实果真如此吗?以一个6年UC老用户的角度来说,我认为阿里50亿美金收购UC赢了一大半,输了一小半。看到众多网友一个个…

C#上位机——串口助手初级

C#上位机——串口助手 第一步:布局 第二步:设置属性 第三步:编写逻辑 初始化文本 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; us…

贷款,别相信这些人!

演唱会门票、电影票、火车票等等,本应该是按实际需求购买。奈何黄牛党的出现,把票价抬高倒卖,扰乱票价市场,让我们多给了不该给的钱,不仅如此,还严重影响了整个市场,可恨至极!相比之…

hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)

hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器。大部分应用都不会使用 hostPath Volume,因为这实际上增加了 Pod 与节点的耦合,限制了 Pod 的使用。不过那些需要访问 Kubernetes 或 Docker 内部数据&#xff08…

使用Python实现发送Email电子邮件【第19篇—python发邮件】

文章目录 👽使用Python实现发送Email电子邮件🎶实现原理🏃Python实现发送Email电子邮件-基础版👫实现源码🙆源码解析 💇Python实现发送Email电子邮件-完善版👫实现源码🙆源码解析&am…

信用卡刷10万买车,然后账单分期,划不划算?

买车我们优先推荐银行贷款,毕竟目前银行购车贷款的利率也就4.5%左右,是所有贷款当中利率最低的,也是最划算的。如果你没法从银行贷款,那只能考虑刷信用卡或汽车厂家的贷款了,至于选择刷信用卡还是选择汽车厂家的贷款&a…

理财平台频繁暴雷,羊毛党该要本金还是撸利息?

对于那些收益高的离谱的理财平台,你看重的是人家的利息,人家看重的是你的本金,薅羊毛也一样,你薅的是人家福利,人家盯着的是你的本金。我身边就有一个这样的朋友,当初某P2P平台就是通过注册送体验金的方式引…

C#上位机——串口助手高级01

C#上位机——串口助手高级 第一步:设置界面 右击RiceTextBox,选择置于顶层 选择StatusLabel 第二步:重新对控件进行命名 第三步:设置一些属性 波特率就是一秒钟发送的位数! using…

乱用信用卡?黑名单见

随便办卡?随性还款?随意套现?如今个人的信用愈发重要加上信用卡的新政无意间增加了使用负担 你还在这么随便的使用信用卡吗? 那简直是在给自己“招黑”!01、随意办卡随随便便申请信用卡,想当集大成者&#…

华为2017年财报,为何6036亿销售收入,净利润才479亿?

虽然华为的净利润率只有8%,和阿里、腾讯的净利润率没法比,但是8%对制造业来说已经很不容用易了,而且如果没有巨额的研发费用和员工费用支出,华为的净利润至少可以达到25%以上,可以轻松超过目前中国90%的企业&#xff0…

C#上位机——串口助手高级02

C#上位机——串口助手高级 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Text; using System.Windows.Forms;namespace 串口助手 {p…

外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)

如果 Kubernetes 部署在诸如 AWS、GCE、Azure 等公有云上,可以直接使用云硬盘作为 Volume,下面是 AWS Elastic Block Store 的例子: 要在 Pod 中使用 ESB volume,必须先在 AWS 中创建,然后通过 volume-id 引用。其他云…

C#上位机——串口助手高级03

C#上位机——串口助手高级03 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Text; using System.Windows.Forms;namespace 串口助手 …

为什么你申请信用卡总是被拒绝?是银行跟你有仇吗?

信用卡被拒是有很多原因的,正常来说如果你信用卡被拒绝,可以从以下几个方面找原因。一、征信问题如果最近两年征信逾期超过6次以上,或有超过90天以上不还款的记录,那基本没戏。除此之外,如果你最近半年之内查询征信的次…

在银行存款被吞了,怎么能快速解决?

存款被吞,估计绝大部分都会非常紧张,生怕被吞的存款就这样没了。在这个时候,很多人首先想到的是会给银行打电话,说自己的钱被ATM吞了,希望银行的人员能过来看一下,这个时候,银行客服人员估计会不…