Docker集群管理系列一
工具篇
刘光亚
gyliu513@gmail.com
Sina Weibo: @platformer
单节点Docker管理
Docker集群管理
Docker集群管理
• 需要解决的主要问题
– 资源调度
– 部署运行
– 服务发现
– 扩容缩容
– 网络隔离
Docker集群管理工具
• 当前主要工具
– OpenStack
– Google Kubernetes
– Docker Platform
– Fig
– CoreOS
Nova + Docker
• Nova集成
– 通过Nova compute来实现
– 添加了一个新的nova docker
drvier
– https://github.com/stackforge/no
va-docker
Nova + Docker
• 把Docker作为一种新的Hypervisor来处理,作为一个nova
compute的driver
– 通过nova scheduler来进行资源调度
– 通过Heat来管理部署运行,服务发现和扩容缩容,所有的
docker container作为VM来处理
– 通过Neutron来管理网络,GRE,vLan,VxLan等等,实现
网络隔离。
– 支持多租户,为不同租户设置不同的quota
• 不能利用Docker的一些比较高级的特性
– 容器关联
– 端口映射
– 不同网络模式的配置
• Host
• Bridge
• Container
• None
HEAT + Docker
• HEAT集成
– 添加了一个新的HEAT
Resource:
DockerInc::Docker::Container
– HEAT docker driver直接与docker
server交互
– 没有和nova,cinder,neutron
等交互
HEAT + Docker
• 优点
– 完全兼容docker API
– Docker所有参数可以在
heat的template进行设置
• 缺点
– 没有资源调度
– 没有网络管理
Magnum
• 新项目Magnum
– 为OpenStack添加一个新的服
务来管理docker container
– Container Service是Container
的一个集中管理服务
– 通过Gantt来进行资源调度,
挑选docker server来部署
container
– 兼容Kubernetes。
Magnum当前状态
• Framework已经成型
– Heat集成进行中
– Docker集成进行中
– Kubenetes集成进行中
– Gantt集成还未开始
• Docker集成目标
– 在Magnum添加Docker
Agent来和docker daemon交
互
• HEAT集成目标
– 通过Magnum创建k8s集群
– K8s可以部署在虚拟机或者物
理机上
– K8s集群创建完成后和
Magnum集成,提供container
服务
• k8s集成目标
– Magnum兼容k8s所有操作
– 现在主要集中在pod和service
Google Kubernetes
• 可以部署在物理机或者虚拟机甚至Docker Container
• Google Compute Engine
– 官方推荐
– 一键安装
• Vagrant with VirtualBox
• Rackspace
• OpenStack Heat
• Azure
• vSphere
• Digital Ocean
Google Kubernetes
• 主要概念
– Pod:是Kubernetes最基本的部
署调度单元,包含多个
container,逻辑上表示某种应
用的一个实例。
– Service:是pod的路由代理抽象,
用于解决pod的高可用的问题。
– Replication Controller:是pod的
复制抽象,用于解决pod的扩容
缩容问题。
– Label, 用一组key/val让pod与
Service和ReplicationController关
联, Label Selector为多个pod提
供LB
Google Kubernetes组件
• Master
– APIServer:作为kubernetes系统的入口,封装了核心对象的增删改查操作,
以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将
持久化到etcd(一个分布式强一致性的key/value存储)。
– Scheduler:负责集群的资源调度,为新建的pod分配机器。
– controller-manager:负责执行各种控制器,目前有两类:
• endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service
到pod的映射总是最新的。
• replication-controller:定期关联replicationController和pod,保证replicationController定
义的复制数量与实际运行pod的数量总是一致的。
• Minion (最新版已改名为node)
– kubelet:负责管控docker容器,如启动/停止、监控运行状态等。
– proxy:负责为pod提供代理。
Google Kubernetes
• 网络模型
– 为每一个Minions配置网络
• 10.244.1.1
• 10.244.2.1
– Pod
• 每一个Pod有n+1个container
• 每一个pod只有一个IP
– Proxy负责load balance,对用
户请求进行转发
– Replication Controller监控
etcd来获取所有pod信息,根
据replication数量来决定创建
还是删除pod
Proxy Proxy
10.244.1.2
Redis-
slave-1
Redis-
master
Br:
10.244.1.1
Api server
etcd
Br:
10.244.2.1
10.244.1.3
10.244.2.2
Redis-
slave-2
Redis-
php
10.244.2.3
Replication
Controller
Master
Minion-1 Minion-2
Port 10000
Port 10001
Redis-slave: Port 10001 ->
10.244.1.2:6379 10.244.2.2:6379
Redis-master: Port 10000 ->
10:244.1.3:6379
Port 10000
Port 10001
Google Kubernetes
• 优点
– 当前最好的Docker集群管理工具
– 组件少,容易理解
– 容易安装
• 缺点
– 不能管理Docker Image
– Pod没有floating IP
– 不支持Multi-tenant
– 没有网络隔离
– 不能定义Docker Application之间的依赖关系
Google
Kubernetes
Docker Platform
• 主要组件
– Machine:创建Docker Host
– Compose:服务编排
– Swarm:资源调度
– 没有网络管理的组件
Docker Platform
• Docker Machine
– Docker Machine是一个简化
Docker安装的命令行工具,通过
一个简单的命令行即可在相应的
平台上安装Docker,比如
VirtualBox、 Digital Ocean、
Microsoft Azure。
– 架构便于第三方集成,可以很方
便的开发Machine Driver来和
Sotflayer,阿里云等集成。
Docker Platform
• Swarm
– Docker Swarm是在Machine所提供的功能的基
础上优化主机资源的利用率和容错服务
– Docker Swarm支持用户创建可运行Docker
Daemon的主机资源池,然后在资源池中运行
Docker容器。
– Docker Swarm可以管理工作负载并维护集群状
态。
– 通过Filter和Strategy来调度,类似于Nova
scheduler
• Filter用来对机器进行过滤
• Strategy来对filter挑选出来的机器进行按照规则排序
Docker Platform
• Docker Compose
– Docker Compose可以让用户在集
群中部署分布式应用。
– Docker Compose属于一个“应用
层”的服务,用户可以定义哪个
容器组运行哪个应用,它支持动
态改变应用,并在需要时扩展。
– 类似于Heat的template和
Kubernetes的manifest
Docker Platform
• Docker Compose一键部署Docker应用
资源调度
• OpenStack,Kubernetes,Swarm
– 先过滤(Filter)
– 后排序(Weight)
系列二:深度解析Kubernetes
Thank You

