docker 集群(swarm)与服务编排(service orchestration)入门
服务集群管理与编排是云应用的基础。企业对云的期待已仅是资源弹性、成本优势等,业务的稳定性与灵活性是新的目标。本文使用 docker swarm mode 官方资料(略有调整),以案例体验为中心,介绍服务管理技术核心技术,包括:建立集群、部署服务、热按需部署、热更新、撤换节点、负载均衡等企业应用关切的需求,初步展现“Build, Ship and Run Any App, OnCloudy”。
1、概述
2016年初,docker 发布 V1.12 版本,它集成了 docker swarm 产品1,交付了服务编排(service orchestration)功能,直接引发了与 Google 的 K8s 大战23。作为企业云服务市场最重要产品之一,直接关系市场份额,重要性不言而喻。
为什么这么重要,做一点程序体验一下,总比吃瓜群众“听谣传谣”好。docker 官方文档列了十条重要的特性4,且官方号称原生并宣布在AWS上大规模测试表明比友商产品快若干倍5,大家自己翻译了就知道 google 为什么急了,“不给活路”阿!。本文以体验服务编排为先,原理就暂时略了。
2、概念、与环境准备
2.1 概念
一台或以上安装 docker 引擎 PC 或 虚拟机,它们组成一个集群(swarm)。
节点(node)是加入集群的机器。节点分为管理节点(manage node)和工作节点(worker node)。管理节点起协调作用,将任务(tasks)分配给工作节点。
服务(service)是运行于节点的容器,按配置数量自动分布的工作节点上,每个服务可执行若干任务。任务(task)由管理服务器分发到其中一个服务,服务执行为原子(atomic)操作,要么成功要么失败。
负载均衡(Load balancing)分为入口(ingress)负载均衡模式和内部(internal)负载均衡模式。
2.2 环境准备
三台 PC 或 虚拟机。官方要求:
- three networked host machines
- Docker Engine 1.12 or later installed
- the IP address of the manager machine
- open ports between the hosts
友情提示:三台机器建议都是新装系统,同一版本 docker 引擎。
检查设置:
- ssh 所有 VM
- VM 相互 ping 通
swarm 需要的网络端口是:
- TCP port 2377 集群管理通讯
- TCP and UDP port 7946 节点间通讯
- TCP and UDP port 4789 for overlay network traffic
3、集群初步体验
本部分参考文档6
3.1 创建集群
1、ssh 到 manager ,或 manager 是图形界面主机:
$ ssh root@192.168.56.100
2、创建 swarm 。执行
$ docker swarm init --advertise-addr 192.168.56.100
输出(请拷贝下来):
Swarm initialized: current node (avab30mxipj04s0rcqz9a9wyz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-3fi89zq1yqz85t6kjdl33p034y0mkrxozwj3q6hmkec72t1bp5-2ab8ezanlqgzv95ukjssip5fz \
192.168.56.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
3、检查结果
$ docker info
找到: