K8S为什么需要 Pod
2022-04-15 16:44:26 0 举报
AI智能生成
k8s、docker、pod
作者其他创作
大纲/内容
Docker 容器的本质
分支主题
Docker Container 本质上就是被添加上了各种各样 namespace 的用户进程,在 Linux 操作系统中使用 clone() 系统调用实现
假如有 A、B 两个进程需要协同工作,那么如果使用 docker run 的话,必须将这两个进程放入到同一个 namespace 命名空间下。那么此时就需要考虑到底哪个进程先启动,也就是说,进程和进程之间形成了拓扑关系,无疑增加了容器调度的复杂性
Pod
组成
分支主题
一个 Pod 通常由一个或者是多个用户进程所组成,并且还会存在一个 infra 容器,其镜像名称名为 k8s.gcr.io/pause
infra 容器其实就是 Pod 的核心
作用
打包
前面我们有提到,在实际的系统运行中,进程并不是孤立存在的,而是进行协同工作的,例如 Web Server 和日志收集器。Web Server 将日志写入文件中,而日志收集器则不间断地从文件中读取日志并发送给外部日志收集系统。此时 Web Server 进程和日志收集进程就必须要共享同一个挂载命名空间
那么在进行容器调度时,假如 Web Server 需要 2G 内存空间,Log Collector 需要 100M 内存空间,Node-A 还有 2G 内存空间可用,Node-B 还有 3G 内存空间可用
这两个容器必须要被调度到同一个节点上,如果被调度到 Node-A,那么在调度剩下的一个容器时就会发现没有内存可用了。如果被调度到 Node-B,如果此时 Node-B 可用内存也变成了 2G 的话,同样会导致调度失败
这就是单一容器成组调度的问题,Kubernetes 通过引入 Pod 这一最小调度单位来解决这个问题,把两个容器打包成一个整体,然后按所有容器所需资源进行调度
管理多个容器
通过 Pod 对多个容器进行打包后,Pod 就可以对多个容器同时进行管理了,包括容器的启动顺序、容器运行崩溃后的重启,设置容器的网络配置、存储配置等等
Infra Container
Kubernetes 为了能够让多个容器共享同一个 Namespace,并且不去预设容器的启动顺序,从而引入了 Infra 容器
Infra 容器永远是 Pod 中第一个启动的容器,其作用就是预先创建好各种各样的 Namespace,然后让其它容器直接“加入”到这些 Namespace 中,从而能够进行紧密协作
0 条评论
下一页