上海网站制作软件,华久做网站,电力工程造价信息网,桂林人论坛风姿摄影为什么需要Pod
一些应用的实现是需要多个进程配合完成的#xff0c;由于容器实际上是一个“单进程”模型#xff0c;如果在容器里启动多个进程会存在进程管理的难题。在Kubernetes里面#xff0c;实际上会被定义为一个拥有四个容器的Pod。
Pod相当于进程组
Kubernetes 是…为什么需要Pod
一些应用的实现是需要多个进程配合完成的由于容器实际上是一个“单进程”模型如果在容器里启动多个进程会存在进程管理的难题。在Kubernetes里面实际上会被定义为一个拥有四个容器的Pod。
Pod相当于进程组
Kubernetes 是云时代的操作系统Pod相当于进程组容器就是一个个进程。Pod是Kubernetes分配资源的一个单位因为里面的容器要共享某些资源所以Pod也是Kubernetes的原子调度单位。 Pod是原子调度单位
为什么Pod必须是Kubernetes的原子调度单位下面一个例子解释 具有超亲密关系的容器的部署在ks8中会通过Pod去解决对于超亲密关系的描述如下
两个进程之间会发生文件交换前面提到的例子就是这样一个写日志一个读日志两个进程之间需要通过localhost或者说是本地的Socket去进行通信这种本地通信也是超亲密关系这两个容器或者是微服务之间需要发生非常频繁的 RPC 调用出于性能的考虑也希望它们是超亲密关系两个容器或者是应用它们需要共享某些 Linux Namespace。最简单常见的一个例子就是我有一个容器需要加入另一个容器的Network Namespace。这样我就能看到另一个容器的网络设备和它的网络信
息。
Pod的实现机制
Pod要解决的问题容器之间原本是被Linux Namespace和cgroups隔开的所以现在实际要解决的是怎么去打破这个隔离然后共享某些事情和某些信息。主要是解决网络和存储。
共享网络
在每个 Pod 里额外起一个Infra container小容器来共享整个 Pod 的 Network Namespace。由于有了这样一个 Infra container 之后其他所有容器都会通过 Join Network Namespace 的方式加入到Infra container的Network Namespace中。 Infra container是一个非常小的镜像大概100~200KB 左右是一个汇编语言写的、永远处于暂停状态的容器。
整个Pod的生命周期和Infra容器一致与其他容器无关。
共享存储
Pod中的容器声明挂载同一个volume通过这种方式实现存储共享。
容器设计模式
容器设计模式Sidecar在Pod定义一些专门的容器来执行主业务容器所需要的一些辅助工作。优势是将辅助功能同主业务容器解耦实现独立发布和能力重用。一些常用的场景如下
使用Init Container在主业务容器启动前将一些必要的文件或其他资源拷贝到共享的数据卷中主业务容器启动后直接就可以从数据卷中读取和使用。应用日志收集在Pod中启动一个Sidecar容器从共享的Volume中读取日志然后存到远程存储里面。 代理容器单独写一个 Proxy容器用来处理对接外部的服务集群它对外暴露出来只有一个 IP 地址就可以了。所以接下来业务容器主要访问Proxy然后由 Proxy 去连接这些服务集群 这里的关键在于 Pod 里面多个容器是通过 localhost 直接通信的。 适配器容器将业务容器暴露出来的接口转换为另一种格式。