当前位置: 首页 > 科技观察

手动部署dockerswarm集群

时间:2023-03-23 01:50:01 科技观察

前言DockerSwarm是一个Docker化分布式应用的本地集群,支持用户创建一个可以运行DockerDaemon的主机资源池,然后在资源池中运行Docker容器。是Docker官方的集群管理工具,提供与docker基本相同的API,将多台主机虚拟成一台独立的主机。相比marathon/mesos和k8s,更容易部署,而且因为和dockerapi一致,所以更容易上手。接下来本文将根据官方文档搭建dockerswarm测试环境。系统环境本文使用两台虚拟机A和B进行测试,配置如下:操作系统:ubuntu14.04dockerserver/client版本:1.11.1dockerAPI版本:1.23网卡信息:A:192.168。56.4B:192.168.56.5docker配置:/etc/default/docker,内容如下:DOCKER_OPTS="--registry-mirror=http://houchaohann.m.alauda.cn-Htcp://0.0.0.0:2375-Hunix:///var/run/docker.sock"注意:如果先在其中一台虚拟机中部署配置Docker,然后通过克隆复制第二个节点,docker节点ID会相同,和/etc/docker/key.json文件,然后重启docker服务。在执行此操作之前,请务必检查docker节点的ID是否存在冲突:root@ubuntu-5:/etc/docker#dockerinfo|grepIDID:L2SK:T2RD:RQH2:YC2O:NJKA:EQH2:Q35Z:C26T:J75Y:RPDK:M5OX:FW6S以上所有节点ID不能重复!安装服务发现组件dockerswarm依赖于服务发现组件。支持的后端包括etcd、zookeeper、consul等,本文将使用consul作为服务发现后端:为了简化部署,本文不考虑服务发现组件的高可用,所以只有单节点,部署在机器A上:#!/bin/bashNAME=consuldockerrm-f$NAME2>/dev/nulldockerrun-d--restart=always-p8500:8500--name=$NAME--hostname$NAMEprogrium/consul-server-bootstrap配置Swarm集群首先我们需要部署swarmmanager节点。为了避免单点故障,我们部署了两个swarmmaster节点来保证高可用。在机器A中执行:#!/bin/bashMY_IP=192.168.56.4CONSUL_IP=192.168.56.4NAME=swarm-master-1dockerrm-f$NAME&>/dev/nulldockerrun-d-p4000:4000--restart=always--name$NAME--hostname$NAMEswarmmanage-H:4000--replication--advertise$MY_IP:4000consul://$CONSUL_IP:8500在机器B上执行:#!/bin/bashMY_IP=192.168.56.5CONSUL_IP=192.168.56.4NAME=swarm-master-2dockerrm-f$NAME&>/dev/nulldockerrun-d-p4000:4000--name$NAME--hostname$NAME--restart=alwaysswarmmanage-H:4000--replication--advertise$MY_IP:4000consul://$CONSUL_IP:8500部署好swarmmanager节点后,我们就可以添加我们的计算节点了。由于我们的节点有限,所以计算节点也部署在机器A和B上:在节点A上运行:#!/bin/bashCONSUL_IP=192.168.56.4MY_IP=192.168.56.4NAME=swarm-node-1dockerrm-f$NAME&>/dev/nulldockerrun-d--name$NAME--hostname$NAME--restart=alwaysswarmjoin--advertise=$MY_IP:2375consul://$CONSUL_IP:8500在节点B上运行:#!/bin/bashCONSUL_IP=192.168.56.4MY_IP=192.168.56.5NAME=swarm-node-2dockerrm-f$NAME&>/dev/nulldockerrun-d--name$NAME--hostname$NAME--restart=alwaysswarmjoin--advertise=$MY_IP:2375consul://$CONSUL_IP:8500查看集群以上任务后,可以手动测试是否正常:docker-H:4000infoOutput:Containers:6Running:5Paused:0Stopped:1Images:8ServerVersion:swarm/1.2.2Role:primaryStrategy:spreadFilters:health,port,containerslots,dependency,affinity,constraintNodes:2ubuntu-4:172.16.1.24:2375└ID:N2NA:VXFI:KKUR:FEJL:NG72:B5YN:HEP3:WENB:V6AZ:EGGK:RAC3:KXKH└Status:Healthy└Containers:4└ReservedCPUs:0/1└ReservedMemory:0B/1.018GiB└Labels:executiondriver=,kernelversion=4.2.0-36-generic,操作ratingsystem=Ubuntu14.04.4LTS,storagedriver=aufs└Error:(none)└UpdatedAt:2016-05-10T17:13:30Z└ServerVersion:1.11.1ubuntu-5:172.16.1.178:2375└ID:L2SK:T2RD:RQH2:YC2O:NJKA:EQH2:Q35Z:C26T:J75Y:RPDK:M5OX:FW6S└状态:健康└容器:2└ReservedCPUs:0/1└ReservedMemory:0B/1.018GiB└Labels:executiondriver=,kernelversion=4.2.0-36-generic,operatingsystem=Ubuntu14.04.4LTS,storagedriver=aufs└Error:(none)└UpdatedAt:2016-05-10T17:13:31Z└ServerVersion:1.11.1Plugins:Volume:Network:KernelVersion:4.2.0-36-genericOperatingSystem:linuxArchitecture:amd64CPUs:2TotalMemory:2.036GiBName:swarm-masterDockerRootDir:Debugmode(client):falseDebugmode(server):false从结果中我们发现我们总共有两个节点,一定要检查Statusof每个节点都是健康的【本文为专栏作者“傅广平”原创文章,如需转载请get联系】点击查看更多本作者好文