Bootstrap

(VMware)ubuntu环境下搭建Swarm+Stack一站式部署容器集群

本文主要讲述如何在win10系统上,使用vmware安装Ubuntu虚拟机,搭建Swarm+Stack一站式部署容器集群

版本约定

  • 试验电脑系统为 Windows 10 专业版

  • VMware 版本为 VMware Workstation 16 Pro

  • Ubuntu 版本为 Ubuntu 20.04.2 LTS

  • Docker 版本为 Docker version 20.10.6

  • docker-compose 版本为 docker-compose version 1.29.2

Swarm集群规划

  • 虚拟机名称 username hostname IP 集群角色

  • node-1 yishao node1 192.168.57.131 Leader

  • node-2 yishao node2 192.168.57.132

  • node-3 yishao node3 192.168.57.133

Docker单机部署

可以参考笔者另外一篇,里面有比较详细的讲述,根据此文章的步骤我们可以完成Docker单机环境的部署, 并完成node-1的安装和配置:

  • 虚拟机名称 username hostname IP

  • node-1 yishao node1 192.168.57.131

克隆虚拟机

同样根据笔者另外一篇 最后一章节内容,对已经完成的虚拟机node-1进行克隆,并分别命名为node-2、node-3,相关注意点已经在文中做了详细讲解。

克隆完成后分别将node-2、node-3的hostname设置为node2、node3,IP设置为192.168.57.132、192.168.57.133

至此我们就得到了三台部署了单机Docker环境

  • 虚拟机名称 username hostname IP

  • node-1 yishao node1 192.168.57.131

  • node-2 yishao node2 192.168.57.132

  • node-3 yishao node3 192.168.57.133

接下来的工作就需要我们将这三台单机Docker配置成集群环境

Swarm配置

  • 在node-1中执行如下命令,初始化swarm

yishao@node1:~$ docker swarm init
  • 根据上一条命令的执行结果提示,在node-2、node-3上执行join操作,如下

yishao@node2:~$ docker swarm join --token SWMTKN-1-0882whu3j7zzpvb0cfc3hhidrq7abz8jvbfq63qq0itbl1wclo-b626cuw5lj31yysta0593yhuk 192.168.57.131:2377

yishao@node3:~$ docker swarm join --token SWMTKN-1-0882whu3j7zzpvb0cfc3hhidrq7abz8jvbfq63qq0itbl1wclo-b626cuw5lj31yysta0593yhuk 192.168.57.131:2377
  • 在node-1上查看集群信息

yishao@node1:~$ docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
6gln03vr6814qbs0izau27csw *   node1      Ready     Active         Leader           20.10.6
sjwlf1zh3ict9t415m5nqhpy6     node2      Ready     Active                          20.10.6
wawizhmt4s5bk2yxqo5e36rzz     node3      Ready     Active                          20.10.6

至此swarm、stack环境已经搭建成功~

部署应用

  • 在/home/yishao/nginx目录下创建docker-compose.yml文件,内容如下

version: '3.1'
services:
  nginx:
    image: nginx
    ports:
      - 8888:80
    deploy:
      mode: replicated
      replicas: 3
  • 启动集群

yishao@node1:~/nginx$ docker stack deploy -c docker-compose.yml nginx
  • 在node-1查看nginx集群是否启动成功

yishao@node1:~/nginx$ docker stack deploy -c docker-compose.yml nginx
Creating network nginx_default
Creating service nginx_nginx
yishao@node1:~/nginx$ docker stack ls
NAME      SERVICES   ORCHESTRATOR
nginx     1          Swarm
yishao@node1:~/nginx$ docker stack ps nginx
ID             NAME            IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
x4m2guy57y8a   nginx_nginx.1   nginx:latest   node2     Running         Running 17 seconds ago
cmjhtqzhqwtr   nginx_nginx.2   nginx:latest   node3     Running         Running 1 second ago
qrm2qsvt6aby   nginx_nginx.3   nginx:latest   node1     Running         Running 17 seconds ago
yishao@node1:~/nginx$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
c9baac540686   nginx:latest   "/docker-entrypoint.…"   28 seconds ago   Up 26 seconds   80/tcp    nginx_nginx.3.qrm2qsvt6abyt96ndixs16g77
  • 在node-2查看nginx容器是否运行成功

yishao@node2:~$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
58142d2413c8   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    nginx_nginx.1.x4m2guy57y8a743dfi1ab2fyz
  • 在node-3查看nginx容器是否运行成功

yishao@node3:~$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
41ba407e6b20   nginx:latest   "/docker-entrypoint.…"   55 seconds ago   Up 53 seconds   80/tcp    nginx_nginx.2.cmjhtqzhqwtrleha8fgajqqs4
  • 浏览器访问结果如下

至此最简单的Swarm+Stack一站式部署容器集群搭建成功

参考: