详细问题:可以对接那些储存? PV和PVC之间的区别是什么?可以通过几种方式创建PVC? 你对供应商了解多少?
首先,k8s中的pod 是有生命周期的,如果pod 被删除那么pod 内存储的数据也一并被删除了,也就是说我们的pod 有可能在任意时间死在任意节点上,所以我们需要使用外部存储的方式将数据或者配置永久的存储下来。
K8s 中常用存储有
emptyDir.hostPath.nfs
perstentVolumeClaim.glusterfs
cephfs.configMap.cecret。
emptyDir:是在本机的
/var/lib/volumes/kubelet/pods 下创建一个随机目录,用于存放数据,pod删除,目录删除,达不到数据永久存储的目的
hostPath:将目录挂载的宿主机上的指定目录,pod 删除数据不会被删除,只要下一个pod 依旧调度到这台物理机上,还能访问原pod 数据。
nfs:nfs 可以解决 hostPath的后面pod 必须调度到同一宿主机的问题。但是nfs会存在单点故障。
PVC 是有用户进行的存储的请求,类似于 pod 会消耗集群的资源。Pv 属于集群级别的资源,不属于任何的命名空间,而pvc 数据命名空间别的资源,我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在 Node 上而已。
创建pvc 的时候我们可以使用动态和静态的方式进行创建,动态创建pvc 的时候,向存储类申请指定容量的PV,存储类再去找到对应的供应商申请创建PV.
供应商有
nfs-provisioner和rbd-provisioner,这些是外部供应商,需要额外安装组件才可以用于Storageclass动态生成pv