第15章. 卷
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
当容器镜像 被实例化为容器时,容器需要上下文环境——即 CPU、内存和 I/O 资源的上下文。Pod 为其内部容器提供网络和文件系统上下文。网络通过 Pod 的虚拟 IP 地址实现,文件系统则挂载到宿主节点的文件系统上。
运行在容器中的应用程序可以作为Pod上下文的一部分与文件系统交互。容器的临时文件系统与其他容器或Pod隔离,且在Pod重启后不会保留。
本质上,卷是 Pod 内多个容器可共享的目录。图 15-1展示了容器临时文件系统与卷使用的区别。
图15-1. 使用临时文件系统与使用卷的容器 对比
本章将介绍不同卷类型,以及在容器中定义和挂载卷的流程。
卷的用途
简而言之,Kubernetes卷概念旨在实现以下目标(详见 ):
- 数据持久化
-
运行在容器中的应用程序 可以使用临时文件系统读写文件。当容器崩溃或集群/节点重启时,kubelet 会重启容器。任何写入临时文件系统的数据都会丢失且无法恢复。容器实际上会以全新状态重新启动。卷可提供持久存储空间,在容器重启后仍能保留数据,确保重要信息不丢失。
- 数据共享
-
在容器中挂载卷的场景众多 ,其中最典型的应用是多容器Pod:通过卷在主应用容器与sidecar之间交换数据,使它们能够共享文件并通过文件系统进行通信。
- 容器与存储解耦
-
卷将存储细节从应用程序中抽象出来,允许您在不修改容器镜像的情况下更换存储后端。
卷类型
每个卷都需要定义类型 。类型决定了卷的存储介质及其运行时行为。Kubernetes文档提供了长长的卷类型列表。其中某些类型(例如azureDisk、awsElasticBlockStore或gcePersistentDisk)仅在特定云服务商环境中运行Kubernetes集群时可用。许多云服务商专属的卷类型现已弃用。
表 15-1列出了我认为与考试最相关的卷类型精简列表。
| 输入命令 | 描述 |
|---|---|
|
Pod 中的空目录,具有读写权限。仅在 Pod 生命周期内持久化。适用于缓存实现或同一 Pod 内容器间数据交换。 |
|
来自主机节点文件系统的文件或目录。 |
|
提供注入配置数据的途径。具体实践示例详见第10章。 |
|
现有的网络文件系统(NFS)共享。Pod重启后数据得以保留。 |
|
申领持久卷。更多信息请参阅“创建持久卷申领”。 |
创建和访问卷
为Pod定义卷 需分两步完成:首先通过spec.volumes[]属性声明卷本身,定义时需提供名称和类型。但仅声明卷尚不充分。 其次,需通过spec.containers[].volumeMounts[] 将卷挂载到消费容器的路径。卷与挂载点的映射通过名称匹配实现。
从示例 15-1 中pod-with-volume.yaml文件存储的 YAML 清单可见,该卷定义为emptyDir 类型。该卷已挂载到名为nginx的容器内部路径/usr/share/nginx/HTML ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access