使用django建设一个网站,培训网页,领硕网站seo优化,网上做二建题那个网站好数据卷概述
Kubernetes Volume#xff08;数据卷#xff09;主要解决了如下两方面问题#xff1a;
数据持久性#xff1a;通常情况下#xff0c;容器运行起来之后#xff0c;写入到其文件系统的文件暂时性的。当容器崩溃后#xff0c;kubelet 将会重启该容器#xff…数据卷概述
Kubernetes Volume数据卷主要解决了如下两方面问题
数据持久性通常情况下容器运行起来之后写入到其文件系统的文件暂时性的。当容器崩溃后kubelet 将会重启该容器此时原容器运行后写入的文件将丢失因为容器将重新从镜像创建。数据共享同一个 Pod容器组中运行的容器之间经常会存在共享文件/文件夹的需求
Docker 里同样也存在一个 volume数据卷的概念但是 docker 对数据卷的管理相对 kubernetes 而言要更少一些。在 Docker 里一个 Volume数据卷仅仅是宿主机或另一个容器文件系统上的一个文件夹。Docker 并不管理 Volume数据卷的生命周期。
在 Kubernetes 里Volume数据卷存在明确的生命周期与包含该数据卷的容器组相同。因此Volume数据卷的生命周期比同一容器组中任意容器的生命周期要更长不管容器重启了多少次数据都能被保留下来。当然如果容器组退出了数据卷也就自然退出了。此时根据容器组所使用的 Volume数据卷类型不同数据可能随数据卷的退出而删除也可能被真正持久化并在下次容器组重启时仍然可以使用。
从根本上来说一个 Volume数据卷仅仅是一个可被容器组中的容器访问的文件目录也许其中包含一些数据文件。这个目录是怎么来的取决于该数据卷的类型不同类型的数据卷使用不同的存储介质。
使用 Volume数据卷时我们需要先在容器组中定义一个数据卷并将其挂载到容器的挂载点上。容器中的一个进程所看到可访问的文件系统是由容器的 docker 镜像和容器所挂载的数据卷共同组成的。Docker 镜像将被首先加载到该容器的文件系统任何数据卷都被在此之后挂载到指定的路径上。Volume数据卷不能被挂载到其他数据卷上或者通过引用其他数据卷。同一个容器组中的不同容器各自独立地挂载数据卷即同一个容器组中的两个容器可以将同一个数据卷挂载到各自不同的路径上。
我们现在通过下图来理解 容器组、容器、挂载点、数据卷、存储介质nfs、PVC、ConfigMap等几个概念之间的关系
一个容器组可以包含多个数据卷、多个容器一个容器通过挂载点决定某一个数据卷被挂载到容器中的什么路径不同类型的数据卷对应不同的存储介质图中列出了 nfs、PVC、ConfigMap 三种存储介质接下来将介绍更多 Kubernetes 目前支持多达 28 种数据卷类型其中大部分特定于具体的云环境如 GCE/AWS/Azure 等如需查阅所有的数据卷类型请查阅 Kubernetes 官方文档 Volumes
下文我们对常用的数据卷的类型介绍一下
emptyDir
描述
emptyDir类型的数据卷在容器组被创建时分配给该容器组并且直到容器组被移除该数据卷才被释放。该数据卷初始分配时始终是一个空目录。同一容器组中的不同容器都可以对该目录执行读写操作并且共享其中的数据尽管不同的容器可能将该数据卷挂载到容器中的不同路径。当容器组被移除时emptyDir数据卷中的数据将被永久删除 容器崩溃时kubelet 并不会删除容器组而仅仅是将容器重启因此 emptyDir 中的数据在容器崩溃并重启后仍然是存在的。 适用场景
空白的初始空间例如合并/排序算法中临时将数据存在磁盘上长时间计算中存储检查点中间结果以便容器崩溃时可以从上一次存储的检查点中间结果继续进行而不是从头开始作为两个容器的共享存储使得第一个内容管理的容器可以将生成的页面存入其中同时由一个 webserver 容器对外提供这些页面默认情况下emptyDir 数据卷被存储在 node节点的存储介质机械硬盘、SSD、或者网络存储上。此外您可以设置 emptyDir.medium 字段为 “Memory”此时 Kubernetes 将挂载一个 tmpfs基于 RAM 的文件系统。tmpfs 的读写速度非常快但是与磁盘不一样tmpfs 在节点重启后将被清空且您向该 emptyDir 写入文件时将消耗对应容器的内存限制。
nfs 描述 nfs 类型的数据卷可以加载 NFSNetwork File System到您的容器组/容器。容器组被移除时将仅仅 umount卸载NFS 数据卷NFS 中的数据仍将被保留。 可以在加载 NFS 数据卷前就在其中准备好数据可以在不同容器组之间共享数据可以被多个容器组加载并同时读写 适用场景 存储日志文件MySQL的data目录建议只在测试环境中用户上传的临时文件
cephfs 描述 cephfs 数据卷使得您可以挂载一个外部 CephFS 卷到您的容器组中。对于 kubernetes 而言cephfs 与 nfs 的管理方式和行为完全相似适用场景也相同。不同的仅仅是背后的存储介质。 适用场景 同 nfs 数据卷
hostPath
描述
hostPath 类型的数据卷将 Pod容器组所在节点的文件系统上某一个文件或文件夹挂载进容器组容器。
除了为 hostPath 指定 path 字段以外您还可以为其指定 type 字段可选的 type 字段描述如下
Type字段取值描述空字符串default用于向后兼容此时kubernetes 在挂载 hostPath 数据卷前不会执行任何检查DirectoryOrCreate如果指定的 hostPath 路径不存在kubernetes 将在节点的该路径上创建一个空文件夹权限设置为 0755与 kubelet 进程具备相同的 group 和 ownershipDirectory指定 hostPath 路径必须存在且是一个文件夹FileOrCreate如果指定的 hostPath 路径不存在kubernetes 将在节点的该路径上创建一个空的文件权限设置为 0644与 kubelet 进程具备相同的 group 和 ownershipFile指定 hostPath 路径必须存在且是一个文件Socket指定 hostPath 路径必须存在且是一个 Unix SocketCharDevice指定 hostPath 路径必须存在且是一个 character deviceBlockDevice指定 hostPath 路径必须存在且是一个 block device PS: 使用 hostPath 数据卷时必须十分小心因为 不同节点上配置完全相同的容器组例如同一个Deployment的容器组可能执行结果不一样因为不同节点上 hostPath 所对应的文件内容不同Kubernetes 计划增加基于资源的调度但这个特性将不会考虑对 hostPath 的支持hostPath 对应的文件/文件夹只有 root 可以写入。您要么在 privileged Container 以 root 身份运行您的进程要么修改与 hostPath 数据卷对应的节点上的文件/文件夹的权限 适用场景 绝大多数容器组并不需要使用 hostPath 数据卷但是少数情况下hostPath 数据卷非常有用 某容器需要访问 Docker可使用 hostPath 挂载宿主节点的 /var/lib/docker在容器中运行 cAdvisor使用 hostPath 挂载宿主节点的 /sys
configMap
描述
ConfigMap 提供了一种向容器组注入配置信息的途径。ConfigMap 中的数据可以被 Pod容器组中的容器作为一个数据卷挂载。
在数据卷中引用 ConfigMap 时
您可以直接引用整个 ConfigMap 到数据卷此时 ConfigMap 中的每一个 key 对应一个文件名value 对应该文件的内容您也可以只引用 ConfigMap 中的某一个名值对此时可以将 key 映射成一个新的文件名 将 ConfigMap 数据卷挂载到容器时如果该挂载点指定了 数据卷内子路径 subPath则该 ConfigMap 被改变后该容器挂载的内容仍然不变 适用场景
使用 ConfigMap 中的某一 key 作为文件名对应 value 作为文件内容替换 nginx 容器中的 /etc/nginx/conf.d/default.conf 配置文件。
secret
描述
secret 数据卷可以用来注入敏感信息例如密码到容器组。您可以将敏感信息存入 kubernetes secret 对象并通过 Volume数据卷以文件的形式挂载到容器组或容器。secret 数据卷使用 tmpfs基于 RAM 的文件系统挂载。 将 Secret 数据卷挂载到容器时如果该挂载点指定了 数据卷内子路径 subPath则该 Secret 被改变后该容器挂载的内容仍然不变。 适用场景 将 HTTPS 证书存入 kubernets secret并挂载到 /etc/nginx/conf.d/myhost.crt、/etc/nginx/conf.d/myhost.pem 路径用来配置 nginx 的 HTTPS 证书
persistentVolumeClaim
描述
persistentVolumeClaim 数据卷用来挂载 PersistentVolume 存储卷。PersistentVolume 存储卷为用户提供了一种在无需关心具体所在云环境的情况下”声明“ 所需持久化存储的方式。