删除|23 个必知必会的 Kubernetes 高频面试题( 七 )


23、 k8s数据持久化的方式有哪些?答:
1)EmptyDir(空目录)没有指定要挂载宿主机上的某个目录 , 直接由Pod内部映射到宿主机上 。 类似于docker中的manager volume 。
主要使用场景:

  • 只需要临时将数据保存在磁盘上 , 比如在合并/排序算法中;
  • 作为两个容器的共享存储 , 使得第一个内容管理的容器可以将生成的数据存入其中 , 同时由同一个webserver容器对外提供这些页面 。
emptyDir的特性:
同个pod里面的不同容器 , 共享同一个持久化目录 , 当pod节点删除时 , volume的数据也会被删除 。 如果仅仅是容器被销毁 , pod还在 , 则不会影响volume中的数据 。
总结来说:emptyDir的数据持久化的生命周期和使用的pod一致 。 一般是作为临时存储使用 。
2)Hostpath将宿主机上已存在的目录或文件挂载到容器内部 。 类似于docker中的bind mount挂载方式 。
这种数据持久化方式 , 运用场景不多 , 因为它增加了pod与节点之间的耦合 。
一般对于k8s集群本身的数据持久化和docker本身的数据持久化会使用这种方式 , 可以自行参考apiService的yaml文件 , 位于:/etc/kubernetes/main…目录下 。
3)PersistentVolume(简称PV)基于NFS服务的PV , 也可以基于GFS的PV 。 它的作用是统一数据持久化目录 , 方便管理 。
在一个PV的yaml文件中 , 可以对其配置PV的大小 , 指定PV的访问模式:
  • ReadWriteOnce:只能以读写的方式挂载到单个节点;
  • ReadOnlyMany:能以只读的方式挂载到多个节点;
  • ReadWriteMany:能以读写的方式挂载到多个节点 。 以及指定pv的回收策略:
  • recycle:清除PV的数据 , 然后自动回收;
  • Retain:需要手动回收;
  • delete:删除云存储资源 , 云存储专用;

PS:这里的回收策略指的是在PV被删除后 , 在这个PV下所存储的源文件是否删除) 。
若需使用PV , 那么还有一个重要的概念:PVC , PVC是向PV申请应用所需的容量大小 , K8s集群中可能会有多个PV , PVC和PV若要关联 , 其定义的访问模式必须一致 。 定义的storageClassName也必须一致 , 若群集中存在相同的(名字、访问模式都一致)两个PV , 那么PVC会选择向它所需容量接近的PV去申请 , 或者随机申请 。
链接:https://tinyurl.com/ybfx3wtx
(版权归原作者所有 , 侵删)

相关经验推荐