18.Docker(九)-----Docker三剑客之swarm(docker集群管理)

一、Docker Swarm简介

1.简介

  • Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
  • Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
  • Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
  • Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
    在这里插入图片描述

2.Docker Swarm 优点

任何规模都有高性能表现
灵活的容器调度
服务的持续可用性
和 Docker API 及整合支持的兼容性
Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

3.docker swarm 相关概念

  • 节点分为管理 (manager) 节点和工作 (worker) 节点
    任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
  • 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
    在这里插入图片描述

二、Docker Swarm实践

需提前安装好

主机ip服务权限
server1172.25.15.1haobor、docker网络仓库
server2172.25.15.2docker管理端
server3172.25.15.3docker客户端
server4172.25.15.4docker客户端

1.创建Swarm集群

初始化集群:docker swarm init

[root@server2 ~]# docker swarm init	#初始化集群
Swarm initialized: current node (g8o5171683sfwozlf93c0ks2e) is now a manager.

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

    docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@server2 ~]# 

请添加图片描述

根据提示在其他docker节点上执行命令:(其他节点必须先安装好docker服务并启动)

## server3
[root@server3 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377	#加入集群
This node joined a swarm as a worker.
## server4 
[root@server4 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377	#加入集群
This node joined a swarm as a worker.

请添加图片描述
请添加图片描述

查看集群

[root@server2 ~]# docker node ls

请添加图片描述
请添加图片描述

2.保证docker服务正常运行

[root@server1 ~]# cd /etc/sysctl.d
[root@server1 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server1 sysctl.d]# vim docker.conf 
[root@server1 sysctl.d]# cat docker.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
docker.conf                                    100%   79   112.7KB/s   00:00    
[root@server1 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/
docker.conf                                    100%   79   112.3KB/s   00:00    
[root@server1 sysctl.d]# 

请添加图片描述

3.分发证书

### server2、3、4都要有证书
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
certs.d  daemon.json  key.json
[root@server1 docker]# scp -r certs.d server2:/etc/docker/
ca.crt                                         100% 2106     3.8MB/s   00:00    
[root@server1 docker]# scp -r certs.d server3:/etc/docker/
ca.crt                                         100% 2106     1.2MB/s   00:00    
[root@server1 docker]# scp -r certs.d server4:/etc/docker/
ca.crt                                         100% 2106     2.1MB/s   00:00    
[root@server1 docker]# 

请添加图片描述

三、docker stack部署

1.解析和默认拉取仓库(配置harbor仓库)

### server 2、3、4都要有
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# vim daemon.json 
[root@server1 docker]# vim daemon.json 
[root@server1 docker]# cat daemon.json 
{
"registry-mirrors" : ["https://reg.westos.org"]		#配置默认仓库为re.westos.org
}
[root@server1 docker]# scp daemon.json server2:/etc/docker/
daemon.json                                    100%   52    81.2KB/s   00:00    
[root@server1 docker]# scp daemon.json server3:/etc/docker/
daemon.json                                    100%   52    57.5KB/s   00:00    
[root@server1 docker]# scp daemon.json server4:/etc/docker/
daemon.json                                    100%   52    69.1KB/s   00:00 

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

server1配置成haobor网络仓库

[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                nginx.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  rhel7.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm
convoy       haproxy.tar    mario.tar
[root@server1 ~]# cd harbor
[root@server1 harbor]# ls
common     docker-compose.yml     harbor.yml  LICENSE
common.sh  harbor.v1.10.1.tar.gz  install.sh  prepare
[root@server1 harbor]# ./install.sh 	#脚本运行安装haorbor仓库

请添加图片描述
请添加图片描述
请添加图片描述

导入镜像

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get myapp.tar 	#下载镜像
15931392 bytes transferred                     
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                myapp.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  nginx.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   rhel7.tar
convoy       haproxy.tar    mario.tar

[root@server1 ~]# docker load -i myapp.tar		#导入镜像
d39d92664027: Loading layer  4.232MB/4.232MB
8460a579ab63: Loading layer  11.61MB/11.61MB
c1dc81a64903: Loading layer  3.584kB/3.584kB
68695a6cfd7d: Loading layer  4.608kB/4.608kB
05a9e65e2d53: Loading layer  16.38kB/16.38kB
a0d2c4392b06: Loading layer   7.68kB/7.68kB
Loaded image: ikubernetes/myapp:v1
Loaded image: ikubernetes/myapp:v2
[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1	#修改名称,打标签
[root@server1 ~]# docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2 	#修改名称,打标签
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1	#传入网络仓库
[root@server1 ~]# docker push reg.westos.org/library/myapp:v2	#传入网络仓库

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

2.创建集群服务:

命令解释:
docker service create 命令创建一个服务
–name 服务名称命名为 my_cluster
–network 指定服务使用的网
络模型
–replicas 设置启动的示例数为3

[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1	#创建以myapp:v1为镜像的集群,数量为三
xt6qchju7zs8g1bw6z1i1uh60
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 
[root@server2 ~]# 
[root@server2 ~]# docker service ps webservice 	#查看

请添加图片描述

3.实现负载均衡

[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81
[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81

请添加图片描述

4.弹性伸缩

4.1滚动更新

命令方式,需提前创建好集群和部署好监控
  • docker service update --image httpd --update-parallelism 2 --update-delay 5s my_cluster
  • –image 指定要更新的镜像
  • –update-parallelism 指定最大同步更新的任务数
  • –update-delay 指定更新间隔

4.2下载镜像

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get visualizer.tar 	#下载图像监控软件包
167856640 bytes transferred                        
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                myapp.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  nginx.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   rhel7.tar
convoy       haproxy.tar    mario.tar                             visualizer.tar
[root@server1 ~]# docker load -i visualizer.tar #导入镜像
[root@server1 ~]# docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest		#打标签,修改名称
[root@server1 ~]# docker push reg.westos.org/library/visualizer:latest		#导入仓库

请添加图片描述
请添加图片描述

5.创建集群,并监控

[root@server2 ~]# vim docker-compose.yml
[root@server2 ~]# cat docker-compose.yml 
[root@server2 ~]# docker stack deploy -c docker-compose.yml mycluster	#运行脚本创建集群,并添加监控
Creating service mycluster_web
Updating service mycluster_visualizer (id: 840iwj37i2tg5756gxdtx51g0)
[root@server2 ~]# docker stack ps mycluster 

请添加图片描述
请添加图片描述

6.浏览器查看监控

请添加图片描述

7.更新

请添加图片描述
请添加图片描述
请添加图片描述

8.回滚

请添加图片描述
请添加图片描述
请添加图片描述

四、Portainer可视化

1.下载图形服务,导入到harbor仓库

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker   
cd ok, cwd=/pub/docker
lftp 172.25.15.250:/pub/docker> mirror portainer/		#下载图形服务
Total: 1 directory, 3 files, 0 symlinks           
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server1 ~]# ls
auth           get-docker.sh                         myapp.tar
busybox.tar    haproxy.tar                           nginx.tar
compose        harbor                                portainer
convoy         harbor-offline-installer-v1.10.1.tgz  rhel7.tar
convoy.tar.gz  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   visualizer.tar
game2048.tar   mario.tar
[root@server1 ~]# cd portainer/
[root@server1 portainer]# docker load -i portainer.tar 	#导入镜像
dd4969f97241: Loading layer    278kB/278kB
e7260fd2a5f2: Loading layer  73.85MB/73.85MB
Loaded image: portainer/portainer:latest
[root@server1 portainer]# docker load -i portainer-agent.tar 	#导入镜像
1f0ac9aec537: Loading layer  2.048kB/2.048kB
0cf0d1d03535: Loading layer  12.15MB/12.15MB
Loaded image: portainer/agent:latest
[root@server1 portainer]# 

请添加图片描述

新建项目,导入镜像

请添加图片描述

[root@server1 portainer]# docker tag portainer/agent:latest 	reg.westos.org/portainer/agent:latest	#打标签,修改名称
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest	#导入到网络仓库

[root@server1 portainer]# docker push reg.westos.org/portainer/agent:latest	#导入到网络仓库

请添加图片描述

2.启动图形

## 下载服务包
[root@server2 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker/
lftp 172.25.15.250:/pub/docker> mirror portainer/
Total: 1 directory, 3 files, 0 symlinks                  
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server2 ~]# ls
busybox.tar  convoy         docker-compose.yml  portainer
compose      convoy.tar.gz  nginx.tar
[root@server2 ~]# cd portainer/
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer	#启动图形
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer
[root@server2 portainer]# 

请添加图片描述

启动成功

请添加图片描述

浏览器查看

请添加图片描述
请添加图片描述
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值