Docker容器与虚拟化技术——容器集群之Docker Swarm

                                                 容器集群之Docker Swarm

一、Docker Swarm简介
Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案。使用它,可以将多个Docker主机封装为单个大型的虚拟Docker主机,快速打造一套容器云平台。
1、特性
(1)Docker Engine 集成集群管理
使用Docker Engine CLI 创建一个Docker Engine的Swarm模式,在集群中部署应用程序服务。
(2)去中心化设计
Swarm角色分为Manager和Worker节点,Manager节点故障不影响应用使用。
(3)扩容缩容
可以声明每个服务运行的容器数量,通过添加或删除容器数自动调整期望的状态。
(4)期望 状态 协调
Swarm Manager节点不断监视集群状态,并调整当前状态与期望状态之间的差异。例如,设置一个服务运行10个副本容器,如果两个副本的服务器节点崩溃,Manager将创建两个新的副本替代崩溃的副本。并将新的副本分配到可用的worker节点。
(5)多主机网络
可以为服务指定overlay网络。当初始化或更新应用程序时,Swarm manager会自动为overlay网络上的容器分配IP地址。
(6)服务 发现
Swarm manager节点为集群中的每个服务分配唯一的DNS记录和负载均衡VIP。可以通过Swarm内置的DNS服务器查询集群中每个运行的容器。
(7)负载均衡
实现服务副本负载均衡,提供入口访问。也可以将服务入口暴露给外部负载均衡器再次负载均衡。
(8)安全 传输
Swarm中的每个节点使用TLS相互验证和加密,确保安全的其他节点通信。
(9)滚动 更新
升级时,逐步将应用服务更新到节点,如果出现问题,可以将任务回滚到先前版本。使用swarm 要保证2377(manger和worker 之间的通信端口)tcp/udp 7946(worke 节点之间)和4789(overlay 网络之间的通信)

2、Docker Swarm架构
    Docker Swarm提供了基本的集群能力,能够使多个Docker Engine组合成一个group,提供多容器服务。Swarm使用标准的Docker API,启动容器可以直接使用docker run命令。Swarm更核心的则是关注如何选择一个主机并在其上启动容器,最终运行服务。
(1)Manager Node
Manager Node负责调度Task,一个Task表示要在Swarm集群中的某个Node上启动Docker容器,一个或多个Docker容器运行在Swarm集群中的某个Worker Node上。同时,Manager Node还负责编排容器和集群管理功能(或者更准确地说,是具有Manager管理职能的Node),维护集群的状态。需要注意的是,默认情况下,Manager Node也作为一个Worker Node来执行Task。Swarm支持配置Manager只作为一个专用的管理Node
(2)Worker Node
Worker Node接收由Manager Node调度并指派的Task,启动一个Docker容器来运行指定的服务,并且Worker Node需要向Manager Node汇报被指派的Task的执行状态。
(3)Task
task 任务:一个任务包含了一个容器及其运行的命令。 task 是 service 的执行实体,task 启动 docker 容器并在容器中执行任
(4)service
一个服务是工作节点上执行任务的定义。

二、安装Swarm集群
1、所有节点安装docker
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce-18.09.6

2、初始化(创建)Swarm
    不包含在任何 Swarm 中的 Docker 节点,称为运行于单引擎(Single-Engine)模式。一旦被加入 Swarm 集群,则切换为 Swarm 模式
    docker swarm init --advertise-addr 192.168.11.51:2377 --listen-addr=192.168.11.51:2377

    相关端口:
2377/tcp:用于客户端与 Swarm 进行安全通信
2375/tcp:docker外部访问的API接口使用的端口,用于远程连接
2376/tcp:Docker本身提供了加密的远程管理端口2376,配合CA证书,就能提供TLS连接了。
7946/tcp 与 7946/udp:用于控制面 gossip 分发
4789/udp:用于基于 VXLAN 的覆盖网络

3、添加节点
(1)查询加入节点的token信息
docker swarm join-token manager
docker swarm join-token worker
(2)使用查询出的添加命令添加节点
docker swarm join --token SWMTKN-1-0zg8r3xwr0msgcnpx55qs3xfd6o413hsk56lfbj6eim16b7y7a-0ovavzwxbhnsfe5ns68xuqkia 192.168.11.51:2377
(3)查看节点
docker node ls

4、Docker Swarm命令详解
(1)docker swarm:管理集群
docker swarm COMMAND
(2)docker swarm ca:管理根CA
查看或旋转当前群集CA证书。此命令必须针对管理器节点

(3)docker swarm init:初始化一个群
初始化一群。此命令所针对的停靠引擎将成为新创建的单节点群中的管理器。

(4)docker swarm join:作为节点和/或管理器加入群集
docker swarm join [OPTIONS] HOST:PORT
将一个节点加入群中。根据您使用该--token标志传递的令牌,该节点将作为管理器节点或工作者节点加入。如果您传递经理令牌,则该节点将作为经理加入。如果您传递工作人员令牌,则该节点将作为工作人员加入

(5)docker swarm join-token:管理连接令牌
docker swarm join-token [OPTIONS] (worker|manager)


(6)docker swarm leave:离开蜂群
当您在员工上运行此命令时,该员工将离开群集。
您可以使用--force选择经理将其从群集中移除。但是,这并不能重新配置群集,以确保有足够的管理人员来维持群集中的法定人数。将经理从群集中移除的安全方法是将其降级给员工,然后指示其在不使用“仲裁”的情况下离开法定人数。--force.只使用--force在经理离开后不再使用群集的情况下,例如在单节点群中。
--force,-f:默认false,强制离开,忽略警告
(7)docker swarm unlock:解锁群
使用用户提供的解锁密钥解锁锁定管理器。如果打开了autolock设置,则必须使用此命令在Docker守护进程重新启动后重新激活管理器。解锁键是在启用自动收费锁时打印的,并且还可以从docker swarm unlock-key命令。
(8)docker swarm unlock-key:管理解锁密钥
--quiet, -q:默认false,只显示令牌
--rotate:默认false,旋转解锁键
(9)docker swarm update:更新swarm
使用新的参数值更新群集。此命令必须针对管理器节点。

