数据管理

数据管理

Volume

容器销毁时,保存在容器内部文件系统中的数据会被清除,为了持久化保存容器数据,可以使用 Kubernetes Volum

Volum 生命周期独立于容器, Pod 中容器可能销毁重建,但 Volume 会被保留。

emptyDir

一个 emptyDir VolumeHost 上的一个空目录。

emptyDir Volume 对容器是持久的。但 Pod 从节点删除时,Volume 的内容也会被删除。容器销毁而 Pod 还在,则 Volume 不受影响。

emptyDir Volume 的生命周期与 Pod 一致。

hostPath

hostPath VolumeDOcker Host 文件系统中已经存在的目录 mountPod 的容器。一般不会使用,因为增加了 Pod 与节点的耦合,限制了 Pod 的使用。不过 那些需要访问 k8s, Docker 内部数据的应用则需要使用 hostPath

eg: kube-apisrverkube-controller-manager

kubectl edit --namespace=kube-system pod kube-apiserver-k8s-master 查看 kube-apiserver Pod 的配置。

Pod 销毁,hostPath 对应的目录还会保留。 但 Host 崩溃,hostPath 就无法访问了。

###

外部 Storage Provider

这些 Volume 最大特点就是不依赖 Kubernetes . Volume 的底层基础设施由独立存储系统管理,与Kubernetes 集群分离。数据持久化后,即使整个 Kubernetes 奔溃也不受损。

也要考虑到 可靠性,可用性,和可扩展性

PersistentVolume & PersistentVolumeClaim

PV 是外部存储系统中的一块存储空间,由管理员创建维护。PV 具有持久性,生命周期独立于 Pod
PVC 是对 PV 的申请。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式等信息,Kubernetes 会查找并提供满足条件的 PV. PVPVC 的关系,类似于 NodePod.

Secret & Configmap

Secret

Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感性息。Secret 会以 Volume 的形式被 mountPod ,容器可以通过文件的方式使用 Secret 中的敏感数据,此外,容器也可以环境变量的方式使用这些数据。

Configmap

ConfigmapSecret 类似,主要是存储一些非敏感信息。数据以明文方式存放。