一、Docker Swarm简介
01_简介
- Swram是Docker公司推出的官方容器集群平台,基于go语言实现,代码开源在https://github.com/docker/swarm
.2016年2月对架构进行重新设计,推出了v2版本,支持超过1千个节点。作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的DockerAPI及工具(如Compose,docker-py等),Docker本身就可以很好地与Swarm进行集成。 - Swarm在Docker1.12版本之前属于-一个独立的项目,在Docker1.12版本发布之后,该项目合并到了Docker中,成为Docker的一个子命令。.
- Swarm是Docker社区提供的唯一个原生支持Docker集群管理的工具。
- Swarm可以把多个Docker主机组成的系统转换为单一的虛拟Docker主机,使得容器可以组成跨主机的子网网络
- Docker Swarm是一个为IT运维团队提供集群和调度能力的编排工具。
02_Docker Swarm 优点
- 任何规模都有高性能表现
- 灵活的容器调度
- 服务的持续可用性
- 和 Docker API 及整合支持的兼容性
- Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。
03_节点详解
- Manager:接收客户端服务定义,将任务发送到agnet节点,维护集群期望状态和集群管理功能以及leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。
- worker:接收并执行从管理节点分配的任务,并报告任务当前的状态,以便Manager节点维护每个服务期望状态。
04_相关概念
- 任务(task)是Swarm中的最小调度单位,目前来说就是一个单一的容器
- 服务(Services)是指一组任务的集合,服务定义了任务的属性
二、部署集群
Manager端:server1
worker端:server2,server3
- Manager端配置
docker swarm init
:初始化集群
- worker端配置
在所有worker节点执行初始化集群输出的指令:
docker swarm join --token SWMTKN-1-4eu8c3onspcfhxjhlmq71b4kyz7gt51qppoojed9s69t4l12lp-05lvm7a115xvnk4uy5gxgtb40 172.25.2.1:2377
- Manager端查看信息
docker node ls
三、创建测试服务
-
以镜像 myapp:v1 为例,拉取镜像
所有节点拉取镜像,改名为myapp:v1docker pull ikubernetes/myapp:v1
docker tag ikubernetes/myapp:v1 myapp:v1
-
创建服务:
docker service create
docker service create --name my_cluster --replicas 2 -p 80:80 myapp:v1
–name:服务名称
–replicas:部署服务的节点个数
-p:映射端口 -
测试服务
四、部署swarm监控服务
- 拉取镜像
docker pull dockersamples/visualizer
- 部署监控服务
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 \
dockersamples/visualizer
-
访问:http://172.25.2.1:8080/ 可以看到监控页面
-
增加服务调度数量,发现6个不相同
docker service scale my_cluster=6
-
停掉一个worker端,会从其他节点调度,重新开启这个,也不会再调度这个worker端,除非增加调度节点,会优先调度空闲worker
systemctl stop docker
systemctl start docker
docker service scale my_cluster=9
五、滚动更新
私有仓库端:server1
Manager端:server2
worker端:server3,server4
01_环境搭建
-
节点升级(将server2升级为Manager)
docker node promote server2
-
节点降级(将server1降级为worker)
docker node demote server1
-
删除worker(server1),先离开,后删除
docker swarm leave
:server1离开swarm集群(server1上)docker node rm server1
:在manager端删除已经离开的节点(server2上) -
开启server4 安装部署docker,将server4加入集群
docker swarm join --token SWMTKN-1-4eu8c3onspcfhxjhlmq71b4kyz7gt51qppoojed9s69t4l12lp-05lvm7a115xvnk4uy5gxgtb40 172.25.2.2:2377
02_搭建私有仓库
-
仓库端server1:
./install.sh --with-chartmuseum
-
server2、3、4:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
-
server2拷贝证书:
scp -r certs.d/ server3:/etc/docker/
scp -r certs.d/ server4:/etc/docker/
-
server1、2、3、4解析:
-
重载server2、3、4的docker服务
systemctl reload docker.service
-
测试:
server1:docker login reg.westos.org
用户:admin
密码:westosdocker push reg.westos.org/library/myapp:v1
server4:docker login reg.westos.org
用户:admin
密码:westosdocker pull myapp:v1
-
server2:
docker service create --name my_web --replicas 3 -p 80:80 myapp:v1
当1234都没有myapp镜像,0速度也很快!
03_滚动更新
- 私有仓库端拉取镜像
docker pull ikubernetes/myapp:v2
- 修改标签
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
- 上传镜像到私有仓库
docker push reg.westos.org/library/myapp:v2
- 设置滚动更新
docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s my_web
–image:指定要更新的镜像
–update-parallelism:指定最大同步更新的任务数
–update-delay:指定更新间隔
04_编写Dockerfile 部署服务
-
上传镜像到私有仓库
1.myapp镜像(已上传)
2.监控镜像docker tag dockersamples/visualizer:latest zy.westos.org/library/visualizer:latest
docker push zy.westos.org/library/visualizer:latest
-
编写Dockerfile
mkdir compose
:创建目录vim compose/docker-compose.yml
version: "3.9"
services:
web:
image: myapp:v1
networks:
- mynet
deploy:
replicas: 2 #控制调度数量,直接修改文件,重新执行命令即可部署
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
visualizer:
image: visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
mynet:
-
删除原有服务
docker service rm viz
docker service rm my_web
-
部署服务
docker stack deploy -c compose/docker-compose.yml my_cluster
:部署 -
查看服务
docker stack ps my_cluster
:查看docker stack services my_cluster
:查看 -
修改调度数量
1.直接修改Dockerfile中的replicas值:replicas: 6
2.执行部署命令docker stack deploy -c compose/docker-compose.yml my_cluster
05_Portainer可视化
- 创建目录
mkdir portainer
cd portainer/
- 上传镜像到仓库
docker load -i portainer-agent.tar
docker load -i portainer.tar
docker tag portainer/agent:latest reg.westos.org/library/agent:latest
docker push reg.westos.org/library/agent:latest
- manager端修改配置文件:
vim portainer-agent-stack.yml
- 删除其他服务
docker service rm my_cluster_web
docker service rm my_cluster_visualizer
- 执行部署命令
docker stack deploy -c portainer-agent-stack.yml portainer
查看服务
docker stack ps portainer
docker service ls
- 172.25.2.2:9000进入portainer可视化工具