dockerswarm搭建(swarm docker-compose)

技能目标:
了解Docker Swarm的基本特性
掌握Doccker Swarm的基本架构
学习安装和部署Docker Swarm集群
8.1案例分析
8.1.1案例概述
自从Docker诞生以来,它的容器特性和镜像特性给DevOps爱好者带来了很多便利。但长期以来,Docker只能在单机上运行,其跨主机部署、运行和管理的能力一直为外界所诟病。弱跨主机能力直接导致Docker容器和主机的高耦合。这种情况使得Docker容器的灵活性减弱,难以实现容器迁移、分组等功能。
因此,Docker公司在2014年12月初发布了新的容器管理工具Swarm。随Swarm发布的Docker管理工具包括Machine和Compose。
Swarm是一套相对简单的工具,可以用来管理Docker集群。通过对Swarm的管理,集群可以被看作是一个单独的物理机或虚拟机。同时,Swarm使用标准的Docker API接口作为其访问门户。换句话说,可以通过标准的Docker命令来管理集群,例如,可以直接执行Docker命令。Swarm几乎全部是用Go语言开发的。从Github可以知道,Swarm发展非常迅速,几乎每隔几天就有代码更新。而且功能的变化和迭代还是非常频繁的。Swarm和其他Docker项目一样,从设计之初就遵循了“包含电池但可拆卸”的原则。也就是说,Swarm可以让用户通过简单的部署,轻松管理Docker集群。同时,无论管理器节点还是集群的节点节点挂起,都不会影响现有Docker容器的使用。
8.1.2案例预知识点
1.什么是docker swarm?
Docker Swarm是一个用来创建Docker主机集群(运行Docker守护进程的服务器)的工具。用Swarm来操作集群,会让用户感觉好像在一台主机上操作。
2.Docker Swarm是如何工作的
当通过在集群中部署镜像来创建服务时。在一些大型应用场景中,各种服务需要协同工作,所以服务通常被称为微服务。该服务可以是HTTP服务器、数据库或在分布式环境中运行的任何其他可执行程序。
创建服务时,可以指定要使用的容器映像和要在容器中运行的命令。服务还可以定义以下选项:
群集希望从外部提供服务的端口。
用于连接群集中服务的覆盖网络。
滚动更新策略
群集中运行的副本总数
1)服务、任务和容器
将服务部署到集群时,管理员将服务定义视为服务的必需状态。然后将服务计划为一个或多个复制副本任务。这些任务在集群的节点上彼此独立运行。
容器是一个独立的进程。在swarm模型中,每个任务调用一个容器。任务类似于槽,调度程序将容器放在槽中。一旦容器运行,调度器就认为任务正在运行。如果容器的健康监控失败或终止,任务也将终止。
2)任务和日程安排
任务是集群中调度的原子单位。当创建或更新服务声明所需的服务状态时,协调器通过调度任务来实现这些所需的状态。
任务是一种单向机制,通过分配、准备、操作等这些状态分别执行。如果任务失败,协调器将删除任务和容器,然后根据服务指定的所需状态创建一个新任务来替换它。
DockSwarm模式的基本逻辑是通用调度器和调度器。
集群如何接受服务创建请求并将任务调度到工作节点。
3)要处理的服务
可以配置服务,使当前群集中的节点无法运行其任务。在这种情况下,服务仍处于挂起状态。
如果所有节点都被挂起或耗尽,并且您创建了一个服务,它将被挂起,直到节点可用。实际上,第一个可用的节点将获得所有的任务,这在生产环境中不是一件好事。
可以为该服务保留特定数量的内存。如果集群中没有节点满足所需的内存量,服务将处于挂起状态,知道可用节点可以运行其任务。如果指定了一个非常大的值,任务将被永久挂起,除非确实有一个节点满足这个条件。
可以对服务施加约束,并且它们可能在给定的时间不被满足。
这种行为表明您的任务的需求和配置与当前的组状态没有密切关系。作为集群管理员,您可以声明集群所需的状态,管理员可以使用集群中的节点来创建状态。集群中不需要微管理任务。
如果唯一目的是删除部署服务,请将该服务扩展到0,而不要尝试将其配置为保持挂起状态。
4)副本和全球服务
有两种类型的服务部署:副本和全局。
对于副本服务,指定要运行的相同任务的数量,并且每个副本具有相同的内容。
全局服务是在每个节点上运行任务的服务。不需要预先指定任务的数量。每当一个节点被添加到集群时,协调器将创建一个任务,调度器将该任务分配给新添加的节点。全局服务优选地是用于监控代理、反病毒扫描器等的容器。希望在集群中的每个节点上运行。
3.Docker Swarm的基本特征
Docker集群管理和编排的功能是通过SwarmKit构建的,其中Swarm模式是Docker引擎支持的默认实现。Docker 1.12及更新版本都支持群体模式。我们可以基于Docker引擎构建一个群集群,然后我们可以将我们的应用服务部署到这个群集群上。创建Swarm集群的方法非常简单。首先初始化一个群集群,然后将其他节点加入集群。
Docker Swarm具有以下基本特性:
1)集群管理集成到Docker引擎中:通过内置的集群管理功能,可以直接通过Docker CLI命令创建一个Swarm集群,然后部署应用服务,无需任何其他外部软件来创建和管理一个Swarm集群。
2)去中心化设计:Swarm集群包含管理者和工作者两种类型的节点,任何类型的节点都可以基于Docker引擎直接部署。而且,在Swarm集群的运行过程中,你可以对其进行任何修改,比如添加一个管理器节点,删除一个工作者节点等。实现集群的扩展和收缩,无需暂停或重启当前的Swarm集群服务。
3)声明式服务模型:在实现的应用栈中,Docker引擎采用声明式的方式定义各种服务的期望状态。比如创建一个应用服务栈:一个Web前端服务,一个后端数据库服务,Web前端服务依赖于一个消息队列服务。
4)协调期望状态与实际状态的一致性:Swarm集群管理器节点会不断地监控集群的状态,协调集群的状态,使我们的期望状态与实际状态一致。例如,如果启动了一个应用服务,并且指定的服务副本是10,那么将启动10个Docker容器来运行。如果在一个工作节点上运行的两个Docker容器挂起,Swarm Manager将选择集群中其他可用的工作节点,并创建两个服务副本,这样运行的Docker容器的实际数量仍然与预期的10个相同。
5)多主机网络:Swarm Manager将为集群中的每个服务分配一个唯一的DNS名称,以平衡正在运行的Docker容器的负载。可以通过Swarm内置的DNS服务器查询Swarm集群中运行的Docker容器的状态。
6)负载均衡:在Swarm中,你可以指定如何在节点间分配服务容器来实现负载均衡。如果想在Swarm集群外部使用负载均衡器,可以将服务容器的端口暴露给外部。
7)安全策略:在Swarm集群内部的节点中,基于TLS的双向认证是强制性的,在单个节点上以及集群中的节点之间进行安全加密通信。您可以选择使用自签名根证书或自定义根CA(根CA)证书。
8)滚动更新:对于服务需要更新的场景,我们可以在多个结节上进行增量部署更新,群管理器支持通过使用Docker CLI设置一个耽搁时间间隔,实现多个服务在多个结节上依次进行部署,这样可以非常灵活地控制。如果有一个服务更新失败,则暂停后面的更新操作,重新回滚到更新之前的版本。
8.1.3 案例环境
1.本案例实验环境
本案例实验环境如表8-1所示。
表8-1码头工人群系统环境
2.案例拓扑
码头工人群提供了基本的群集能力,能够使多个码头引擎组合成一个组,提供多容器服务一窝蜂。使用标准的Docker API,启动容器可以直接使用码头运行命令一窝蜂。更核心的则是关注如何选择一个主机并在其上启动容器,最终运行服务码头工人群。拓扑图如图8.1所示。
图8.1码头工人群拓扑图
3.案例需求
部署码头工人群集群
4.案例实现思路
1)准备码头工人群部署环境。
2)部署码头工人群集群。
8.2 案例实施
码头工人群系统环境准备
1.修改主机名
[root @ localhost ~]# hostname CTL set-hostname manager//192。168 .168 .93
[root @ localhost ~]# hostname CTL set-hostname worker 01//192。168 .168 .94
[root @ localhost ~]# hostname CTL set-hostname worker 02//192。168 .168 .95
2.修改主机对应主机名
[root @ manager ~]# vim/etc/hosts//每台机器都需要执行
127.0.0.1本地主机本地主机。本地域本地主机四本地主机4 .本地域四
:1本地主机本地主机本地域本地主机6本地主机6本地域6
经理
工人01
工人02
3.添加外网十进位计数制解析地址
[root @ manager ~]# vim/etc/resolv。conf//每台机器都需要执行,也可以根据本地的网络环境添加相对应的十进位计数制解析地址
202.106.0.20域名服务器
4.安装必要的依赖软件
//每台机器都需要执行
[root @ manager ~]# yum-y install wget telnet lsof vim
[root @ manager ~]# yum install-y yum-utils设备映射器-持久数据lvm2
[root @ manager ~]# yum-config-manager-add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@manager ~]# yum -y安装码头工程
[root@manager ~]# systemctl重启码头工人
//添加免证书验证
[root @ manager ~]# cat EOF/etc/docker/daemon。数据
{
\ ‘ registry-mirrors \ ‘ :[\ ‘ https://注册表。docker-cn。com \ ‘]
}
文件结束
5.防火墙d放行端口
每台机器都需要执行,群集节点之间保证Tcp 2377(群集管理端口)、Tcp/Udp 7946(容器网络发现端口)和Udp 4789(覆盖网络通信端口)。
[root@manager ~]# systemctl重新启动防火墙d
[root @ manager ~]# firewall-cmd-zone=public-add-port=2377/TCP-permanent
[root @ manager ~]# firewall-cmd-zone=public-add-port=7946/TCP-permanent
[root @ manager ~]# firewall-cmd-zone=public-add-port=7946/UDP-permanent
[root @ manager ~]# firewall-cmd-zone=public-add-port=4789/TCP-permanent
[root @ manager ~]# firewall-cmd-zone=public-add-port=4789/UDP-permanent
[root@manager ~]#防火墙-命令-重新加载
重启防火墙d之后,还需要重启码头工人服务。
[root@manager ~]# systemctl重启码头工人
6.关闭防火墙
[root@manager ~]# setenforce 0 //每台机器都需要操作
码头工人群群集部署
1.创建蜂群群集
创建蜂群群集部署命令,格式如下所示:
停靠站群初始化-广告-地址
在经理节点上,创建一个蜂群群集,执行如下命令:
[root @ manager ~]# docker swarm init-advertise-addr 192。168 .168 .93
上面-广告地址选项指定经理节点会出版它的地址为192.168.168.93,后续工作节点加入到该蜂群群集,必须要能够访问到经理的该互联网协议(互联网协议)地址。可以看到,下面是上述命令的执行结果。
群体初始化:当前节点(qj6mw4uaqjzuefmylnbhuj8me)现在是管理器。
要向这个集群添加一个工人,运行下面的命令:
docker swarm join-token SWMTKN-1-27 wmombuc 1 w9 h0 qv 48 mswupgftou 5 af 9 gnv HP 22 wh 0 lowp 57v 5-3 xzmsxpp 81 effghntsqjxlb 58 192。168 .16586666667
要向此群组添加管理器,请运行“docker群加入-令牌管理器”,并按照说明进行操作。
该结果中给出了后续操作引导信息,显示如何将一个工作节点加入到蜂群群集中。也可以通过如下命令获取该提示信息:
[root@manager ~]# docker群加入-令牌工人
在任何时候,如果需要向已经创建的蜂群群集中增加工作节点,只要新增一个主机(物理机、云主机等都可以),在其上安装好码头引擎并启动,然后执行上述码头工人群体加入命令,就可以加入到蜂群群集中。
这时,也可以查看当前经理节点的基本信息,执行码头信息命令,输出信息中可以看到,包含如下关于蜂群的状态信息。
[root@manager ~]# docker信息
集装箱: 0
正在运行: 0
Paused: 0
停止: 0
图像: 0
服务器版本: 18.03.0
存储驱动器:重叠2
支持文件系统: xfs
支持d_type:真
本机覆盖差异:假
日志驱动程序: json文件
c组驱动程序:摄氏度组
插件:
卷:本地
网络:网桥主机麦克法兰空覆盖
日志: AWS日志fluent d gcplogs gelf日志d JSON-file日志条目splunk系统日志
Swarm:活跃
nodeid : QJ 6 MW 4 uaqjzuefmylnbhuj 8 me
经理:是真的吗
集群id : ra 042h 0 yvxw 4p 9 e 7 Cr 9 z 2 hyhe
经理: 1
节点: 1
.//省略部分
可以看出,目前蜂群群集只有经理一个节点,而且状态是活跃的。也可以在经理节点上执行停靠节点限位开关(Limit Switch)命令查看结节状态,如下所示:
[root@manager ~]# docker节点
身份主机名状态可用性管理器状态引擎版本
qj6mw4uaqjzuefmylnbhuj8me *经理就绪活动领导者18.03.1-ce
2.添加工人节点到蜂群群集
接下来,可以根据上面提示信息,分别在工人01、工人02两个工作节点上,执行命令将工作节点加入到蜂群群集中,命令如下所示:
[root @ worker 01 ~]# docker swarm join-token SWMTKN-1-27 wmombuc 1 w9 h0 qv 48 mswupgftou 5 af 9 gnv HP 22 wh 0 lowp 57v 5-3 xzmsxpp 81 effghntsqjxlb 58 192。168 .1686668566
这个节点作为一个工作者加入了一个群体。
[root @ worker 02 ~]# docker swarm join-token SWMTKN-1-27 wmombuc 1 w9 h0 qv 48 mswupgftou 5 af 9 gnv HP 22 wh 0 lowp 57v 5-3 xzmsxpp 81 effghntsqjxlb 58 192。168 .165866667
这个节点作为一个工作者加入了一个群体。
如果成功,可以看到上述成功加入蜂群群集的信息。这时,也可以在经理节点上,查看蜂群群集的信息,示例如下所示:
[root@manager ~]# docker信息
.//省略部分
Swarm:活跃
nodeid : QJ 6 MW 4 uaqjzuefmylnbhuj 8 me
经理:是真的吗
集群id : ra 042h 0 yvxw 4p 9 e 7 Cr 9 z 2 hyhe
经理: 1
节点: 3
3.查看蜂群群集中全部结节的详细状态信息
可以执行如下所示命令,查看蜂群群集中全部结节的详细状态信。
[root@manager ~]# docker节点
身份主机名状态可用性管理器状态引擎版本
qj6mw4uaqjzuefmylnbhuj8me *经理就绪活动领导者18.03.1-ce
n 8 C2 ay 19 VJ 2果酱F2 JC 8 B3 T2安永工人01就绪激活18.03.1-ce
MD 3s F2 f1 eqml 785 qp jgy 0 idef worker 02就绪激活18.03.1-ce
上面信息中,可用性表示群体调度程序是否可以向群集中的某个结节指派任务,对应有如下三种状态:
活动:群集中该结节可以被指派任务。
暂停:群集中该结节不可以被指派新的任务,但是其他已经存在的工作保持运行。
排水:群集中该结节不可以被指派新的任务,群调度程序停掉已经存在的,任务,并将它们调度到可用的结节上。
查看某一个结节的状态信息,只可以在该经理节点上执行如下命令:
[root@manager ~]# docker节点自检
[
{
\ ‘ ID \ ‘ : \ ‘ QJ 6 MW 4 uaqjzuefmylnbhuj 8 me \ ‘,
\ ‘版本\’: {
\’Index\’: 9
},
\ ‘ created at \ ‘ : \ ‘ 2018-05-21t 08:26335 z \ ‘,
\ ‘ UpdatedAt \ ‘ : \ ‘ 2018-05-21t 08:26333 z \ ‘,
\’Spec\’: {
\’Labels\’: {},
\’Role\’: \’manager\ ‘,
\ ‘可用性\’: \ ‘活动\ ‘
},
\’Description\’: {
\”主机名””:管理器”,
\ ‘ platform \ ‘ 3330 |
\”体系结构” \ ” 3360 ” \ ” x86 _ 64 ” },
\ ‘ : \ ‘ linux \ ‘
},
\ ‘ resources \ ‘ 3360 |
\ ‘纳米\ ‘ : 6000000000,
\ ‘内存字节’ : 100953018368
},
\ ‘引擎\ ‘ 3330 |
\ ‘引擎版本\ ‘ 3360 \ ‘ 18。03 .1-ce ‘,
\ ‘插件\ ‘ 3330[
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ awslogs \ ‘
},
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ fluentd \ ”
},
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ gcplogs \ ”
},
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ gelf \ ”
},
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ journald \ ”
},
{
\”类型”3360日志,
\”名称“3360”JSON文件”
},
{
\”类型”3360日志,
\ ‘名称\ ‘ 3360 \ ‘记录器\ ‘
},
{
\”类型”3360日志,
\ ‘名称\ ‘ : \ ‘ splunk \ ”
},
{
\”类型”3360日志,
\ ‘ name \ ‘ : \ ‘ syslog \ ”
},
{
\”类型”3360″网络”,
\ ‘名称\ ‘ : \ ‘桥\ ‘
},
{
\”类型”3360″网络”,
\”名称”3360″主机”
},
{
\”类型”3360″网络”,
\ ‘名称\ ‘ : \ ‘ macvlan \ ‘
},
{
\”类型”3360″网络”,
\ ‘名称\ ‘ : \ ‘ null \ ‘
},
{
\”类型”3360″网络”,
\ ‘名称\ ‘ : \ ‘覆盖\ ‘
},
{
\”类型”3360″卷”,
\”名称”3360″本地”
}
]
},
\ ‘ tlsinfo \ ‘ :
\ ‘信任根’3330-‘ begin certificate-\ nmibazcgawibagiujeux/696 eyt 0 m2 jsxgynicowcgkoziji 0 eawiw \ nezema 8 ga 1 ueaxmic 3 dhcm 0 ty 2 ewcnmtgwntidgymtawwhcnmzwnet 2 mdgy \ nmtawwjatmmewdwqqdewzd 2 fybs 1 jytbmbmgbyqgsm 49 agegccqgsm 49 awh \ na 0 iamnm
\’确定主题’ 3330 ‘ mbxetapbgnvbamtchn 3y xjtlwnh ‘,
\ ‘确定公钥3330 \ ‘ mfkwewyhkozzj 0 caqcdqgaeydv 2 ljfagznut 9d 5 U4 rfe jvhbuzbrfvjajkmjixbdwpsaag 172 fklvlvlvzmoxmtogvhz 1c 1q/g==’
}
},
\”状态”3360[
\”状态”3360″就绪”,
\ ‘ addr \ ‘ : \ ‘ 192。168 .168 .93 \ ”
},
\ ‘经理状态\ ‘ 3360 |
\’Leader\’: true,
\”可到达性”\ 3360″可到达性”},
\ ‘ add ‘ 3360 \ ‘ 192。168 .168 .93332377 \ ”
}
}
]
阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏阿苏,停靠者蜂群杨俊钦先生。

影音素材

郭富城无损歌曲精选26首合集百度云网盘下载 郭富城mp3百度云

2024-9-28 7:09:27

ps曲线调色的原理及技巧手机,PS基础 曲线调色的基本原理

2022-10-15 10:27:21

购物车
优惠劵
搜索