kubernetes持久化存储
一 、Volumes
容器的弊端:
1. Container (容器) 中的磁盘文件是短暂的,当容器崩 溃时,kubelet 会重新启动容器,但最初的文件将丢 失,Container 会以最干净的状态启动。
2. 当一个 Pod 运行多个 Container 时,各个容器可能需 要共享一些文件。
Kubernetes Volume 可以解决这两个问题。
一些需要持久化数据的程序才会用到 Volumes,或者一 些需要共享数据的容器需要 volumes。
如:Redis 分片集群模式,Redis-Cluster:nodes.conf
日志收集的需求:需要在应用程序的容器里面加一个 sidecar,这个容器是一个收集日志的容器,比如 filebeat,它通过 volumes 共享应用程序的日志文件目 录。
Kubernetes Volumes 官方文档:https://kubernetes.i o/docs/concepts/storage/volumes/
1. Docker 和 K8S 的 Volume 区别
1. 生命周期管理:Docker的卷生命周期由其容器决定, 如果容器被删除,卷并不会被自动删除。而 Kubernetes的卷与Pod生命周期绑定,当Pod被删除 时,其卷也会被自动删除。
2. 共享与访问:在Docker中,每个容器都有自己的卷, 无法共享卷。而在Kubernetes中,多个容器可以共享 同一个卷,并且通过在每个容器的volumeMounts字 段中指定相同的卷,可以实现多容器共享数据。
3. 卷类型和功能:Kubernetes支持多种类型的卷,如 EmptyDir、Secret、ConfigMap、 PersistentVolumeClaim等,提供了丰富的选择和功 能。而Docker的卷功能相对基础,主要关注持久存储 数据的解决方案。
4. 数据持久性:Kubernetes的卷在容器重启或销毁后仍 然可以保留数据,因为其生命周期与Pod相同。而 Docker的卷在容器删除后数据可能会丢失。
5. 扩展性和灵活性:Kubernetes的卷架构更加开放和灵 活,支持多种存储后端和插件机制,方便扩展和定 制。而Docker的卷功能相对固定,扩展性和灵活性相 对较低。
2. EmptyDir 容器卷
EmptyDir 卷用于 Pod 中的不同 Container 共享数据, 如果删除 Pod,EmptyDir 卷中的数据也将被删除。
使用方式:
默认情况下,EmptyDir 卷支持节点上的任何介质, 可以是 SSD、磁盘或网络存储,具体如何使用取决于 自身的环境。
还可以将 emptyDir.medium 字段设置为 Memory, 让 Kubernetes 使用 tmpfs(内存支持的文件系 统),不过这样虽然提高性能,但因为是运行在内存 中,所以数据无法持久化,且设置的大小会被计入到 Container 的内存限制中。
使用 emptyDir 卷的示例,直接指定 emptyDir 为 {} 即 可:
3. HostPath 本地卷
HostPath 卷可将将宿主机的文件或目录挂载到 Pod 上,用于 Pod 自定义日志输出或访问 Docker 内部的容 器等。
在挂载时,要注意该 Pod 是在哪个节点上运行的,要在 对应的 node 上创建需要挂载的文件或目录。
使用 hostPath 卷的示例。将主机的 /root/test.txt 挂 载到 Pod 的 /tmp 下:
先为两台节点分别设置标签
在 node01 节点上创建 test.txt
4. NFS 网络卷
node02 使用 nfs 部署网络存储
修改 yaml 文件
原文地址:https://blog.csdn.net/m0_72009757/article/details/142333032
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!