Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Docker集群管理 工具篇

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
Docker open stack
Docker open stack
Wird geladen in …3
×

Hier ansehen

1 von 24 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (20)

Anzeige

Ähnlich wie Docker集群管理 工具篇 (20)

Anzeige

Aktuellste (20)

Docker集群管理 工具篇

  1. 1. Docker集群管理系列一 工具篇 刘光亚 gyliu513@gmail.com Sina Weibo: @platformer
  2. 2. 单节点Docker管理
  3. 3. Docker集群管理
  4. 4. Docker集群管理 • 需要解决的主要问题 – 资源调度 – 部署运行 – 服务发现 – 扩容缩容 – 网络隔离
  5. 5. Docker集群管理工具 • 当前主要工具 – OpenStack – Google Kubernetes – Docker Platform – Fig – CoreOS
  6. 6. Nova + Docker • Nova集成 – 通过Nova compute来实现 – 添加了一个新的nova docker drvier – https://github.com/stackforge/no va-docker
  7. 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. 8. HEAT + Docker • HEAT集成 – 添加了一个新的HEAT Resource: DockerInc::Docker::Container – HEAT docker driver直接与docker server交互 – 没有和nova,cinder,neutron 等交互
  9. 9. HEAT + Docker • 优点 – 完全兼容docker API – Docker所有参数可以在 heat的template进行设置 • 缺点 – 没有资源调度 – 没有网络管理
  10. 10. Magnum • 新项目Magnum – 为OpenStack添加一个新的服 务来管理docker container – Container Service是Container 的一个集中管理服务 – 通过Gantt来进行资源调度, 挑选docker server来部署 container – 兼容Kubernetes。
  11. 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. 12. Google Kubernetes • 可以部署在物理机或者虚拟机甚至Docker Container • Google Compute Engine – 官方推荐 – 一键安装 • Vagrant with VirtualBox • Rackspace • OpenStack Heat • Azure • vSphere • Digital Ocean
  13. 13. Google Kubernetes • 主要概念 – Pod:是Kubernetes最基本的部 署调度单元,包含多个 container,逻辑上表示某种应 用的一个实例。 – Service:是pod的路由代理抽象, 用于解决pod的高可用的问题。 – Replication Controller:是pod的 复制抽象,用于解决pod的扩容 缩容问题。 – Label, 用一组key/val让pod与 Service和ReplicationController关 联, Label Selector为多个pod提 供LB
  14. 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. 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. 16. Google Kubernetes • 优点 – 当前最好的Docker集群管理工具 – 组件少,容易理解 – 容易安装 • 缺点 – 不能管理Docker Image – Pod没有floating IP – 不支持Multi-tenant – 没有网络隔离 – 不能定义Docker Application之间的依赖关系
  17. 17. Google Kubernetes
  18. 18. Docker Platform • 主要组件 – Machine:创建Docker Host – Compose:服务编排 – Swarm:资源调度 – 没有网络管理的组件
  19. 19. Docker Platform • Docker Machine – Docker Machine是一个简化 Docker安装的命令行工具,通过 一个简单的命令行即可在相应的 平台上安装Docker,比如 VirtualBox、 Digital Ocean、 Microsoft Azure。 – 架构便于第三方集成,可以很方 便的开发Machine Driver来和 Sotflayer,阿里云等集成。
  20. 20. Docker Platform • Swarm – Docker Swarm是在Machine所提供的功能的基 础上优化主机资源的利用率和容错服务 – Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行 Docker容器。 – Docker Swarm可以管理工作负载并维护集群状 态。 – 通过Filter和Strategy来调度,类似于Nova scheduler • Filter用来对机器进行过滤 • Strategy来对filter挑选出来的机器进行按照规则排序
  21. 21. Docker Platform • Docker Compose – Docker Compose可以让用户在集 群中部署分布式应用。 – Docker Compose属于一个“应用 层”的服务,用户可以定义哪个 容器组运行哪个应用,它支持动 态改变应用,并在需要时扩展。 – 类似于Heat的template和 Kubernetes的manifest
  22. 22. Docker Platform • Docker Compose一键部署Docker应用
  23. 23. 资源调度 • OpenStack,Kubernetes,Swarm – 先过滤(Filter) – 后排序(Weight)
  24. 24. 系列二:深度解析Kubernetes Thank You

Hinweis der Redaktion

  • 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。

  • 调度:这部分工作分出来变成一个组件,可以很方便地替换成其他的调度器。现在已经有了Mesos的插件来帮助Kubernetes来做资源调度了

    Kubelet:它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。

    Proxy:它会定期从etcd获取所有的service,并根据service信息创建代理,对用户请求进行转发

  • cAdvisor 是谷歌公司用来分析运行中的 Docker 容器的资源占用以及性能特性的工具,主要为资源调度提供一些参数

    cAdvisor 主要用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资源使用数据。
  • Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的。而有了Machine后,不管是在笔记本、虚拟机还是公有云实例上,用户仅仅需要一个命令....当然那你需要先安装Machine。

×