当 Pod 指定到某个节点上时,首先创建的是一个 emptyDir 卷,并且只要 Pod 在该节点上运行,卷就一直存在。
注意:
当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会永久删除。
类似 docker run -v /xxx 这种形式
在物理机中的目录时随机生成的一个目录对应。这个目录不是永久存储,pod删除,该目录就会不存在。
emptyDir 的一些用途:
缓存空间,例如基于磁盘的归并排序。
为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行。
在 Web 服务器容器服务数据时,保存内容管理器容器获取的文件。
2. hostPath
hostPath 卷能将主机节点文件系统上的文件或目录挂载到您的 Pod 中。
hostPath 的一些用法有:
运行一个需要访问 Docker 引擎内部机制的容器;请使用 hostPath 挂载 /var/lib/docker 路径。
在容器中运行 cAdvisor 时,以 hostPath 方式挂载 /sys。
允许 Pod 指定给定的 hostPath 在运行 Pod 之前是否应该存在,是否应该创建以及应该以什么方式存在。
注意:
具有相同配置的多个 Pod 会由于节点上文件的不同而在不同节点上有不同的行为。
调度到新的 node节点上时,调度机制将无法考虑由 hostPath 使用的资源。
模板:
3. 网络卷 NFS
NFS 卷能将 NFS (网络文件系统) 挂载到 Pod 中。
注意: NFS 卷可以被预先填充数据,并且这些数据可以在 Pod 之间”传递”。
NFS 网络卷的使用方法:
1. 安装 NFS,并启动服务
在一台新的 server 上安装 NFS ,作为网络卷的 server
需要在所有的 kubernetes 节点上 安装 nfs-utils 作为客户端
配置格式:
目录 host(权限)
rw: 可读可写
async : 异步
no_root_squash : 表示通过 root 权限来读写文件夹
使得配置文件生效:
exportfs -arv
3. 在 k8s 集群上 创建 yaml 文件,并使用 NFS 网络卷,模板为:
4. 持久卷(重要)
4.1
持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应。
PersistentVolume,也就是PV:
是管理员创建好的,相当于一块磁盘目录
可以由任何命名空间中的用户,通过 PersistentVolumeClaim 与之匹配,然后使用
PV 是全局的,所有命名空间可见的
PV 不管后端是用什么存储的,例如 NFS、ISCSI 等
PV 和 Pod 一样,也是 kubernetes 中的一种资源
通过 pv 和 pvc ,用户无需知道后面用什么存储卷,只需要使用即可,增强了安全性
PV 创建好后,需要时 Available 状态才能使用
PersistentVolume各个阶段的状态名称:
Available(可用): 卷是一个空闲资源,尚未绑定到任何申领;
Bound(已绑定): 该卷已经绑定到某申领;
Released(已释放): 所绑定的申领已被删除,但是资源尚未被集群回收;
Failed(失败): 卷的自动回收操作失败。
PersistentVolume 创建模板:
说明:
capacity : PV 卷确定的存储容量
volumeMode : 卷模式
Filesystem(文件系统): 卷会被 Pod 挂载(Mount) 到某个目录
Block(块): 将卷作为原始块设备来使用。 这类卷以块设备的方式交给 Pod 使用,其上没有任何文件系统。
accessModes : 访问模式
ReadWriteOnce : 卷可以被一个节点以读写方式挂载;
ReadOnlyMany : 卷可以被多个节点以只读方式挂载;
ReadWriteMany : 卷可以被多个节点以读写方式挂载。
persistentVolumeReclaimPolicy : 回收策略
Retain — 不回收数据, Pod 的 pv 删除后,不会删除卷中目录的内容
但是删除 pvc 之后,pv 依然不可用
pv 状态长期保持为 Released
Recycle — 会删除数据 (rm -rf /thevolume/*)
删除 pvc 之后,pv 可复用
pv 状态由 Released 变为 Available
Delete — 诸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷这类关联存储资产也被删除
storageClassName : PV 的类名
特定类的 PV 卷只能绑定到请求该类存储卷的 PVC 申领。
未设置 storageClassName 的 PV 卷没有类设定,只能绑定到那些没有指定特定 存储类的 PVC 申领。
mountOptions : 挂载选项
管理员可以指定持久卷被挂载到节点上时使用的附加挂载选项
最后就是使用的网络卷的设置,这里使用的是 NFS
4.2 PersistentVolumeClaim,PVC
PersistentVolumeClaim,也就是 PVC,是用户根据特定存储容量和特定访问模式需求创建的。
概念分析:
PersistentVolumeClaim ,PVC 是用户在某一个特定的 namespace下创建的
kuberentes 会将 PVC 与 与之匹配的 PV 绑定在一起,这样在 Pod 中,在使用此 PVC 就可以挂载到 PV 所对应的卷中
PV 与 PVC 是 一对一的映射关系,也就是一个 PV 只能与一个 PVC 绑定,而且是双向绑定
如果 PVC 找不到匹配的 PV 卷,PVC 处于未绑定状态,当与之匹配的 PV 卷可用时,PVC 才会会被绑定
流程:
管理员 创建 PV 与真实的卷绑定
用户创建 PVC 与 管理员创建的 PV 绑定
用户创建 Pod 中使用 PVC 挂载到真实的卷
PersistentVolume 创建模板
说明:
accessModes : 访问模式,必须与 PV 保持一致
volumeMode : 卷模式, 必须与 PV 保持一致
resources : 申请的资源大小,在这里,是申请的 卷的大小
注意: 这里申请的卷的大小,一定要小于等于 pv 中设置的卷大小
storageClassName : 设置要匹配的 PV 的类名,也就是想和哪个 PV 匹配,需要设置和 PV 一致的类名
如果没有设置 storageClassName 类名,则该 PVC 匹配的是没有设置类名的 PV 卷
selector : 选择器,设置选择器来进一步过滤卷 PV 集合
只有标签与 selector 相匹配的卷能够绑定
matchLabels : PV 卷必须包含带有此值的标签
matchExpressions : 通过设定键(key)、值列表和操作符(operator) 来构造的需求。合法的操作符有 In、NotIn、Exists 和 DoesNotExist。
4.3
注意: 在 Pod 中直接使用 PersistentVolumeClaim(PVC)即可,即在 vloumes 中选择要使用的 PVC
Pod 使用 PVC 的模板
说明:
persistentVolumeClaim : 使用 PVC 来作为 挂在卷
claimName : 选择哪个 PVC 作为挂载卷,也就是 PVC 的 name
评论