本地储存(emptyDir和 hostPath)
-
emptyDir
- 是host上的一个空目录
- 生存周期与pod一致
- 适合 Pod 中的容器需要临时共享存储空间的场景
-
hostPath
持久化储存(PV, PVC和StorageClass)
-
PVC 描述的,是 Pod 想要使用的持久化存储的属性,比如存储的大小、读写权限等
-
PV 描述的,则是一个具体的 Volume 的属性,比如 Volume 的类型、挂载目录、远程存储服务器地址等
-
PV是cluster level的,只能被同一个namespace下的PVC使用
-
PV和 PVC的关系
- PV和PVC解耦的储存的实现和使用,类似于 “接口”和“实现” 的思想
- 用户只要通过PVC声明需要的储存size和**access mode(rw, ro)**即可,它会自动与集群中已经存在的PV去匹配
- 储存的实现细节交给管理员通过PV或者StorageClass配置
- 避免了因为向开发者暴露过多的存储系统细节而带来的隐患
- 也意味着出现事故时可以更容易定位问题和明确责任
- 不应该把一个宿主机上的目录当作 PV 使用
- 本地目录的存储行为完全不可控,它所在的磁盘随时都可能被应用写满,甚至造成整个宿主机宕机
-
静态分配:预分配一些储存并绑定给PV
-
动态分配:不预分配PV,而声明StorageClass
-
StorageClass是一个包含PV创建信息的储存模板, 用于自动创建 PV
-
包含的内容
- PV的属性,比如储存类型,大小等
- 创建PV使用到的储存插件
- PVC指定使用的储存模板,k8s自动生成所需的PV并绑定到PVC

配置(configMap和secret)
- 管理一些可变配置信息
- 让可变配置和容器镜像进行解耦,保证了容器的可移植性
- configMap必须在pod前创建
- 以volume形式挂载到pod的配置支持动态更新,而通过环境变量挂载的不支持
- 数据放在
etcd中,kubelet 组件在定时维护这些 Volume
- 更新可能会有一定的延时
- Secret 的用法几乎与 ConfigMap完全相同
- 用户名、密码等数据是以Secret对象的方式交给 Kubernetes 保存
- 数据必须是经过 Base64 转码的,以免出现明文密码
- 仅仅是经过了转码,而并没有被加密,在真正的生产环境中,需要开启 Secret 的加密插件
相关文章: