Docker Swarm 管理

Docker Swarm 是 Docker 提供的一种用于管理容器集群的工具。
一、Docker Swarm 的主要特点包括:
高可用性:可以自动检测和恢复故障节点,确保服务的持续可用性。
例如,当某个工作节点出现故障时,Swarm 会将其上的任务重新调度到其他健康的节点上。
负载均衡:能够在多个节点之间均衡地分配工作负载。
比如,对于一个高并发的 Web 服务,Swarm 可以根据节点的资源使用情况将请求均匀地分发到各个节点。
简单易用:基于 Docker 命令行工具,使用熟悉的 Docker 命令来管理集群。
二、管理 Docker Swarm 的关键步骤:
初始化 Swarm 集群:选择一个节点作为管理节点,并执行初始化命令。
加入工作节点:其他节点可以通过特定的命令加入到 Swarm 集群中。
创建服务:定义服务的配置,如镜像、端口、副本数量等。
三、在管理中需要注意的问题:
资源规划:合理评估和分配各个节点的资源,以避免资源不足或浪费。
网络配置:确保集群内的网络通信正常,避免出现网络隔离或延迟过高的情况。
监控和日志:建立有效的监控机制,及时发现和解决问题,并收集和分析日志以便进行故障排查和性能优化。

Docker Swarm 管理的工作原理
Docker Swarm 是 Docker 提供的一种用于容器集群管理和编排的工具。
工作原理主要包括以下几个方面:
集群初始化
管理员选择一个节点作为管理节点(Manager Node),其他节点作为工作节点(Worker Node)。
管理节点负责整个集群的管理和调度决策。
服务定义
用户定义要在集群中运行的服务,包括服务的副本数量、容器的镜像、端口映射、环境变量等。
任务调度
管理节点根据集群中节点的资源可用性和负载情况,决定在哪个工作节点上启动容器实例来运行服务。
例如,如果一个工作节点的 CPU 利用率较低,新的任务可能会被调度到该节点上。
容器部署
工作节点接收到任务后,从 Docker 镜像仓库拉取指定的镜像,并启动相应的容器实例。
络和存储管理网
Docker Swarm 提供了内置的网络和存储解决方案,确保容器之间能够相互通信和访问共享存储。
健康检查和故障恢复
定期对容器进行健康检查,如果发现某个容器故障,会自动在其他节点上重新启动新的容器实例以保持服务的副本数量。
例如,假设有一个 Web 应用服务,定义了 5 个副本。当其中一个工作节点出现故障,管理节点会感知到,并在其他正常的工作节点上启动新的容器实例,以确保始终有 5 个副本在运行,从而保证服务的高可用性。
总之,Docker Swarm 通过集中式的管理和智能的调度,使得在多个节点上部署和管理容器化应用变得更加简单和高效

部署Docker Swarm 集群,集群包含一个管理节点(manager)和两个工作节点(worker01、worker02)

部署 Docker Swarm 集群

[root@manager ~]# docker swarm init --advertise-addr 192.168.10.101

在所有worker节点加入集群

docker swarm join --token

查看集群信息

docker info

........
 Swarm: active
  NodeID: x3v12rmfw9c0isq1nppaaoogh
  Is Manager: true
  ClusterID: 0mps950k70s2oqphe75jzykqq
  Managers: 1
  Nodes: 3
........

查看 Swarm 集群中 Node 节点的详细状态信息

 docker node ls

Docker Swarm 节点管理

将管理节点的 AVAILABILITY 值修改为 Drain 状态,使其只具备管理功能

docker node update --availability drain manager
docker node ls

节点的 AVAILABILITY 有三种状态:ActivePauseDrain

Active:集群中该节点可以被指派任务。

Pause:集群中该节点不可以被指派新的任务,但是其他已经存在的任务保持运行。

Drain:集群中该节点不可以被指派新的任务,Swarm Scheduler 停掉已经存在的任务,并将它们调度到可用的节点上

添加标签元数据

[root@manager ~]# docker node update --label-add group=g2 worker01
[root@manager ~]# docker node inspect worker01

[root@manager ~]# docker service create --name mynginx --constraint 'node.labels.group==g2' nginx

查看mynginx容器所在的主机

docker service ps mynginx

节点提权/降权

worker01 worker02 都升级为管理节点

[root@manager ~]# docker node promote worker01 worker02

[root@manager ~]# docker node ls


对上面已提权的 worker01 和 worker02 执行降权操作
[root@manager ~]# docker node demote worker01 worker02

Docker Swarm 服务管理

创建好swarm群集

创建服务

使用 docker service create 命令创建 Docker 服务,从 Docker 镜像 nginx 创建一个名称为 web 的服务,指定服务副本数为 2

docker service create -p 80:80 --replicas 2 --name web nginx
docker service logs -f web

查看当前已经部署启动的全部应用服务

docker service ls

可以查询指定服务的详细信息

docker service ps web

docker ps

显示服务详细信息

JSON 格式显示方法 Web 服务的详细信息

docker service inspect web

以易于阅读方式显示 Web 服务的详细信息

docker service inspect --pretty web

服务的扩容缩容

将前面已经部署的 2 个副本的 Web 服务,扩容到 3 个副本

docker service scale web=3

通过 docker service ps web 命令查看服务扩容结果

docker service ps web

删除服务

docker service rm web

5:滚动更新

docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6

docker service ps redis

添加自定义 Overlay 网络

[root@manager ~]# docker network create --driver overlay my-network
[root@manager ~]# docker service create --replicas 3 --network my-network --name myweb nginx

数据卷创建与应用

创建数据卷

[root@manager ~]# docker volume create product-kgc

将nginx容器连接到数据卷

[root@manager ~]# docker service create --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html --replicas 1 --name kgc-web-01 nginx
[root@manager ~]# docker service ps kgc-web-01

到work01中查看数据是否进行同步

[root@worker01 ~]# cd /var/lib/docker/volumes/product-kgc/_data/ 
[root@worker01 _data]# mkdir test01 test02 
[root@worker01 _data]# docker ps
[root@worker01 _data]# docker exec -it 8875962fb67b bash

root@8875962fb67b:/# ls /usr/share/nginx/html/
50x.html  index.html  test01  test02

使用 bind 类型挂载数据卷

(1)创建测试目录
[root@manager ~]# mkdir -p /var/vhost/www/aa 
[root@worker01 ~]# mkdir -p /var/vhost/www/aa 
[root@worker02 ~]# mkdir -p /var/vhost/www/aa



在manager节点安装nfs-utils
[root@manager ~]# yum -y install nfs-utils

设置nfs共享
[root@manager ~]# vim /etc/exports
/var/vhost/www/aa *(rw,sync,no_root_squash)


启动nfs服务
[root@manager ~]# systemctl start nfs
[root@manager ~]# systemctl start rpcbind
在其他work节点挂载
yum -y install nfs-utils
mount 192.168.10.101:/var/vhost/www/aa /var/vhost/www/aa/

创建 2 kgc-web-02 服务

[root@manager ~]# docker service create --replicas 2 --mount type=bind,src=/var/vhost/www/aa,dst=/usr/share/nginx/html/ --name kgc-web-02 nginx

验证数据是否同步

[root@worker01 _data]# touch /var/vhost/www/aa/mytest
[root@worker01 _data]# docker service ps kgc-web-02
[root@worker01 _data]# docker ps -a
[root@worker01 _data]# docker exec -it d292452b1f39 bash
root@d292452b1f39:/# ls /usr/share/nginx/html/
mytest

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值