The pod and service of kubernetes

我们知道pod和service是kubernetes中非常核心的两个概念,要了解这两个东西,就需要看看它们解决了什么问题。

Pod要解决的问题是:数据共享和交互

而Service,是解决Naming问题的另一种思路

1. Pod要解决什么问题?

共享是Pod最原始的需求,早在google的borg论文里,我们就能看到类似的场景,例如borg中的alloc通常用来运行多个Job,举例:有两个Job,一个job是web server实例,另一个job是负责日志收集

1.1 数据共享

数据共享是最常见的一个场景,pod中有volume来解决这种问题,所谓volume,其实就是在不同的容器之间共享一块磁盘。docker里可以用 –volume= 等用法

1.2 容器交互

交互是更深一层次的共享

我们知道容器之间是天然隔离的,除非使用特别hack的方法,否则你根本就无法看到另外一个容器里的任何东西,事实上你除了能看到你自己之外根本就不知道别人的存在。

多容器共生是这个问题的原始需求,AB容器是一个服务下的两个模块,相互依赖共存亡,既需要做好容器间的隔离,例如CPU、内存、网络带宽等等,又需要解决模块间交互的问题。前面我们说的数据共享只是容器交互最简单的一种形式,除此之外,我们需要解决的共享需求有:

  • 网络
  • 进程体系
  • 文件系统

docker提供一些方法来解决这些问题,例如容器之间共享网络可以使用如下命令:

docker run --tty -i --net=container:11e9bc1b8f5be ubuntu /bin/bash

不过目前kubernetes似乎仅仅支持共享网络,还不支持进程体系、文件系统之间的共享