部署docker swarm(解决公有云环境网络问题)

本文详细介绍Docker Swarm集群的搭建过程,包括节点环境安装、集群初始化、服务发布及管理等核心步骤。此外,还介绍了Portainer的安装与使用方法,帮助读者掌握Swarm模式下多服务的统一管理。

swarm部署

一、节点docker环境安装

  1. 安装yum-config-manager功能,另外两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置阿里yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
  1. 查看仓库中docker版本
yum list docker-ce --showduplicates | sort -r
  1. 指定版本安装
yum -y install docker-ce-18.03.1.ce
  1. 修改镜像仓库地址
[root@localhost docker]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://kdsawiag.mirror.aliyuncs.com","https://registry.docker-cn.com"]
}

6.启动docker,加入开机启动

systemctl start docker
systemctl enable docker

二、swarm环境安装

官方的docker集群解决方案,实现对多台服务器中docker的互联互通、统一管理和部署。
通过一个或多个manage node关联一个或多个worker node,组成一个docker的集群环境。

1. swarm 管理节点初始化

  • –advertise-addr 参数指定管理节点公布IP,提供slaver加入
    记录命令结果信息,提供slaver节点加入集群
sudo docker swarm init --data-path-port 5789 避免云主机端口限制
[root@localhost ~]# docker swarm init --advertise-addr 192.168.1.61
Swarm initialized: current node (4dyxxume6yzdw9ysc9n3wumm1) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-27wow2lsk4ayyxt0v24vzi6gs3riyyagwp0mj3dl7c1d7viuo5-cjqb6d4pyvtjocechh4fix11j 192.168.1.61:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  • 防火墙设置
firewall-cmd --list-all

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --zone=public --add-port=4789/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --reload
  • 查看集群节点信息
[root@localhost ~]# docker node ls
  • 查看集群状态
[root@localhost ~]# docker info
以下端口必须是开放的:
    TCP port 2377为集群管理通信
    TCP and UDP port 7946 为节点间通信
    UDP port 4789 为网络间流量

2. slaver1节点加入swarm集群

  • 运行管理节点初始化后提供的 join 命令
  • 公有云环境服务器是nat网络,需要advertise-addr 指定本节点公网nodeIP
[root@worker1 ~]# docker swarm join --token SWMTKN-1-6akxqhk7syhoqexav7nnyfi96hwnaexgrm5hc3j38sqgaooks7-75co8fsybkm1qnzkgctouwn7r 121.36.169.*:2377 --advertise-addr 116.63.128.*:2377
  • 或者在管理节点找回命令
docker swarm join-token worker
  • slaver2节点执行相同操作

3. 服务发布

[root@localhost ~]# docker service create --replicas 1 --name nginx -p 2080:80  nginx:1.10

4. 管理命令

docker service ls 发布服务列表
docker service inspect nginx 查看服务详情
docker service ps nginx 查看服务详情

docker service scale nginx=5 伸缩副本数量
docker service rm helloworld 删除服务(同时容器停止)
docker service update --image redis:3.2.5-alpine redis 更新指定服务的镜像
docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.7-alpine 指定镜像进行滚动更新

docker node update --availability drain worker02 下线指定节点(容器迁移到active节点)
docker node update --availability active worker2 指定节点上线

docker service update --publish-add published=8080,target=2368 ghost 指定已存在的服务暴露端口

5. 网络模式

docker的swarm模式使服务暴露给外部端口更加方便。所有的节点都在一个路由网络里。这个路由网络使得集群内的所有节点都能在开放的端口上接受请求。即使节点上没有任务运行,这个服务的端口也暴露的。路由网络路由所有的请求到暴露端口的节点上。

6. TIPS

1. swarm集群镜像同步
  • stack发布任务后,worker节点通过私有仓库pull镜像
通过如下命令,对源镜像文件tag、push
[root@master docker]# docker tag demo 192.168.1.61:5000/demo:latest
[root@master docker]# docker push 192.168.1.61:5000/demo
  • 通过compose.yml文件发布(或者portainer中stack功能)
    docker stack deploy -c compose.yml springboot-stack
[root@master docker]# cat compose.yml 
 version: '3'
 services:
  nginx:
    image: '192.168.1.61:5000/demo'
    ports:
      - "8081:8081"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    deploy:
      replicas: 3

