数据管理
Volume
容器销毁时,保存在容器内部文件系统中的数据会被清除,为了持久化保存容器数据,可以使用 Kubernetes Volum。
Volum 生命周期独立于容器, Pod 中容器可能销毁重建,但 Volume 会被保留。
emptyDir
一个 emptyDir Volume 是 Host 上的一个空目录。
emptyDir Volume 对容器是持久的。但 Pod 从节点删除时,Volume 的内容也会被删除。容器销毁而 Pod 还在,则 Volume 不受影响。
emptyDir Volume 的生命周期与 Pod 一致。
hostPath
hostPath Volume将DOcker Host 文件系统中已经存在的目录 mount 给 Pod 的容器。一般不会使用,因为增加了 Pod 与节点的耦合,限制了 Pod 的使用。不过 那些需要访问 k8s, Docker 内部数据的应用则需要使用 hostPath。
eg: kube-apisrver、kube-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. PV 与 PVC 的关系,类似于 Node 和 Pod.
Secret & Configmap
Secret
Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感性息。Secret 会以 Volume 的形式被 mount 到 Pod ,容器可以通过文件的方式使用 Secret 中的敏感数据,此外,容器也可以环境变量的方式使用这些数据。
Configmap
Configmap 与 Secret 类似,主要是存储一些非敏感信息。数据以明文方式存放。