企业入门实战- - docker三剑客之swarm
一.Docker Swarm 简介
Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。
Docker Swarm 包含两方面:一个企业级的 Docker 安全集群,以及一个微服务应用编排引擎。
集群方面,Swarm 将一个或多个 Docker 节点组织起来,使得用户能够以集群方式管理它们。
Swarm 默认内置有加密的分布式集群存储(encrypted distributed cluster store)、加密网络(Encrypted Network)、公用TLS(Mutual TLS)、安全集群接入令牌 Secure Cluster Join Token)以及一套简化数字证书管理的 PKI(Public Key Infrastructure)。我们可以自如地添加或删除节点。
编排方面,Swarm 提供了一套丰富的 API 使得部署和管理复杂的微服务应用变得易如反掌。通过将应用定义在声明式配置文件中,就可以使用原生的 Docker 命令完成部署。
此外,甚至还可以执行滚动升级、回滚以及扩缩容操作,同样基于简单的命令即可完成
二.Docker Swarm建立集群
[root@server1 harbor]# docker-compose up -d
传相应文件使得server2、3、4可以访问仓库
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# scp -r certs.d/ server2:/etc/docker/
[root@server1 docker]# scp -r certs.d/ server3:/etc/docker/
[root@server1 docker]# scp -r certs.d/ server4:/etc/docker/
[root@server1 ~]# cd /etc/sysctl.d/
[root@server1 sysctl.d]# scp docker.conf server2:/etc/sysctl.d/
[root@server1 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
[root@server1 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/
server2、3、4重启
[root@server2 ~]# systemctl reload docker
[root@server2 ~]# sysctl --system
server1上搭建harbor仓库
server1将监控镜像上传至仓库,方便server2使用。
初始化集群、
[ root@ server2~]# docker swarm init Swarm initialized: current node (5evedjlbhwrrtietpelm39jpq) is now a manager.
To add a worker to this swarm, run the following command: docker swarm join--token SWTKN-1-3z1761743cb555tzlpm6ail5ikn4okr421906xo8k1y4lo2ua2-3m2y55awqlb7dec8
et60nf2u 172.25.5.2:23771
To add a manager to this swarm, run ' docker swarm join-token manager' and follow the instructions.
server3、server4执行下列命令即可加入集群
docker swarm join --token SWMTKN-1-0vack7no2k2g5755sjalrlfc24cun449ocxglhkxmhutw3w1kj-8vp67zo0n3eb7jfz592pstbea 172.25.5.2:2377
查看swarm集群节点
[root@server2 ~]# docker node ls
[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1
进行curl172.25.15.2/hostname.html
集群拉伸
docker service scale webservice=6
docker service ls webservice
进行curl172.25.15.2/hostname.html
三.部署swarm监控
[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
server2先停掉之前的webservice
[root@server2 ~]# docker service rm webservice
编写.yml文件
[root@server2 ~]# vim docker-compose.yml
version: "3.8"
services:
web:
image: myapp:v1
ports:
- "80:80"
networks:
- webnet
deploy:
replicas: 6
update_config:
parallelism: 20
delay: 5s
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:
webnet:
执行
查看集群状态
浏览器访问172.25.5.2:8080,进入监控界面
图形化集群管理
server1创建仓库portainer并设置为公开
[root@server1 ~]# cd portainer/
[root@server1 portainer]# ls
portainer-agent-stack.yml portainer-agent.tar portainer.tar
[root@server1 portainer]# docker load -i portainer-agent.tar #加载镜像
[root@server1 portainer]# docker load -i portainer.tar #加载镜像
[root@server1 portainer]# docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest #修改标签
[root@server1 portainer]# docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:latest
[root@server1 portainer]# docker push reg.westos.org/portainer/agent:latest #上传仓库
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest
server2
[root@server2 ~]# cd portainer/
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer
[root@server2 portainer]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ozwx24nlt83s mycluster_visualizer replicated 1/1 visualizer:latest *:8080->8080/tcp
wl0f72lvddc6 mycluster_web replicated 60/60 myapp:v1 *:80->80/tcp
9fnnag1e5lfg portainer_agent global 3/3 portainer/agent:latest
eku69kc08d4w portainer_portainer replicated 1/1 portainer/portainer:latest *:9000->9000/tcp
浏览器访问172.25.5.2:9000
输入自己创建的id及密码登陆,显示如下
修改仓库为自己的默认仓库