本页面简要介绍了 Kubernetes 中的卷及其在 Google Kubernetes Engine (GKE) 中的用法。

概览

对于应用而言,将数据写入容器中的磁盘文件是最简单的途径,但这种方法存在缺陷。如果容器因其他任何原因崩溃或停止,文件将会丢失。此外,一个容器内的文件不可供同一 Pod 中运行的其他容器访问。 Kubernetes 卷抽象可以解决这两个问题。

从概念上讲,卷是可供 Pod 中的所有容器访问的目录。Pod 规范中声明的卷来源决定了目录的创建方式、使用的存储介质以及目录的初始内容。Pod 指定了其包含的卷以及这些卷在容器中的装载路径。

临时类型的卷与其所属 Pod 具有相同的生命周期。这些卷是随 Pod 一起创建的,并会留存到容器重新启动为止。当 Pod 终止或被删除时,其所含的卷也会随之终止或删除。

其他类型的卷可以连接到独立于 Pod 的持久性存储空间。与临时卷不同,由持久性存储空间支持的卷中的数据会在 Pod 被移除时留存。系统只是卸载该卷,并可将其数据传递到另一个 Pod。建议您使用 PersistentVolume 资源来管理持久性存储类型的生命周期,而不要直接进行指定。

卷类型

对于卷而言,其存储实现和初始内容会有所不同。您可以根据自己的使用场景选择最适合的卷来源。以下各部分介绍了几种常见的卷来源。如需查看完整的卷类型列表,请参阅 Kubernetes 卷文档

emptyDir

emptyDir 卷提供空目录以供 Pod 中的容器执行读写操作。如果 Pod 因任何原因被从节点中移除,emptyDir 中的数据将被永久删除。emptyDir 卷存储在正备份节点的任何介质上,这可能是磁盘、SSD 或网络存储空间,具体取决于您的环境。emptyDir 卷适用于临时空间以及在 Pod 中的多个容器之间共享数据。

所有 emptyDir 装载都是节点临时存储的一部分,其中包括容器可写入层和日志。默认情况下,GKE Autopilot 将临时存储空间设置为 1 GiB,以便为应用创建一些文件空间。如果需要更多或更少空间,您可以通过ephemeral-storage 设置资源请求来调整 Deployment 中的临时存储。

如果您要对 Linux 节点池使用容器,则可以将 emptyDir.medium 字段设置为 Memory,以指示 Kubernetes 装载 tmpfs(位于 RAM 中的文件系统)。不过,Windows Server 容器不支持此功能。

ConfigMap

ConfigMap 资源提供了一种将配置数据注入 Pod 的方法。存储在 ConfigMap 对象中的数据可以在 ConfigMap 类型的卷中引用,然后通过在 Pod 中运行的文件使用。ConfigMap 卷中的文件由 ConfigMap 资源指定。

Secret

Secret 卷用于向应用提供密码、OAuth 令牌和 SSH 密钥等敏感数据。存储在 Secret 对象中的数据可以在 Secret 类型的卷中引用,然后通过在 Pod 中运行的文件使用。

downwardAPI

downwardAPI 卷使应用可以使用 Downward API 数据。此数据包含有关运行应用的 Pod 和容器的信息。例如,可以将 Pod 配置为向包含 Pod 的命名空间和 IP 地址的应用公开 DownwardAPIVolumeFile。如需查看您可以添加的数据类型的完整列表,请参阅 Downward API 的功能

PersistentVolumeClaim

集群运算符可以使用 PersistentVolumeClaim 卷来预配供应用使用的持久性存储空间。Pod 使用 PersistentVolumeClaim 来装载由此持久性存储空间支持的卷。

后续步骤