Linux之Docker swarm搭建集群

一、Docker swarm

1. docker swarm简介

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

2. docker swarm的优点

  • 任何规模都有高性能表现
  • 灵活的容器调度
  • 服务的持续可用性和 Docker API 及整合支持的兼容性
  • Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

3. docker swarm中的节点分为管理 (manager) 节点和工作 (worker) 节点

其中,任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

二、搭建swarm集群

实验准备:三个节点均搭建docker环境

server1——master(172.25.5.1)

server2——node1(172.25.5.2)

server3——node2(172.25.5.3)

1. 在server1中初始化集群,根据提示将server2和server3加入该集群中

docker swarm init    #初始化节点

查看swarm集群节点是否添加成功

docker node ls    #查看节点

2. 三个节点同时导入nginx镜像

docker load -i nginx.tar
docker tag nginx:1.16 nginx
docker images

3. server1中创建集群服务,server2和3也会自动开启该服务

docker service create --name web --replicas 3 --publish 80:80 nginx     #启动示例数为3
docker service ps web

server2和server3中可以使用【docker ps】命令查看nginx服务是否运行

4.编辑发布文件到容器中

docker ps
echo server1 > index.html
docker cp index.html 73a6692188cc:/usr/share/nginx/html

5. 物理机进行测试

for i in {1..10}; do curl http://172.25.5.1; done

6. 弹性伸缩

docker service scale web=6

三、图形监控界面

1. 导入镜像

2. 设置管理节点的图形监控

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

【docker ps】命令查看设置是否成功

3. 测试

http://172.25.5.1:8080

关闭某一节点,该节点上运行的容器,会自动平均迁移到其他两个节点上,再次开启该节点,之前迁移的节点并不会立即迁回。

四、docker服务的滚动更新及全局参数的使用

1. 滚动更新服务

docker load -i game2048.tar 
docker service update --image game2048 --update-delay 5s --update-parallelism 2 web #延时5s更新,每次更新2个

网页中进行测试

http://172.25.5.1:8080
http://172.25.5.1

2. 全局参数的使用

docker service create --name web --publish 80:80 --mode global game2048
docker ps

测试:

http://172.25.5.1:8080

关闭一个节点,该结点所在容器进程直接关闭,不会进行迁移,开启该节点,会自动添加一个容器进程。

五、以文件方式部署docker容器服务

(一)部署nginx

1. 编写docker-compose.yml文件

mkdir test
vim docker-compose.yml 
version: "3.7"
services:
  web:
    image: nginx:latest    #镜像位置
    ports:
      - "80:80"    #端口映射
    networks:
      - webnet    #网络
    volumes:
      - "webdata:/usr/share/nginx/html"    #宿主机与容器之间挂接的物理存储(该目录为容器默认发布目录)
    deploy:
      replicas: 3        #通过该参数修改容器进程运行的个数
      update_config:
        parallelism: 2    #最大同步更新的任务数
        delay: 10s
      restart_policy:
        condition: on-failure
  visualizer:
    image: dockersamples/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:
volumes:
  webdata:

2. stack部署

docker stack deploy -c docker-compose.yml example
docker service ps example_web     #查看服务

3. 修改配置文件,测试nginx是否部署成功

cd /var/lib/docker/volumes/
cd example_webdata/_data/
vim index.html

4. 测试

curl 172.25.5.1

(二)docker-compose文件限制内存和cpu的使用

1. 编辑docker-compose.yml文件

version: "3.7"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - webnet
    volumes:
      - "webdata:/usr/share/nginx/html"
    deploy:
      replicas: 6    #容器进程数
      resources:
        limits:
          cpus: "0.2"    #限制cpu利用率为20%
          memory: 300M    #限制物理内存为300M
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  visualizer:
    image: dockersamples/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:
volumes:
  webdata:

2. stack进行部署

docker stack deploy -c docker-compose.yml example

3. 查看docker进程的cpu和内存限制是否更改

cd /sys/fs/cgroup/cpu
cat cpu.cfs_quota_us 
cd /sys/fs/cgroup/memory

六、docker图形化管理服务

1. 导入镜像

docker load -i portainer-agent.tar
docker load -i portainer.tar
scp portainer-agent.tar server2:
scp portainer-agent.tar server3:
scp portainer-agent.tar server4:

2. stack部署服务

docker stack deploy -c portainer-agent-stack.yml portainer
docker stack services portainer
netstat -antlp

3.测试

http://172.25.5.1:9000

 

你可能感兴趣的:(docker,swarm搭建集群,图形监控界面,文件方式控制docker容器)