5、docker service命令详解
(1)docker service create:docker 创建由指定参数描述的服务。必须在管理器节点上运行此命令。

(2)docker service inspect:检查指定的服务。必须针对管理器节点运行此命令。
默认情况下,这将呈现JSON数组中的所有结果。如果指定了格式,则将对每个结果执行给定的模板。
docker service inspect [OPTIONS] SERVICE [SERVICE...]
--format,-f:使用给定的Go末班格式化输出
--pretty:默认false,以人性化格式打印信息
(3)docker service logs:批处理-检索执行时存在的日志。
可以与服务的名称或 ID 一起使用,也可以与任务的 ID 一起使用。如果传递一个服务,它将显示该服务中所有容器的日志。如果任务被传递,它将只显示来自该特定任务的日志。
docker service logs [OPTIONS] SERVICE|TASK

(4)docker service ls:此命令在以管理器为目标运行时,列出服务在群集中运行。
--filter,-f:根据提供的条件过滤输出
--format:使用Go模板的打印服务
--quiet,-q:默认false,只显示ID
(5)docker service ps:列出作为指定服务的一部分运行的任务。必须针对管理器节点运行此命令。
docker service ps [OPTIONS] SERVICE [SERVICE...]
--filter,-f:根据提供的条件过滤输出
--format:使用Go模板的打印任务
--no-resolve:默认false,不要将ID映射到名称
--no-TRUNC:默认false,不要截断输出
--quiet,-q:默认false,只显示任务ID
(6)docker service rm:从群集中移除指定的服务。必须针对管理器节点运行此命令。
docker service rm SERVICE [SERVICE...]
(7)docker service scale:缩放一个或多个复制服务
Scale 命令允许您将一个或多个复制服务向上或向下扩展到所需的副本数量。此命令不能应用于全局模式的服务。命令将立即返回,但服务的实际扩展可能需要一些时间。若要在保持服务处于活动状态的同时停止服务的所有副本,可以将标度设置为0。
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
(8)docker service update:更新服务
按照指定的参数描述更新服务。该命令必须以管理器节点为目标运行。参数与docker service create相同。通常,更新服务只会导致服务的任务被替换为新服务,如果对服务的更改需要重新创建任务才能生效。
docker service update [OPTIONS] SERVICE
6、docker node命令详解
(1)docker node demote:将一个或多个节点从群集中的管理器降级。
docker node demote NODE [NODE...]
(2)docker node inspect:在一个或多个节点上显示详细信息
docker node inspect [OPTIONS] self|NODE [NODE...]
--format,-f:使用给定的Go模板格式化输出
--pretty:默认false,以人性化的格式打印信息
(3)docker node ls:列出群中的节点
--filter,-f:根据提供的条件过滤输出
--format:使用Go模板的pretty-print节点
--quiet,-q:默认false,只显示ID
(4)docker node promote:将一个或多个节点提升为管理器
docker node promote NODE [NODE...]
(5)docker node ps:列出一个或多个节点上运行的任务,默认为当前节点
docker node ps [OPTIONS] [NODE...]
--filter,-f:根据提供的条件过滤输出
--format:使用Go模板打印输出
--quiet,-q:默认false,只显示ID
--no-resolve:默认false,不要将ID映射到名称
--no-trunc:不要截断输出
(6)docker node rm:从群中删除一个或多个节点
docker node rm [OPTIONS] NODE [NODE...]
--force,-f:强制删除
(7)docker node update:更新有关节点的元数据,如其可用性、标签或角色
docker node update [OPTIONS] NODE
--availability:节点可用性( “active”|“pause”|“drain”)
--label-add:添加或更新节点标签(key = value)
--babel-rm:删除节点标签(如果存在)
--role:节点的角色(“worker”|“manager”)

三、Swarm的Web管理
1、Portainer
(1)安装
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

(2)优点
①支持容器管理、镜像管理
②轻量级,消耗资源少
③基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
④支持权限分配
⑤支持集群
(3)缺点
①功能不够强大。
②容器创建后,无法通过后台增加端口。

2、dockerui
(1)安装
docker run -itd --name daocker-web -p 9001:9000 -v /var/run/docker.sock:/var/run/docker.sock abh1nav/dockerui
https://github.com/kevana/ui-for-docker

3、shipyard
(1)自动安装
https://shipyard-project.com/automated-deployment/
(2)手动安装
http://shipyard-project.com/manual-deployment/
①安装DATASTORE账号密码管理容器
docker run -itd --restart=always --name shipyard-rethinkdb rethinkdb
②安装集群发现服务Discovery
docker run -tid -p 4001:4001 -p 7001:7001 --restart=always --name shipyard-discovery microbox/etcd -name discovery
③安装docker-proxy协议代理
docker run -tid -p 2375:2375 --hostname=$HOSTNAME --restart=always --name shipyard-proxy -v /var/run/docker.sock:/var/run/docker.sock -e PORT=2375 shipyard/docker-proxy:latest
④安装Swarm管理节点
docker run -tid --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 etcd://192.168.11.51:4001
⑤安装Swarm从节点
docker run -itd --restart=always --name shipyard-swarm-agent swarm:latest join --addr 192.168.11.50:2375 etcd://192.168.11.50:4001
⑥安装Shipyard管理界面
docker run -itd --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8080:8080 shipyard/shipyard:latest server -d tcp://swarm:3375

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值