手动部署docker swarm集群

开发 开发工具
Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。

[[187274]]

前言

Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。它是官方的Docker集群管理工具,提供和docker基本一致的api,把多个主机虚拟化成一个独立的主机,相对于marathon/mesos以及k8s,它更易于部署,并且由于和docker api一致,更容易上手。接下来本文将基于官方文档,搭建一个docker swarm测试环境。

系统环境

本文测试时使用两台虚拟机A、B,配置如下:

  • 操作系统:ubuntu 14.04
  • docker server/client版本: 1.11.1
  • docker API版本: 1.23
  • 网卡信息: A: 192.168.56.4 B: 192.168.56.5
  • docker配置: /etc/default/docker,内容如下:
DOCKER_OPTS="--registry-mirror=http://houchaohann.m.alauda.cn -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" 
  • 1.

注意:如果先在其中一个虚拟机中部署Docker并配置好,然后通过克隆的方法复制第二个节点,会造成docker节点ID相同,此时需要手动删除/etc/docker/key.json文件,再重启docker服务即可。务必在此之前检查docker节点的ID是否存在冲突:

root@ubuntu-5:/etc/docker# docker info | grep ID  
ID: L2SK:T2RD:RQH2:YC2O:NJKA:EQH2:Q35Z:C26T:J75Y:RPDK:M5OX:FW6S 
  • 1.
  • 2.

以上所有节点的ID不能出现重复!

安装服务发现组件

docker swarm依赖于服务发现组件,支持的后端包括etcd、zookeeper、consul等,本文将使用consul作为服务发现后端:

为了简化部署,本文不考虑服务发现组件的高可用,因此只有单节点,部署在A机器上:

#!/bin/bash  
NAME=consul  
docker rm -f $NAME 2>/dev/null  
docker run -d --restart=always -p 8500:8500 --name=$NAME --hostname $NAME progrium/consul -server -bootstrap 
  • 1.
  • 2.
  • 3.
  • 4.

配置Swarm集群

首先我们需要部署swarm manager节点,为了避免单点故障,我们部署两个swarm master节点来保证高可用,在A机器中执行:

#!/bin/bash 
MY_IP=192.168.56.4 
CONSUL_IP=192.168.56.4 
NAME=swarm-master-1 
docker rm -f $NAME &>/dev/null 
docker run -d -p 4000:4000 --restart=always --name $NAME --hostname $NAME swarm manage -H :4000 --replication --advertise $MY_IP:4000 consul://$CONSUL_IP:8500 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

在B机器上执行:

#!/bin/bash 
MY_IP=192.168.56.5 
CONSUL_IP=192.168.56.4 
NAME=swarm-master-2 
docker rm -f $NAME &>/dev/null 
docker run -d -p 4000:4000 --name $NAME --hostname $NAME --restart=always swarm manage -H :4000 --replication --advertise $MY_IP:4000 consul://$CONSUL_IP:8500 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

部署好swarm manager节点后,就可以增加我们的计算节点了,由于我们的节点有限,计算节点同样部署在A、B机器上:

在A节点运行:

#!/bin/bash 
CONSUL_IP=192.168.56.4 
MY_IP=192.168.56.4 
NAME=swarm-node-1 
docker rm -f $NAME &>/dev/null 
docker run -d --name $NAME --hostname $NAME --restart=always  swarm join --advertise=$MY_IP:2375 consul://$CONSUL_IP:8500 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

在B节点上运行:

#!/bin/bash 
CONSUL_IP=192.168.56.4 
MY_IP=192.168.56.5 
NAME=swarm-node-2 
docker rm -f $NAME &>/dev/null 
docker run -d --name $NAME --hostname $NAME --restart=always  swarm join --advertise=$MY_IP:2375 consul://$CONSUL_IP:8500 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

检查集群

以上工作均完成以后,就可以手动测试是否工作了:

docker -H :4000 info 
  • 1.

输出:

Containers: 6 
 Running: 5 
 Paused: 0 
 Stopped: 1 
Images: 8 
Server Version: swarm/1.2.2 
Role: primary 
Strategy: spread 
Filters: health, port, containerslots, dependency, affinity, constraint 
Nodes: 2 
 ubuntu-4: 172.16.1.24:2375 
  └ ID: N2NA:VXFI:KKUR:FEJL:NG72:B5YN:HEP3:WENB:V6AZ:EGGK:RAC3:KXKH 
  └ Status: Healthy 
  └ Containers: 4 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 1.018 GiB 
  └ Labels: executiondriver=, kernelversion=4.2.0-36-generic, operatingsystem=Ubuntu 14.04.4 LTS, storagedriver=aufs 
  └ Error: (none) 
  └ UpdatedAt: 2016-05-10T17:13:30Z 
  └ ServerVersion: 1.11.1 
 ubuntu-5: 172.16.1.178:2375 
  └ ID: L2SK:T2RD:RQH2:YC2O:NJKA:EQH2:Q35Z:C26T:J75Y:RPDK:M5OX:FW6S 
  └ Status: Healthy 
  └ Containers: 2 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 1.018 GiB 
  └ Labels: executiondriver=, kernelversion=4.2.0-36-generic, operatingsystem=Ubuntu 14.04.4 LTS, storagedriver=aufs 
  └ Error: (none) 
  └ UpdatedAt: 2016-05-10T17:13:31Z 
  └ ServerVersion: 1.11.1 
Plugins: 
 Volume: 
 Network: 
Kernel Version: 4.2.0-36-generic 
Operating System: linux 
Architecture: amd64 
CPUs: 2 
Total Memory: 2.036 GiB 
Name: swarm-master 
Docker Root Dir: 
Debug mode (client): false 
Debug mode (server): false 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.

从结果中我们发现,我们一共有两个节点,务必检查每个节点的Status为Healthy。

【本文是51CTO专栏作者“付广平”的原创文章,如需转载请通过51CTO获得联系】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2015-08-03 16:15:53

Docker部署集群

2021-01-15 08:07:30

Ceph octopu集群运维

2014-12-15 10:40:40

DockerSwarm集群管理

2016-12-01 13:37:42

OpenStack MDocker Swar容器

2024-10-28 15:40:26

2017-05-04 09:01:45

达观数据Docker部署

2016-08-24 19:22:10

Docker SwarPython应用

2023-01-10 08:37:45

Docker开发架构

2024-09-13 15:32:18

2023-09-11 09:35:20

Docker程序

2022-02-02 21:58:43

Redis集群Undermoon

2020-09-02 14:40:27

Docker Swar命令Linux

2014-04-16 10:41:58

Spark

2024-01-02 08:00:00

云计算容器Docker

2014-12-15 11:23:00

Docker Comp分布式应用容器应用

2021-06-26 07:40:45

Greenplum集群部署

2023-09-04 15:09:03

容器编排工具KubernetesDocker

2021-07-06 07:46:16

KubernetesRook存储

2013-07-11 13:39:23

Hadoop

2023-11-07 07:30:18

Hadoop高可用
点赞
收藏

51CTO技术栈公众号