安装用于测试的Docker Swarm mode集群

hujianxiong 2018年01月17日 2,162次浏览

安装基于docker swarm mode自动化运维架构,该文档用于搭建测试环境使用,不做生产使用.

1. 环境准备

角色IP组件
Console节点192.168.1.99docker,consul,swarm-manager,nginx,jenkins,java,maven,harbor
集群Master192.168.1.97docker,docker-proxy,swarm-agent,registrator,haproxy
集群Worker192.168.1.96docker,,docker-proxy,swarm-agent,registrator,haproxy

2. 组件说明

  • Consul: 主要用于服务发现以及共享配置
  • Registrator: 服务自动注册,需在每个节点上部署
  • Haproxy: 配合Registrator实现服务自动发现和自动代理
  • Jenkins: 用于代码自动构建持续集成
  • Gitlab: 代码仓库
  • Harbor: 镜像仓库
  • Nginx: 反向代理
  • Docker-proxy: 代理docker 2375端口

3. 持续集成与自动构建

image

4. 集群路由示意图

image

5. 集群架构图

image

6. 访问地址

7. 安装步骤

7.1 安装准备 (==所有服务器执行==)

7.1.1 配置Docker Yum源

curl -o /etc/yum.repos.d/docker-ce.repo https://file-1252926814.cos.ap-guangzhou.myqcloud.com/docker-17-05.repo

7.1.2 安装Docker

yum -y install docker-engine

7.1.3 配置docker启动参数

mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.99"],
"log-opts": { 
	"max-size": "100m", 
	"max-file": "10"
	 },
"graph": "/data/docker/"
}
EOF

7.1.4 设置开机启动

systemctl start docker && systemctl enable docker

7.2 安装Console节点 (==192.168.1.99==)

7.2.1 安装Harbor

wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz

tar xvf harbor-offline-installer-v1.5.1.tgz 

# 修改harbor.cfg
# 执行./install.sh --with-clair
# 修改admin密码Xfxb@2016
 

7.2.2 安装Consul,Swarm Manager

docker run -d \
	    -p 8300:8300 \
	    -p 8301:8301 \
	    -p 8301:8301/udp \
	    -p 8302:8302 \
	    -p 8302:8302/udp \
	    -p 8400:8400 \
	    -p 8500:8500 \
	    -p 8600:53 \
	    -p 53:53/udp \
	    -v /data/volume-xfxb/consul:/data \
	    -h ops01.consul.goshm.com  \
	    --restart=always \
	    --name=consul 192.168.1.99/test/consul:0.5.2 -server -bootstrap -ui-dir=/ui -dc=ops01_dc -advertise 192.168.1.99 -client 0.0.0.0

docker run -ti -d \
    --restart=always -p 3375:3375 \
    --label registrator.ignored=true \
    --name dora-manager   192.168.1.99/test/swarm:latest   \
    manage  --replication \
    --addr 192.168.1.99:3375 \
    --host tcp://0.0.0.0:3375  consul://192.168.1.99:8500
    

7.2.3 安装JDK

curl -o /tmp/java.tar.gz     https://file-1252926814.cos.ap-guangzhou.myqcloud.com/jdk-8u172-linux-x64.tar.gz
mkdir -p /usr/java
tar -zxvf /tmp/java.tar.gz -C  /usr/java
ln -s /usr/java/jdk1.8.0_172/bin/java /usr/bin/java

# 配置环境变量
cat /etc/profile

JAVA_HOME=/usr/java/jdk1.8.0_172

JRE_HOME=/usr/java/jdk1.8.0_172/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export JAVA_HOME JRE_HOME PATH CLASSPATH


source /etc/profile

7.2.4 安装Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum -y install jenkins

# 修改配置文件启动用户为root /etc/sysconfig/jenkins

systemctl start jenkins
systemctl enable jenkins

7.2.5 安装maven

wget  http://apache.fayea.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

tar -zxvf apache-maven-3.3.9-bin.tar.gz

mv apache-maven-3.3.9 /usr/apache-maven-3.3.9

# 配置环境变量
cat /etc/profile

# maven环境变量
export MAVEN_HOME=/usr/apache-maven-3.3.9
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

# 使环境变量立刻生效
source /etc/profile

# 验证是是否成功

mvn -v

7.2.6 Jenkins安装插件

需安装以下插件

  • Git Parameter
  • Git
  • Gitlab Hook
  • Gitlab Authentication plugin
  • GitLab Plugin
  • Build Authorization Token
  • Maven Integration

