Docker容器之swarm集群
实验环境:
三台虚拟机
server1 docker,manager
server2 docker,node
server4docker,node
在三台虚拟机上都安装开启docker服务
swarm集群
在server1作为manager节点上进行swarm的初始化
docker swarm init
server2,server4节点作为node节点执行命令加入swarm集群
在server1上查看节点状态
Server1创建一个docker集群网络
在server1,server2,server4上都导入nginx镜像
这里需要注意要把nginx的tag设置成latest,默认是1.16
在manager节点(server1)部署nginx服务,服务数量为3
查看部署情况
查看网络部署情况
对生成的服务数量进行拉伸,web=6,则每个节点基本有2个web页面:
对生成的服务数量进行缩减为3,即每个节点有一个web页面服务:
在浏览器进行测试
在三个节点的相应的nginx的测试目录下添加相应的测试内容
//server1
[root@server1 ~]# vim index.html
[root@server1 ~]# cat index.html
server1
[root@server1 ~]# docker cp index.html web.1.m66pi2uywlm5blkfhw3ob2s4x:/usr/share/nginx/html 生成的相应web输入web自动补齐(需要提前安装号好bash补全命令)
//server2:
[root@server2 ~]# vim index.html
[root@server2 ~]# cat index.html
server2
[root@server2 ~]# docker cp index.html web.2.rlon8rt0v9um8ius48b9qnlpq:/usr/share/nginx/html
//server4:
[root@server4 ~]# vim index.html
[root@server4 ~]# cat index.html
server4
[root@server4 ~]# docker cp index.html web.3.hy7orn8cbxp90aaog9sgszo9e:/usr/share/nginx/html
在物理机上进行测试负载均衡
swarm集群监控的添加
官网下载监控的镜像并且导入本地,三个节点都需要导入监控镜像
[root@server1 ~]# docker load -i visualizer.tar
[root@server2 ~]# docker load -i visualizer.tar
[root@server4 ~]# docker load -i visualizer.tar
在manager节点上使用监控镜像运行容器
在浏览器上进行测试,发现web服务分布在server1,server2及其server4三个节点上面:
监控镜像的滚动更新
1.拉升监控web服务器的数量为30个,监控界面会自动更新
[root@server1 ~]# docker service scale web=30
当overall progress显示30 out of 30 tasks时说明更新完成
下载一个镜像httpd.tar并且导入三个节点
[root@server1 ~]# docker load -i httpd.tar
[root@server2 ~]# docker load -i httpd.tar
[root@server4 ~]# docker load -i httpd.tar
在manager节点进行镜像的更新
[root@server1 ~]# docker service update --image httpd --update-delay 5s --update-parallelism 5 web 每隔五秒更新,每次更新5个机子,是为了防止在更新过程中出现问题即使终止并且可以版本回退
docker ps -aq | wc -l ##可看到每个机子上开启了多少,一般都是平均
在浏览器上查看镜像由nginx变为httpd
搭建Portainer可视化界面
portainer简介
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据的基本操作(包括上传下载镜像,创建容器等作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。
portainer部署
Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。
在server1的manager节点导入portainer及其portainer-agent镜像
[root@server1 ~]# docker load -i portainer.tar
[root@server1 ~]# docker load -i portainer-agent.tar
在server2及server4上导入portainer-agent镜像
[root@server2 ~]# docker load -i portainer-agent.tar
[root@server4 ~]# docker load -i portainer-agent.tar
通过 Docker Stack 我们对已有的portainer-agent-stack.yml 配置文件进行集群环境下的多服务编排。
[root@server1 ~]# cat portainer-agent-stack.yml
version: '3.2'
services:
agent:
image: portainer/agent
environment:
# REQUIRED: Should be equal to the service name prefixed by "tasks." when
# deployed inside an overlay network
AGENT_CLUSTER_ADDR: tasks.agent
# AGENT_PORT: 9001
# LOG_LEVEL: debug
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9000:9000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
[root@server1 ~]# docker stack deploy --compose-file=portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer //完成之后查看端口会出现9000端口
浏览器上登陆设置密码并且登陆,用户默认为admin
查看相应的容器显示容器正在运行
查看能swarm集群管理相应信息
查看/visualizer 监控界面的信息