Docker---三剑客之三:docker-swarm

2023-05-16

目录

实验前准备:

创建swarm集群

在server1上建立私有仓库

再创建集群节点

 容器伸缩(内部也是负载均衡的)

添加swarm监控

节点可以动态迁移:【高可用】

制造故障

负载均衡:

​滚动更新

​用文件形式来实现


前言-docker swarm简介
在 Docker 1.12 版本发布之后,swarm合并到了 Docker 中,成为 Docker 的一个子命令。Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具,它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Docker swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
本章节将要讲解docker compose、docker machine、docker swarm中的docker swarm ,这三个项目都是docker的原生支持,号称docker三剑客,掌握后基本可以帮助您管理docker集群。

Docker Swarm 优点

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

Docker swarm节点分为manager管理节点和worker工作节点。
Task任务是swarm中的最小调度单位,可以理解为一个单一的容器。
Services服务是指一组任务的集合,服务定义了任务的属性。

大致的工作原理图如下:

 docker swarm相比kubernetes、mesos项目,还是显得单薄,更加适合小规模docker集群。


实验前准备:

server1

docker-compose down
docker ps
docker volume ls

server2:

docker network ls
docker network prune 
docker network ls
docker ps -a
docker container prune   
#自动回收没有被占用的资源

cd /etc/sysctl.d/
scp docker.conf  server3:/etc/sysctl.d/ 
#把桥接传输给3

server3:

cd /etc/sysctl.d/
sysctl --system

创建swarm集群

server1:

docker swarm init   #初始化

server2、3上:

docker swarm join --token SWMTKN-1-5oj0og8a06zoskl0ykizjx2mmotg1jhlqbjar094m3zxpwzkb9-7tgzo41714tz5wgt5cl9g5zqv 172.25.70.1:2377

server1:

docker node ls  
#可以看到1是leader其他是工作节点

docker node promote server2  
#把server2提升成管理员

docker node promote server2   
#可以看到目前2属于热被状态,1下线后,2接管

docker node demote server1   
#server1降级

docker node ls    
#降级之后的server1操作不了

server2:

docker node ls  
#2可以操作

server1:

docker swarm leave 
#让1脱离集群

server2

docker node rm server1  
docker node ls

 

在server1上建立私有仓库

server1:

cd
cd harbor/
docker-compose up -d  
#激活harbor仓库,并打入后台

docker-compose ps  
#可以看到harbor仓库

server2:

scp -r certs.d/ server3:/etc/docker/
scp daemon.json  server3:/etc/docker/

server3:

vim /etc/hosts  #加解析
cd /etc/docker/
ls
systemctl daemon-reload 
systemctl reload docker
docker info 
systemctl restart docker
docker pull nginx:latest  
#拉取镜像【属于集群节点,在私有仓库拉取,很快.】

注意:从私有仓库拉取镜像很快是因为私有仓库有要拉取的镜像,
没有的话会从外网下载,比较慢【本次拉取的镜像私有仓库有】

docker images

*开启虚拟机4,再创建一个集群节点。现在1是仓库,2、3、4是工作节点,其中2是leader

再创建集群节点

server3:

cd /etc/yum.repos.d/
scp docker-ce.repo server4:/etc/yum.repos.d/  
#把docker仓库传给4


server4:

yum install docker-ce  #安装docker
systemctl start docker  #开启docker
systemctl enable docker  #设置开机自启

server3

cd /etc/sysctl.d/
scp docker.conf server4:/etc/sysctl.d/
cd /etc/docker/
scp -r certs.d/ daemon.json server4:/etc/docker/  
#把证书和配置文件传给4【所有解群节点要全部指向私有仓库】

server4:

vim /etc/hosts  #加解析
systemctl restart docker
docker pull busybox  
#拉取【要在网页中项目--配置管理中取消内容信任】

server2

docker service create --name webcluster -p 80:80 --replicas 3 nginx  
#创建webcluster【本次速度很快因为内网私有仓库】,
--replicas设置启动的示例数为3
【补:--network:指定服务使用的网络模型】

docker service ls   #查看集群

docker service ps webcluster  
#可以看到webcluster有三个容器,分别在2、3上