7.2.7 安装nginx

由于80端口被harbor占用,需修改监听80端口为81端口

yum install epel-release
yum -y install nginx
systemctl start nginx
systemctl enable nginx

# 添加配置文件
cat /etc/nginx/conf.d/ops-docker.conf

upstream ops01-services{
        server 192.168.1.97:80;
        server 192.168.1.96:80;
}
upstream ops01-swarm-mode{
        server 192.168.1.97:2375;
}
upstream ops01-swarm{
        server 192.168.1.99:3375;
}
server {
    listen       2375;
    server_name   docker.ops01.youmenlu.com; 
    access_log /var/log/nginx/access_test02.log;

        location ~ ^/v1.29/* {
                proxy_pass http://ops01-swarm-mode;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
        location ~ ^/v1.27/* {
                proxy_pass http://ops01-swarm-mode;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
         location ~ ^/v1.24/* {
                proxy_pass http://ops01-swarm;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

}
server {
         listen       81;
        server_name   *.ops01.goshm.com;
        access_log /var/log/nginx/access_ops01_service.log main;

        location / {
                proxy_pass http://ops01-services;
                proxy_redirect off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
}

# 重新加载
/usr/sbin/nginx -s reload

7.2.8 部署Doraemon运维平台


docker run --restart always -p 3306:3306 --name dora-db -e MYSQL_ROOT_PASSWORD=123456 -d 192.168.1.99/test/mysql:5.6.40


docker run  --restart always -p 8099:8099 --name doraemon -d 192.168.1.99/test/doraemon:v1.0.2

7.3 安装集群Master (==192.168.1.97==)

# 使用init命令创建Swarm mode集群
docker swarm init
# 记录以下生成的Token,集群节点加入需使用

# docker swarm join \
# --token SWMTKN-1-05kdsu8kpqg1ayjvvizpyruxr1l8anpf6th2r1t6xk3mbwcl2l-bbaq4liaexarpry09tzyzwksz \
# 192.168.1.97:2377

# 安装docker-proxy 代理2375端口
docker run -ti -d \
	    -p 2375:2375 \
	    --hostname=`hostname` \
	    --restart=always \
	    --name dora-proxy \
	    --label registrator.ignored=true \
	    -v /var/run/docker.sock:/var/run/docker.sock \
	    -e PORT=2375 \
	    192.168.1.99/test/docker-proxy:latest
# 安装swarm-agent	  
docker run -ti -d \
    --restart=always \
    --label registrator.ignored=true \
    --name dora-agent \
    192.168.1.99/test/swarm:latest   \
    join --addr `ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:'`:2375  \
    consul://192.168.1.99:8500
    
# 创建集群网络
docker network create -d overlay my-net

# 使用运维平台部署
# haproxy
# dora-registrator

7.4 安装集群Worker节点 (==192.168.1.96==)

7.4.1 加入集群


# 使用Master节点生成的Token加入集群

docker swarm join \
--token SWMTKN-1-05kdsu8kpqg1ayjvvizpyruxr1l8anpf6th2r1t6xk3mbwcl2l-bbaq4liaexarpry09tzyzwksz \
192.168.1.97:2377

# 安装swarm-agent
docker run -ti -d \
    --restart=always \
    --label registrator.ignored=true \
    --name dora-agent \
    192.168.1.99/test/swarm:latest   \
    join --addr `ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:'`:2375  \
    consul://192.168.1.99:8500
    
# 安装docker-proxy
docker run -ti -d \
	    -p 2375:2375 \
	    --hostname=`hostname` \
	    --restart=always \
	    --name dora-proxy \
	    --label registrator.ignored=true \
	    -v /var/run/docker.sock:/var/run/docker.sock \
	    -e PORT=2375 \
	    192.168.1.99/test/docker-proxy:latest

7.4.2 安装Gitlab

# 使用docker镜像安装
docker run -d --label registrator.ignored=true --hostname 127.0.0..1  -p 80:80 --name gitlab-ce --restart always 192.168.1.99/test/gitlab-ce

# 设置 Outbound requests: Allow requests to the local network from hooks and services
# 配置项目WebHook地址为: http://192.168.1.99:8099/gitHooks

8. 结束

测试集群安装完成,根据以上访问地址访问相对应的项目即可.

自动构建按照CI流程即可用运维平台完成代码的从提交到自动构建到部署.