专栏上一期,我给你讲解了容器运维平台的两个关键组成:镜像仓库和资源调度。复习一下,镜像仓库解决的是 Docker 镜像存储和访问的问题,资源调度决定了 Docker 镜像可以分发到哪些机器上的问题。这两个问题解决后,你就该考虑如何在集群中创建容器,也就是容器如何调度的问题;容器创建后如何运作才能对外提供服务,也就是服务如何编排的问题。下面我们就一起看看容器调度和服务编排都是如何解决的。
容器调度
容器调度的问题,说的是现在集群里有一批可用的物理机或者虚拟机,当服务需要发布的时候,该选择哪些机器部署容器的问题。
比如集群里只有 10 台机器,并且已经有 5 台机器运行着其他容器,剩余 5 台机器空闲着,如果此时有一个服务要发布,但只需要 3 台机器就行了,这个时候可以靠运维人为的从 5 台空闲的机器中选取 3 台机器,然后把服务的 Docker 镜像下载下来,再启动 Docker 容器服务就算完成发布。但如果集群机器的规模扩大到几十台或者上百台时,要发布的服务也有几十个或者上百个的时候,由于每个服务对容器的要求,以及每台机器上正在运行的容器情况变得很复杂,就不太可能靠人肉运维了。
这时就需要有专门的容器调度系统了,为此也诞生了不少基于 Docker 的容器调度系统,比如 Docker 原生的调度系统Swarm、Mesosphere 出品的Mesos,以及 Google 开源的大名鼎鼎的Kubernetes。下面我就结合微博的实践经验,给你讲讲容器调度要解决哪些问题。