磁盘
在容器重新启动期间, 卷的内容将保持不变; 在重新启动容器之后, 新容器可以识别前一个容器写入卷的所有文件。另外,如果一个 pod 包含多个容器, 那这个卷可以同时被所有的容器使用。
可用卷类型:
emptyDir -- 用于存储临时数据的简单空目录。
hostPath -- 用于将目录从工作节点的文件系统挂载到 pod。
gitRepo -- 通过检出 Git 仓库的内容来初始化的卷。
nfs -- 挂载到 pod 中的 NFS 共享卷。
cinder 、cephfs、iscsi 、flocker 、glusterfs 、quobyte 、rbd 、flexVolume 、vsphere - Volume 、photoPersistentDis k 、scaleIO 用于挂载其他类型的网络存储。
configMap 、secret 、downwardAPI -- 用于将 Kubemetes 部分资源和集群信息公开给 pod 的特殊类型的卷。
persistentVolumeClaim -- 一种使用预置或者动态配置的持久存储类型。
研发人员无须向他们的 pod 中添加特定技术的卷, 而是由集群管理员设置底层存储, 然后通过 Kubernetes API 服务器创建持久卷并注册。在创建持久卷时, 管理员可以指定其大小和所支持的访问模式。
当集群用户需要在其 pod 中使用持久化存储时, 他们首先创建持久卷声明(Persistent VolumeClaim, 简称PVC) 清单, 指定所需要的最低容量要求和访问模式,然后用户将待久卷声明清单提交给 Kubernetes API 服务器, Kubernetes 将找到可匹配的待久卷并将其绑定到持久卷声明。
持久卷不属于任何命名空间, 它跟节点一样是集群层面的资源。
访问模式的简写:
RWO -- ReadWriteOnce 仅允许单个节点挂载读写。
ROX -- ReadOnlyMany 允许多个节点挂载只读。
RWX – ReadWriteMany 允许多个节点挂载读写这个卷。
删除 pod 和持久卷
# 先删除pod kubectl delete pod <pod-name> # 再删除持久卷声明 kubectl delete pvc <pvc-name>
持久卷回收策略:Retain、Recycle、Delete。
集群管理员可以创建一个持久卷配置,并定义一个或多个 storageClass 对象,从而让用户选择他们想要的持久卷类型而不仅仅只是创建持久卷。用户可以在其持久卷声明中引用 StoragClass ,而配置程序在配置持久存储时将采用这一点。
与持久卷类似, StorageClass 资源并非命名空间。
StorageClasses 的好处在于,声明是通过名称引用它们的。因此,只要 StorageClass 名称在所有这些名称中相同, PVC 定义便可跨不同集群移植。
小结
使用卷来为 pod 的容器提供临时或持久存储。
创建一个多容器 pod, 并通过为 pod 添加一个卷并将其挂载到每个容器中,来让 pod 中的容器操作相同的文件。
使用 emptyDir 卷存储临时的非持久数据。
使用 giRepo 卷可以在 pod 启动时使用 Git 库的内容轻松填充目录。
使用 hostPath 卷从主机节点访问文件。
将外部存储装载到卷中, 以便在 pod 重启之前保持 pod 数据读写。
通过使用持久卷和持久卷声明解耦 pod 与存储基础架构。
为每个持久卷声明动态设置所需(或缺省)存储类的持久卷。
当需要将持久卷声明绑定到预配置的持久卷时, 防止动态置备程序干扰。
Last updated
Was this helpful?