-
Docker集群管理
-
Swarm基础
Swarm在Docker1.12版本之前属于一个独立的项目,在Docker1.12版本发布之后,该项目合并到了Docker中,成为Docker的一个子命令,即Swarm集群模式。目前,Swarm是Docker社区提供的唯一的一个原生支持Docker集群管理的工具。它可以把多个Docker主机组成的系统转换为单一的虚拟Docker主机, 使得容器可以组成跨主机的子网网络。
在Docker1.12版本之前,Docker在集群管理上一直依靠第三方工具。以前的Docker服务自身只能在单台主机上进行操作, 官方并没有真正意义上的集群管理方案。 直到Docker 1.12版的发布,Docker引擎在多主机 、多容器的集群管理上才有了进一步的改进和完善,该版本的Docker内嵌了Swarm mode集群管理模式。从Docker 1.13版开始,DockerSwarm又有了更丰富的功能,比如正式 支持DockerStack等。
原理如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。
-
swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
-
work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
-
Docker Swarm命令
1.Swarm初始化docker swarm init
初始化集群的子命令docker swarm init
2.加入集群docker swarm join
-
管理添加节点的口令docker swarm join-token
swarm添加节点时需要管理节点生成一个口令,待添加的子节点需要凭借这个口令才能加入集群,这个子命令docker swarm join-token更加简单,主要用于管理集群口令,该子命令只能用于管理节点。
--rotate表示持续输出口令
-
离开集群docker swarm leave
docker swarm leave用于退出当前集群
-
解锁集群docker swarm unlock
解锁集群的命令docker swarm unlock,用于解除锁定的swarm集群。
-
管理解锁密钥docker swarm unlock-key
docker swarm unlock-key这个命令的选项与docker swarm join-token一致
-
更新集群docker swarm update
-
-
Docker Node命令
-
docker node demote
将一个或多个节点从群集中的管理器降级。
-
docker node inspect
在一个或多个节点上显示详细信息
3.docker node ls
列出群中的节点
4.docker node promote
将一个或多个节点提升为群集中的管理器。
5.docker node ps
列出在一个或多个节点上运行的任务,默认为当前节点
6.docker node rm
从群中删除一个或多个节点
7.docker node update
更新节点
-
-
Docker Stack命令
-
部署Docker栈docker stack deploy
-
查看所有栈docker stack ls
3.列出堆栈中的任务docker stack ps
4.移除一个或多个堆栈docker stack rm
5.列出堆栈中的服务docker stack services
-
-
Docker集群网络
搭建一个Docker集群网络,为了方便演示跨主机网络,我们需要用到一个工具--Docker Machine,这个工具与Docker Compose,Docker Swarm一起称为Docker三剑客。
安装machine
base=https://github.com/docker/machine/releases/download/v0.16.2 &&curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
这是因为没有安装virtualbox虚拟机,如下,先设置yum源,生成缓存。
yum安装virtualbox
在创建虚拟机的时候报错
输入/sbin/vboxconfig检查配置,可以发现内核一些模块未安装,按照提示中的指引按照。
yum install gcc make perl
yum install kernel-devel-3.10.0-1160.31.1.e17.x86_64
如果你的宿主机上的软件为vmware要勾选下图选项
然后再到https://github.com/boot2docker/boot2docker/releases/
下载boot2docker.iso文件放到/root/.docker/machine/cache下。
首先使用docker machine创建一个虚拟机作为manager节点
目前两台虚拟机是没有联系的,实际生产中是使用物理机或者是云主机作为集群机器的,在这里使用的时machine创建的,还可以使用docker-machine ssh命令连接虚拟机。
用--listen-addr指定监听的IP与端口,实际的Swarm命令格式如下:
docker swarm init --listen-addr <MANGER-IP>:<PORT>
上面在join命令中可以添加—listen-addr $WORKER1_IP:2377作为监听设备,因为有时候可能会遇到把一个work节点提升为manager节点的可能,在这里就不需要了。
注意:在遇到双网卡的时候。可以指定使用一个IP,不然可能会报错。
初始化成功后。现在我们新建了一个有两个节点的"集群",进入其中一个管理节点,使用Docker Node命令来查看节点信息:
现在每个节点都归属于swarm,并都处在待机状态。Manager1是领导者,work1是工人。
我们继续创建虚拟机manager2,worker2,worker3,现在共有五个虚拟机,使用docker-machine ls查看
注意manager2是作为manager的级别加入集群,需要获取manager的token,如果是作为worker节点就需要获取worker节点的token。如下
可以看到宿主机作为manager加入集群了,意味着在宿主机上就可以去管理集群了,不用再使用docker-machine ssh了。
可以看到在swarm上默认已经有了一个名为ingress的overlay网络,默认在swarm里使用,我们新建一个overlay网络。
使用docker-machine ssh manager1 docker pull nginx:alpine
可以看到nginx运行在worker1和manager2节点上。
首先使用machine进入manager2节点,然后使用docker exec -i命令进入容器中去ping运行在worker1的容器。
还可以在虚拟机ping另外虚拟机上的容器,不过延迟明显变高。
-
现在访问9000端口。自行设置密码大于8位,然后连接本地环境即可,如下
左边列表是资源栏,镜像,容器,等都可以查看。功能还是可以的,可以查看swarm集群,远程docker的资源,还可以拉取镜像,一般的维护功能是够的。