使用Docker SwarmKit 进行集群管理和服务编排

使用Docker SwarmKit 进行集群管理和服务编排

1. Docker 容器编排 陈东洛 dong@docker.com --------------------
3. 软件开发的演进 - 单机大型软件到微服务应用(App) • • • • 过去几十年软件开发从单体软件向微服务架构持续过渡 对互联网行业走在最前端 功能单元进行封装,提高模块独立性,提高工具易用性在各种环境中出现 Docker容器的出现受到了社区的欢迎和支持
4. Docker的可移植性和敏捷性
5. 微服务带来的挑战-复杂开发部署环境 • Docker解决了大量开发问题,大量企业将Docker用于 生产环境,部署问题是当前重点 • 部署的难题:资源管理,任务调度,系统安全,网络 通讯,运维开销 • Docker通过容器编排工具来实现开发和部署的一致性
6. 为什么Docker要做容器编排 • Docker的目标 - Build, Ship, Run Application • 外部的集群管理和编排并未以Docker容器为核心  往往带有开发企业的业务特征  往往以运维为出发点,不解决开发者的问题  忽视Docker的特性 • 开源社区向Docker提出了很具体的要求  支持微服务体系和快速迭代,涵盖容器生命周期管理  简单,安全,高效的集群方案  网络可移植性  解决开发,测试,生产环境一致性问题  和现有Docker工具兼容 • Docker一直在做容器编排,并非从1.12 开始  Swarm,Compose,Machine 作为早期的探索  在新的Swarmkit中实现了诸多功能,依然保持Docker的简单灵活特性
7. Docker在推劢容器部署上的项目 • Docker的各个项目都是围绕支持容器编排的
8. 容器编排问题 • 编排:如何将任务匹配到对应的计算,网络,存储资源上来提供服务 • 集群管理:如何管理各种系统资源,包括计算,存储,网络;如何自劢的处理系统变化,如节点离线 • 任务调度:如何调度任务到对应节点并路由请求,如何管理任务的整个生命周期 • 用户接口:如何定义服务架构来进行编排 • 安全性:如何实现端到端安全保障 • 适用性:如何解决公有云,私有云和混合云的部署;如何协劣企业进行测试及生产环境部署
9. Docker编排容器的演进 Docker 1.12前 Docker 1.12 使用Compose+Swarm 使用Swarmkit 使用Docker的Service API来管理服务;服务定义任务,任务由 使用Docker的Container API来直接管理容器(简单,直接) 容器来实现 服务管理由外部来控制 服务生命周期内置 系统不保存状态,网络状态要由外部来保存 系统状态保存在内置raft store上 负载均衡由外部提供 直接支持对服务的负载均衡 手工配置TLS 集群内置CA进行,所有通讯加密 网络状态外部保存 网络状态内置,通过gossip来传播
10. Docker 集群架构演进(外置Swarm) • Docker 1.12发布前,用户使用Swarm和Compose来调度容器 • 容器的生命周期管理需要外部驱劢 • 网络通过外部K/V来登记 • 负载均衡需要通过外部容器来实现
11. Docker 集群架构演进(Swarm Mode) • Docker 1.12推出Swarm Mode,支持微服务概念 • 使用开源etcd raft store来保存系统状态 • 内置安全模型,服务发现,负载均衡
12. Swarm Mode的架构图 Raft consensus group Internal Distributed State Store Manager Manager Manager gRPC Worker Worker Worker Worker Worker Worker Worker Gossip network
13. Swarm Mode的架构 • Docker发布以来的一次重大架构变化,引入了集群管理和服务;同时向后兼容 • 多个管理者节点(manager)使用raft实现(coreos/etcd)组成高可用,强一致性Quorum以管理集群  内置分布式K/V仓库保存系统状态,支持批处理状态更新  多个管理者分担工人(worker)连接 • 管理者进行资源管理,调度任务,监测服务,通过gRPC进行任务分发和状态收集 • 工人节点执行任务,反馈任务状态 • 工人节点通过gossip协议实现分布式消息同步,消除overlay延时线性增长问题 • 内置CA进行秘钥分发和更新,所有节点通讯加密
14. Swarm Mode引入服务概念 • 服务(service)作为集群的操作对象,服务由任务(task)来实现,容器作为实现任务的一个执行方式,内 置了容器生命周期管理 • 服务可以指定任务数量,也可以是全局任务(每个节点运行一个) • 调度器管理任务的目标状态(desired state),分配资源给任务,选择节点来执行任务 • 节点负责将任务的状态推劢到目标状态,反馈状态给管理节点 • 支持服务配置更新,滚劢更新,回滚
15. 节点功能模块 docker service create Manager 管理节点 Worker 工人节点 R A F T API Orchestrator Allocator Scheduler Dispatcher 接受Docker Swarmkit指令 为服务(Service)创建任务(Task) 分配IP地址 选择适当的节点来匹配任务 向节点发布更新,收集节点上的信息 Worker 从管理节点去接受任务,并将任务情况反馈给管理节点 Executor 执行分配到的任务
16. Docker 1.12网络 Multi-host Networking without external k/v store • 支持集群模式,无需外部K/V • DNS服务发现 Secure Control-Plane • 内置负载均衡 Secure Data-Plane CNM • 分布式控制 • 高可扩展性 Load Balancing Service Discovery • 所有网络通讯加密 Routing Mesh
17. External Loadbalancer (optional) 服务请求路由 8080 8080 Worker1 • 内置IPVS路由转发功能 Worker2 8080->80 8080->80 VIP LB VIP LB • 每个节点都参与负载均衡分发,接受对应的端口 Ingress Network 访问,并进行端口转换 • 内部负载均衡和外部负载均衡用同样的方式处理 Task1 ServiceA Task1 ServiceA Task1 ServiceA
18. Swarm Mode的安全性 • TLS任何时候都打开,所有节点通讯均加密 • 节点加入是初始secret决定其为管理节点或工人节点 • 管理节点内置CA,亦支持外部CA • 密钥定时更新 • worker通过manager获得密钥,用于加密gossip信息
19. 可扩展性问题 Swarm2K (Chanwit Kaewkasi)
20. 使用及演示 ● ● ● ● ● ● ● ● ● ● ● Docker swarm init Docker swarm join Docker swarm leave Docker node ls Docker node Docker service ls Docker service create Docker service update Docker service ps Docker service update Docker service rm
21. • 生产环境manager使用Drain模式,避免管理节点资源紧张 • 节点Drain状态可以用作系统更新 • 使用Constraint来选择业务运行节点 常用模式 • 应用load balancer来提供服务 • 结合监控进行auto-scale • 使用Health Check,1.13会有更多的支持 • 运用微服务设计模式
22. • Docker在中国有广泛的应用,公有云,私有云和混合云都有很多 的使用 Docker在中国的发展 • 中国公司和工程师直接向Docker项目贡献了很多代码和问题报告 • 容器在中国信息化和产业升级里会起到很大的推动作用 • Docker非常乐意支持中国社区发展
23. 软件开发部署问题 Docker的方法 开发和生产环境不一致 相同的开发和生产环境 可移植性差,不同环境要做非常多开发和测试 容器镜像包含系统依赖,可移植性高 Docker解决什么问题 持续交付难 自动生成镜像,测试,增量部署(只要传输 image更新部分) VM开销大,虚拟开销大,利用率不高 容器开销减少 进程环境隔离问题 容器提供了业务运行边界 服务伸缩速度慢,难以应付突发峰值 容器启动快 资源预留问题 按需分配
24. Docker的蓬勃生态
25. Docker和虚拟机的区别
26. THANK YOU Dongluo Chen dong@docker.com