Docker集群管理 工具篇

  • 1.
  • 2.
  • 3.
  • 4.
    Docker集群管理 • 需要解决的主要问题 – 资源调度 –部署运行 – 服务发现 – 扩容缩容 – 网络隔离
  • 5.
    Docker集群管理工具 • 当前主要工具 – OpenStack –Google Kubernetes – Docker Platform – Fig – CoreOS
  • 6.
    Nova + Docker •Nova集成 – 通过Nova compute来实现 – 添加了一个新的nova docker drvier – https://github.com/stackforge/no va-docker
  • 7.
    Nova + Docker •把Docker作为一种新的Hypervisor来处理,作为一个nova compute的driver – 通过nova scheduler来进行资源调度 – 通过Heat来管理部署运行,服务发现和扩容缩容,所有的 docker container作为VM来处理 – 通过Neutron来管理网络,GRE,vLan,VxLan等等,实现 网络隔离。 – 支持多租户,为不同租户设置不同的quota • 不能利用Docker的一些比较高级的特性 – 容器关联 – 端口映射 – 不同网络模式的配置 • Host • Bridge • Container • None
  • 8.
    HEAT + Docker •HEAT集成 – 添加了一个新的HEAT Resource: DockerInc::Docker::Container – HEAT docker driver直接与docker server交互 – 没有和nova,cinder,neutron 等交互
  • 9.
    HEAT + Docker •优点 – 完全兼容docker API – Docker所有参数可以在 heat的template进行设置 • 缺点 – 没有资源调度 – 没有网络管理
  • 10.
    Magnum • 新项目Magnum – 为OpenStack添加一个新的服 务来管理dockercontainer – Container Service是Container 的一个集中管理服务 – 通过Gantt来进行资源调度, 挑选docker server来部署 container – 兼容Kubernetes。
  • 11.
    Magnum当前状态 • Framework已经成型 – Heat集成进行中 –Docker集成进行中 – Kubenetes集成进行中 – Gantt集成还未开始 • Docker集成目标 – 在Magnum添加Docker Agent来和docker daemon交 互 • HEAT集成目标 – 通过Magnum创建k8s集群 – K8s可以部署在虚拟机或者物 理机上 – K8s集群创建完成后和 Magnum集成,提供container 服务 • k8s集成目标 – Magnum兼容k8s所有操作 – 现在主要集中在pod和service
  • 12.
    Google Kubernetes • 可以部署在物理机或者虚拟机甚至DockerContainer • Google Compute Engine – 官方推荐 – 一键安装 • Vagrant with VirtualBox • Rackspace • OpenStack Heat • Azure • vSphere • Digital Ocean
  • 13.
    Google Kubernetes • 主要概念 –Pod:是Kubernetes最基本的部 署调度单元,包含多个 container,逻辑上表示某种应 用的一个实例。 – Service:是pod的路由代理抽象, 用于解决pod的高可用的问题。 – Replication Controller:是pod的 复制抽象,用于解决pod的扩容 缩容问题。 – Label, 用一组key/val让pod与 Service和ReplicationController关 联, Label Selector为多个pod提 供LB
  • 14.
    Google Kubernetes组件 • Master –APIServer:作为kubernetes系统的入口,封装了核心对象的增删改查操作, 以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将 持久化到etcd(一个分布式强一致性的key/value存储)。 – Scheduler:负责集群的资源调度,为新建的pod分配机器。 – controller-manager:负责执行各种控制器,目前有两类: • endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service 到pod的映射总是最新的。 • replication-controller:定期关联replicationController和pod,保证replicationController定 义的复制数量与实际运行pod的数量总是一致的。 • Minion (最新版已改名为node) – kubelet:负责管控docker容器,如启动/停止、监控运行状态等。 – proxy:负责为pod提供代理。
  • 15.
    Google Kubernetes • 网络模型 –为每一个Minions配置网络 • 10.244.1.1 • 10.244.2.1 – Pod • 每一个Pod有n+1个container • 每一个pod只有一个IP – Proxy负责load balance,对用 户请求进行转发 – Replication Controller监控 etcd来获取所有pod信息,根 据replication数量来决定创建 还是删除pod Proxy Proxy 10.244.1.2 Redis- slave-1 Redis- master Br: 10.244.1.1 Api server etcd Br: 10.244.2.1 10.244.1.3 10.244.2.2 Redis- slave-2 Redis- php 10.244.2.3 Replication Controller Master Minion-1 Minion-2 Port 10000 Port 10001 Redis-slave: Port 10001 -> 10.244.1.2:6379 10.244.2.2:6379 Redis-master: Port 10000 -> 10:244.1.3:6379 Port 10000 Port 10001
  • 16.
    Google Kubernetes • 优点 –当前最好的Docker集群管理工具 – 组件少,容易理解 – 容易安装 • 缺点 – 不能管理Docker Image – Pod没有floating IP – 不支持Multi-tenant – 没有网络隔离 – 不能定义Docker Application之间的依赖关系
  • 17.
  • 18.
    Docker Platform • 主要组件 –Machine:创建Docker Host – Compose:服务编排 – Swarm:资源调度 – 没有网络管理的组件
  • 19.
    Docker Platform • DockerMachine – Docker Machine是一个简化 Docker安装的命令行工具,通过 一个简单的命令行即可在相应的 平台上安装Docker,比如 VirtualBox、 Digital Ocean、 Microsoft Azure。 – 架构便于第三方集成,可以很方 便的开发Machine Driver来和 Sotflayer,阿里云等集成。
  • 20.
    Docker Platform • Swarm –Docker Swarm是在Machine所提供的功能的基 础上优化主机资源的利用率和容错服务 – Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行 Docker容器。 – Docker Swarm可以管理工作负载并维护集群状 态。 – 通过Filter和Strategy来调度,类似于Nova scheduler • Filter用来对机器进行过滤 • Strategy来对filter挑选出来的机器进行按照规则排序
  • 21.
    Docker Platform • DockerCompose – Docker Compose可以让用户在集 群中部署分布式应用。 – Docker Compose属于一个“应用 层”的服务,用户可以定义哪个 容器组运行哪个应用,它支持动 态改变应用,并在需要时扩展。 – 类似于Heat的template和 Kubernetes的manifest
  • 22.
    Docker Platform • DockerCompose一键部署Docker应用
  • 23.
  • 24.