portainer部署

一、docker 下载

  • 下载yml文件
curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
  • 部署容器
docker stack deploy --compose-file=portainer-agent-stack.yml portainer

二、发布stacks(可包含多个service)

  • 菜单 Stacks - addStack
  • 编辑docker-compose文件
version: '3'
services:
  nginx:
    image: 'nginx:1.10'
    ports:
      - "80:80"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    deploy:
      replicas: 1
  • Deploy the stack 按钮部署

三、swarm网络实现

  • Ingress

Ingress是swarm集群中每个node都默认存在的一种网络类型,它的作用是可以确保部署在集群中某个端口的服务始终保留该端口,不管实际运行容器的是哪个节点。

  • Overlay

Overlay网络可以将多个Docker守护进程连接在一起,使集群服务能够彼此通信

创建Overlay网络有以下几种方式:

  1. 在docker-compose.xml中通过network属性创建。如果不指定network,则会创建一个名为服务名_default的默认overlay网络,并且所以service都加入该overlay网络
  2. 使用docker network create手动创建,在创建service时手动指定network并加入

四、容器间网络通信

针对redis service、rebrow servvice进行测试

  1. 部署到同一个stack
  • 可通过集群任意IP访问
  • 可通过redis 容器名:redisTest_redis访问
version: '3'
services:
  redis:
    image: 'bitnami/redis:5.0'
    ports:
      - "6379:6379"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    deploy:
      replicas: 1
  rebrow:
    image: 'marian/rebrow'
    ports:
      - "5001:5001"
    deploy:
      replicas: 1
  1. 分别部署到一个stack
  • 可通过集群任意IP访问
  • 不可通过容器名访问
  1. 手动创建Overlay网络,service中指定
docker network create --driver overlay swarm_test
docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine

jenkins

一、安装

    1. 方法1
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 install jenkins
    1. 方法2
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm

二、配置

vim /etc/sysconfig/jenkins
#监听端口
JENKINS_PORT="8080"

#修改配置
$JENKINS_USER="root"

修改目录权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

重启
service jenkins restart
ps -ef | grep jenkins

三、初始化

http:<ip或者域名>:8080
输入初始化密码:cat /var/lib/jenkins/secrets/initialAdminPassword

选择默认安装插件,创建管理员账户

四、war包升级

1. 下载升级包

http://updates.jenkins-ci.org/download/plugins/ssh/ 下载插件
[Manage Jenkins]->New version of Jenkins download 下载jenkins.war

2. 查看war包目录,替换后重启

[root@master ~]# rpm -ql jenkins
/usr/lib/jenkins/jenkins.war

mv /tmp/jenkins.war .
service jenkins restart

3. 手工更新插件

  1. 升级Jenkins 2.238后 管理页面插件报错
  2. http://updates.jenkins-ci.org/download/plugins/下载durable-task指定插件版本1.29
  3. 插件管理,手工上传后,重启应用恢复
  4. 安装SSh、maven插件

4. 构建

  1. jenkins服务端安装git,maven,jdk
  2. jenkins全局配置中
  • jdk JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  • git 默认
  • maven MAVEN_HOME=/usr/share/maven
  1. 修改maven仓库地址为阿里云
vi /usr/share/maven/conf/settings.xml
 <mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  1. 新建任务
    FreeStyle project
  • 设置源码管理(git仓库配置)
    https://gitee.com/chenenxiong/mall-swarm.git
    添加凭证

  • 构建springboot依赖

    • 目标:clean install -pl mall-common,mall-mbg,mall-security -am (先构建被依赖的模块)
      POM:${WORKSPACE}/pom.xml

    • 目标:clean package
      POM:${WORKSPACE}/mall-registry/pom.xml

5.部署

  • 通过jenkins调用maven构建,手工上传jar包到服务器启动
    • springboot打包jar结果路径: /root/.m2/repository/com/example/mall/mall-admin/1.0-SNAPSHOT/mall-admin-1.0-SNAPSHOT.jar
    • Build中,配置完成后动作:上传服务器,执行脚本…
  • 通过maven配置docker插件,maven构建后自动上传到docker服务器镜像中
    • 指定配置后操作,调用shell脚本启动容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值