server4

docker swarm join --token SWMTKN-1-5oj0og8a06zoskl0ykizjx2mmotg1jhlqbjar094m3zxpwzkb9-
7tgzo41714tz5wgt5cl9g5zqv 172.25.70.2:2377
#把4添加到集群里【2是leader所以ip是2的ip】

 容器伸缩(内部也是负载均衡的)

server2

docker node ls
docker service scale webcluster=6
docker service ps webcluster   
#可以看到给2、3、4上都分配了【动态均衡】

docker service scale webcluster=12
docker service ps webcluster

docker service scale webcluster=3
docker service ps webcluster

添加swarm监控


注意:在集群中创建service会有一个健康监测
server1:

docker pull dockersamples/visualizer  
#拉取镜像

docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest  
#改名

docker push reg.westos.org/library/visualizer:latest   
#上传到私有仓库

server2:

docker service create \
>   --name=viz \
>   --publish=8080:8080/tcp \
>   --constraint=node.role==manager \
>   --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
>   visualizer
docker service ls 
docker service ps viz 
#可以看到在master端运行(端口是8080)

网页中:http://172.25.70.2:8080/

节点可以动态迁移:【高可用】

制造故障

server3:
docker ps
docker stop 13e4ac2129bc 
#停掉3上的webcluster

docker ps  
#可以看打又活过来了,会自动拉起,确保之前定义的副本数=3

systemctl stop docker.service 
#关闭3上的服务,让节点挂掉


网页上:刷新可以看到3上的副本调度到4上,【高可用】

负载均衡:

systemctl start docker.service  #恢复节点

server2:

docker service ls
docker service rm webcluster  
 #删掉镜像

网页上:刷新,可以看到监控没了

server1

docker pull ikubernetes/myapp:v1
docker pull ikubernetes/myapp:v2
docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2

server2:

docker service create --name webcluster -p 80:80 --replicas 3 myapp:v1  
#镜像换成myapp

docker service ls
docker service ps webcluster   
#可以看到webcluster分别部署在2、3、4上【自动均衡的】

外部集群中查看(不再集群内部)

for i in {1..10}; do curl 172.25.70.2; done 
#可以看到都是v1

for i in {1..10}; do curl 172.25.70.2/hostname.html; done  
#会显示不同的主机名,是均衡的,显示的是容器id

for i in {1..10}; do curl 172.25.70.3/hostname.html; done 
#访问3也是负载均衡,服务在整个集群中访问任意节点都是负载均衡

网页刷新,又可以看到监控了


滚动更新

 server2

docker service scale webcluster=10

网页刷新,可以看到有十个

docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s webcluster 
#--image 更新镜像;
--update-delay定义更新延迟(每隔5秒)
--update-parallelism设置每次更新多少个(2个)

网页刷新可以看到都是v2

真机中:

for i in {1..10}; do curl 172.25.70.2; done 
#全部更新完毕,都是v2的镜像

for i in {1..10}; do curl 172.25.70.2/hostname.html; done 
#依然是负载均衡的


用文件形式来实现

docker service rm webcluster  #删掉镜像

vim webcluster.yml  #创建部署文件

docker stack deploy web -c webcluster.yml 
#stack在部署的时候自动为服务创建了网络;
-c指定文件;web是指定的名称

docker network ls 
#可以看到自动创建的虚拟网络

docker service ls   
#可以看到有三个副本数

网页:可以看到三个节点都有一个副本

server2:

vim webcluster.yml  
#修改副本数为6个

docker stack deploy web -c webcluster.yml  #更新

网页:可以看到三个节点都有2个副本

vim webcluster.yml  #修改镜像为v2
docker stack deploy web -c webcluster.yml  #更新

真机中:

for i in {1..10}; do curl 172.25.70.2; done  
#有v1,也有v2因为有5秒间隔

for i in {1..10}; do curl 172.25.70.2; done  #现在全部更新完毕

server2

docker service rm viz 
#删掉viz(监控)

vim webcluster.yml  
#在文件中部署监控

docker stack deploy web -c webcluster.yml  #更新

网页中有监控了

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker---三剑客之三:docker-swarm 的相关文章

随机推荐