初始化:
将server1添加为管理员
根据生成的token将server2、server3添加为节点
在leader端列出节点如下,添加成功
[root@server1 harbor]# docker node ls
给节点server2提权,然后移除server1
[root@server1 harbor]# docker node promote server2
Node server2 promoted to a manager in the swarm.
[root@server1 harbor]# docker node demote server1
Manager server1 demoted in the swarm.
[root@server1 harbor]# docker swarm leave
Node left the swarm.
在server2端(现已升为leader)删除server1,查看节点
[root@server2 ~]# docker node ls
[root@server2 ~]# docker node rm server1
[root@server2 ~]# docker node ls
将server4添加为节点(注意ip改为server2的)
开启harbor仓库,关于harbor仓库的搭建可以查看我之前的文章
[root@server1 harbor]# docker-compose start
网页访问harbor仓库
登录后的界面
告诉节点仓库的位置(要传的文件位置:etc/docker,几个节点都和1做过免密认证,所以可以以下边的方式传,否则要写ip)
将证书给他们(2我之前传了,没截图)
将域名解析给各节点加进去(2,3,4都加)
最后重启2,3,4的docker
systemctl restart docker
仓库我之前上传了一个nginx镜像,现在在server2从harbor仓库拉取一个nginx
开启三个服务
[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 nginx
开启三个nginx服务,查看服务进程,正常运行在三个节点上
在server1端访问一下,可以直接访问ip
上传一个新的镜像
[root@server1 ~]# docker load -i myapp.tar
[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
[root@server1 ~]# docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1
[root@server1 ~]# docker push reg.westos.org/library/myapp:v2
harbor端看一下上传成功
删除服务换新镜像重新创建服务
[root@server2 ~]# docker service rm webservice
[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1
[root@server2 ~]# docker service ps webservice
在server1端curl访问,可以看到实现了负载均衡
扩大规模,将3个服务变为6个
[root@server2 ~]# docker service scale webservice=6
[root@server2 ~]# docker service ps webservice
监控
给仓库传入监控镜像
[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端运行监控服务
[root@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
浏览器填入server2的ip,并通过我们设置的8080端口访问,界面如下
增大服务规模
[root@server2 ~]# docker service scale webservice=20
监控界面如下
对服务做如下更新,如果一次性加太多服务,可能会出问题,所以设置延时(镜像更新但v1比ingmeiyou被删除,只是关闭了)
[root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 3 --update-delay 5s webservice
看监控已经有一部分服务的镜像换为v2了
设置回滚,让v1和v2两个镜像换着来(v1开启v2关闭或者反过来)
[root@server2 ~]# docker service rollback webservice
看监控可以看到有的是v1,有的是v2,curl访问也可以看到效果
删除监控和服务,编写文件来部署
[root@server2 ~]# docker service rm webservice
webservice
[root@server2 ~]# docker service rm viz
viz
[root@server2 ~]# vim docker-compose.yml
#文件内容如下
version: "3.8"
services:
web:
image: myapp:v2
ports:
- "80:80"
networks:
- webnet
deploy:
replicas: 5 #部署的服务数量
update_config:
parallelism: 3 #每批3个
delay: 5s #延时5秒
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:
docker stack deploy部署
[root@server2 ~]# docker stack deploy -c docker-compose.yml mycluster
Creating network mycluster_webnet
Creating network mycluster_default
Creating service mycluster_web
Creating service mycluster_visualizer
[root@server2 ~]# docker stack ls
NAME SERVICES ORCHESTRATOR
mycluster 2 Swarm
访问监控,部署成功!
图形化
在仓库创建项目
把镜像传到仓库
[root@server1 portainer]# docker load -i portainer.tar
[root@server1 portainer]# docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:late
[root@server1 portainer]# docker load -i portainer-agent.tar
[root@server1 portainer]# docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest
[root@server1 portainer]# docker push reg.westos.org/portainer/agent
部署服务(镜像里已经有写好的部署文件,用的是9000端口)
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer
浏览器端访问