我最近开始学习Kubernetes,我注意到在线上的各种教程中几乎没有提到Volumes。教程涵盖了Pod,ReplicaSet,部署和服务-但它们通常以结合了这四种方式构建的一些微服务应用示例结尾。当涉及数据库时,他们只需部署带有“mongo”镜像的容器,为其命名并提供服务,以便其他容器可以看到它,然后将其保留。没有讨论如何将数据写入磁盘。
因此,我假设没有其他配置,容器就可以将文件写入磁盘。我不认为这意味着文件在容器重新启动后是持久的,但是如果我编写了一个简单的NodeJS应用程序,例如:
const fs = require("fs");
fs.writeFileSync("test.txt", "blah");
const value = fs.readFileSync("test.txt", "utf8");
console.log(value);
我怀疑这会正确地输出“blah”并且不会由于无法写入磁盘而崩溃(请注意,我还没有对此进行测试,因为当我还在学习Kubernetes时,我还没有意识到这一点。如何将自己的自定义镜像放入群集中-到目前为止,我只加载了已经在Docker Hub上的镜像)但是,当阅读Kubernetes Volumes时,我遇到了Ephemeral Volume -该卷如下:
临时卷的存在使我得出以下两个结论之一:
那么这些事情是怎么回事?为什么有人会创建一个临时卷?
最佳答案
容器进程始终可以写入容器本地文件系统(Unix权限允许);但是删除广告连播后,其中的所有内容都会丢失。可以定期删除Pod(例如,如果您需要升级镜像),也可以在控件之外删除(如果其所在的节点已终止)。
在文档中,types of ephemeral volumes突出了两点:
在这两种情况下,数据“都像卷一样”:您可以指定数据来自何处以及在何处进行装载,并且可以隐藏基础镜像中的所有内容。与持久卷不同,如果删除并重新创建Pod,则基础存储可能不会持久。
通常,数据库的预打包版本(例如Helm图表)将包含持久的卷声明(或在有状态集合中为每个副本创建一个声明),因此即使 pods 被破坏,数据也确实会持久存在。