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
主要概念 Pod: 是 Kubernetes 最基本的部署调度单元, 包含多个 container, 逻辑上表示某种应用的一个实例 Service: 是 pod 的路由代理抽象, 用于解决 pod 的高可用的问题 Replication Controller: 是 pod 的复制抽象, 用于解决 pod 的扩容缩容问题 Label, 用一组 key/val 让 pod 与 Service 和 ReplicationController 关联, Label Selector 为多个 pod 提供 LB Google Kubernetes
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 Port 10000 Port 10001 Proxy 10.244.1.2 Api server Minion-1 Master etcd Br: 10.244.1.1 10.244.1.3 Replication Controller 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 Proxy 10.244.2.2 Minion-2 Br: 10.244.2.1 10.244.2.3 Redisslave-1 Redismaster Redisslave-2 Redisphp
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