Editor's Notes

  • #14 Pod比如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三个container的pod。 Service因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。 RC:通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过replicationController,我们可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个pod,并且保证实际运行pod数量总是与该复制数量相等(例如,当前某个pod宕机时,自动创建新的pod来替换)。 可以看到,service和replicationController只是建立在pod之上的抽象,最终是要作用于pod的,那么它们如何跟pod联系起来呢?这就要引入label的概念:label其实很好理解,就是为pod加上可用于搜索或关联的一组key/value标签,而service和replicationController正是通过label来与pod关联的。如下图所示,有三个pod都有label为"app=backend",创建service和replicationController时可以指定同样的label:"app=backend",再通过label selector机制,就将它们与这三个pod关联起来了。例如,当有其他frontend pod访问该service时,自动会转发到其中的一个backend pod。
  • #15  调度:这部分工作分出来变成一个组件,可以很方便地替换成其他的调度器。现在已经有了Mesos的插件来帮助Kubernetes来做资源调度了 Kubelet:它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。 Proxy:它会定期从etcd获取所有的service,并根据service信息创建代理,对用户请求进行转发
  • #18 cAdvisor 是谷歌公司用来分析运行中的 Docker 容器的资源占用以及性能特性的工具,主要为资源调度提供一些参数 cAdvisor 主要用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资源使用数据。
  • #20 Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的。而有了Machine后,不管是在笔记本、虚拟机还是公有云实例上,用户仅仅需要一个命令....当然那你需要先安装Machine。