Docker容器技术之swarm集群的搭建

编程入门 行业动态 更新时间:2024-10-27 06:31:26

Docker容器技术之swarm<a href=https://www.elefans.com/category/jswz/34/1771240.html style=集群的搭建"/>

Docker容器技术之swarm集群的搭建

docker三剑客:swarm mesos k8s
一、知识剖析

Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in go, docker_py, docker等)均可以直接与Swarm通信。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息
下面是Swarm的结构图

swarm集群
使用的是docker自带的swarm mode,也就是docker集群的管理和编排。所谓的编排就是指多台集群的管理, 主机的配置,容器的调度等。
swarm mode是docker engine中自带的一种模式,很容易使用,并且无须安装其他的软件。 在使用swarm mode的时候,几台主机上都要先安装好docker。

二、swarm集群的搭建

实验环境:(安装docker并开启)

docker1:172.25.79.1 swarm
docker2: 172.25.79.2 node

在docker1上做初始化

[root@docker1 ~]# docker swarm init
Swarm initialized: current node (onmfjan5xiq2ek6vf6oalpvqp) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-4sryx0i44mb46qyb1sbfjm62fask1rfqf3jbze2sp8uccpe8f5-dzz2ltd01e5kldf4puhu09s9s 172.25.19.1:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
##注意:在当前主机上启动swarm模式,要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥

docker1和docker2加入swarm集群中

[root@docker2 ~]# docker swarm join --token SWMTKN-1-4sryx0i44mb46qyb1sbfjm62fask1rfqf3jbze2sp8uccpe8f5-dzz2ltd01e5kldf4puhu09s9s 172.25.19.1:2377[root@docker3 ~]# docker swarm join --token SWMTKN-1-4sryx0i44mb46qyb1sbfjm62fask1rfqf3jbze2sp8uccpe8f5-dzz2ltd01e5kldf4puhu09s9s 172.25.19.1:2377
- 查看节点状态
[root@server1 ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
o4abf7l821zrls2aa1m4cj7pu    server3   Ready   Active        
u5mihispcziw1svmyjh9jx9g2 *  server1   Ready   Active        Leader
zrkp0dz7mzef7f6f5j08ec0c1    server2   Ready   Active 

都导入nginx镜像

[root@docker1 ~]# docker load -i nginx.tar 
[root@docker2 ~]# docker load -i nginx.tar 
[root@docker3 ~]# docker load -i nginx.tar 

部署一个服务群集

[root@docker1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
9899107ae90e        bridge              bridge              local
076f11525d73        docker_gwbridge     bridge              local
3281f4c216de        host                host                local
i47byuadtg61        ingress             overlay             swarm
6b89c5ac48c1        none                null                local[root@docker1 ~]# docker network create -d overlay my_net1
a8gg980w0j9s5ilmsffms9sbw##在manager节点部署nginx服务,服务数量为3个 ,使用nginx镜像
[root@docker1 ~]# docker service create --name web --network my_net1 publish 80:80 --replicas 30 nginx[root@docker1 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ey3kgh65bp2g        web                 replicated          3/3                 nginx:latest        *:80->80/tcp

编写测试页面

[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
8b6c0052888f        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp               web.2.6x5cwmlgodu8v5yx5961nry80
[root@docker1 ~]# vim index.html
server1
[root@docker1 ~]# docker cp index.html 8b6c0052888f:/usr/share/nginx/html##docker2,docker3同理

测试负载均衡( 测试的时候把真机火墙关掉 )

[root@server1 ~]# for i in {1..10}; do curl 172.25.79.1; done
server3
server3
server2
server1
server2
server1
server3
server3
server2
server1
[root@server1 ~]# docker service ps nginx
ID            NAME     IMAGE  NODE     DESIRED STATE  CURRENT STATE           ERROR  PORTS
j939nrzgr8do  nginx.1  nginx  server3  Running        Running 9 seconds ago          
st431kqieqod  nginx.2  nginx  server1  Running        Running 10 seconds ago         
tr263kopgsbo  nginx.3  nginx  server2  Running        Running 9 seconds ago  

添加 6 个nginx 服务

[root@server1 ~]#  docker service scale nginx=6
unable to pin image nginx to digest: Get /: dial tcp: lookup registry-1.docker.io on 114.114.114.114:53: read udp 172.25.79.1:37142->114.114.114.114:53: i/o timeout
nginx scaled to 6##查看有6个nginx 进程是 Running :
[root@server1 ~]# docker service ps nginx
ID            NAME     IMAGE  NODE     DESIRED STATE  CURRENT STATE            ERROR  PORTS
j939nrzgr8do  nginx.1  nginx  server3  Running        Running 3 minutes ago           
st431kqieqod  nginx.2  nginx  server1  Running        Running 3 minutes ago           
tr263kopgsbo  nginx.3  nginx  server2  Running        Running 3 minutes ago           
zryz1niphg19  nginx.4  nginx  server1  Running        Preparing 6 seconds ago         
6mwqzfqg8f8o  nginx.5  nginx  server2  Running        Preparing 5 seconds ago         
x3ci0tq8ldh4  nginx.6  nginx  server3  Running        Preparing 5 seconds ago 

添加监控

导入镜像并创建监控

[root@docker1 ~]# docker load -i visualizer.tar 
[root@docker1 ~]# docker load -i nginx.tar
[root@docker1 ~]# 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

查看监控和节点是否在线

[root@server1 docker]#  docker service ls
ID            NAME   MODE        REPLICAS  IMAGE
4cqg0b6nwe44  nginx  replicated  6/6       nginx
vydqo176ak6p  viz    replicated  1/1       dockersamples/visualizer
##注意:开启viz服务慢,需要不断刷新等待建立完成,出现1/1才成功

浏览器:输入172.25.19.1:8080,可以看到6个nginx的进程被平均分在了三台机子上

滚动更新

重新添加一个镜像

[root@docker1 ~]# docker load -i rhel7.tar 
[root@docker1 ~]# docker service update --image rhel7:v1 --update-delay 5s --update-parallelism 1 web     ##每隔五秒更新,每次更新一个机子##docker  ps -aq | wc -l  ##可看到每个机子上开启了多少个(一般都是平均)

浏览器的监控镜像由nginx变成了rhel7

测试高可用
此时是在只有3个进程的基础上测试的

停掉一个node:

[root@docker2 share]# systemctl stop docker

此时的负载均衡就在server1和server3主机上实现

[root@docker1 ~]# for i in {1..10}; do curl 172.25.79.1; done
docker3
docker1
docker3
docker1
docker3
docker1
docker3
docker1
docker3
docker1

浏览器的监控显示server2故障,并且6个nginx进程被平均分到docker1和docker上

更多推荐

Docker容器技术之swarm集群的搭建

本文发布于:2024-02-26 20:05:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703729.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:集群   容器   技术   Docker   swarm

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!