一、持久存储
持久存储(Persistent Storage)是指可以长期保存数据的存储方式,与短暂的临时存储(Ephemeral Storage)相对。在容器编排和管理平台中,需要提供持久存储功能来保证在容器和节点之间的数据持久化,以支持应用程序的数据处理和持久性需求。
二、Windows
Windows 有一个分层文件系统驱动程序用来挂载容器层和创建基于 NTFS 的文件系统拷贝。 容器中的所有文件路径仅在该容器的上下文中解析。
1、使用 Docker 时,卷挂载只能是容器中的目录,而不能是单个文件。此限制不适用于 containerd。
2、卷挂载不能将文件或目录映射回宿主文件系统。
3、不支持只读文件系统,因为 Windows 注册表和 SAM 数据库始终需要写访问权限。不过,Windows 支持只读的卷。
4、不支持卷的用户掩码和访问许可,因为宿主与容器之间并不共享 SAM,二者之间不存在映射关系。 所有访问许可都是在容器上下文中解析的。
因此,Windows 节点不支持以下存储功能:
1、卷子路径挂载:只能在 Windows 容器上挂载整个卷;
2、Secret 的子路径挂载;
3、宿主挂载映射;
4、只读的根文件系统(映射的卷仍然支持 readOnly);
5、块设备映射;
6、内存作为存储介质(例如 emptyDir.medium 设置为 Memory);
7、类似 UID/GID、各用户不同的 Linux 文件系统访问许可等文件系统特性;
8、使用 DefaultMode 设置 Secret 权限 (因为该特性依赖 UID/GID);
9、基于 NFS 的存储和卷支持;
10、扩展已挂载卷(resizefs)。
三、实现数据持久
使用 Kubernetes卷可以实现数据持久性和 Pod 卷共享的需求,这对于部署复杂的应用程序非常重要。在管理与特定存储后端或协议相关的持久卷时,需要执行以下操作:
1、对卷的制备(Provisioning):在存储后端上创建新的持久卷,并将其标记为可用。
2、去配(De-provisioning):从存储后端上删除不再需要的持久卷。
3、调整大小:更改已有卷的大小以适应应用程序的需求。
4、挂接到 Kubernetes 节点或从节点上解除挂接:在 Kubernetes 集群中将存储卷附加到节点上,以便它们可以被容器使用。需要注意,Kubernetes 可以在卷上启动多个 Pod,但是每个 Pod 只能附加一个卷。
5、将卷挂载到需要持久数据的 Pod 中的某容器上或从容器上卸载:在 Kubernetes Pod 中启动容器时,需要指定哪些卷应该被挂载到容器中。在容器退出之前,还需要将这些卷卸载。
卷管理组件作为 Kubernetes 卷插件发布。 Windows 支持以下类型的 Kubernetes 卷插件:
1、FlexVolume plugins
(请注意自 1.23 版本起,FlexVolume 已被弃用)
2、CSI Plugins
四、树内(In-Tree)卷插件
以下树内(In-Tree)插件支持 Windows 节点上的持久存储:
1、azureFile
2、gcePersistentDisk
3、vsphereVolume