当前位置:   article > 正文

【docker详解14】-Docker Swarm容器集群编排_docker --replica会均匀分布吗

docker --replica会均匀分布吗

目录

一、Docker Swarm介绍

二、集群环境搭建

2.1、实验环境

2.2、安装基础运行环境

2.3、建立swarm集群

2.4、swarm集群管理

(1)、重新生成集群token

(2)、节点权限降级

(3)、节点权限升级

(4)、删除一个集群节点

(5)、其他常用命令

2.5、集群管理常见报错

三、集群高可用演示

3.1、Docker Swarm高可用性介绍

3.2、高可用切换演示

四、通过docker service管理服务

4.1、docker service命令详解

4.2、使用docker service管理服务演示

(1)、创建服务

(2)、扩容或缩容服务


一、Docker Swarm介绍

        官网介绍:Swarm mode overview | Docker Documentation

        docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

        从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

docker swarm架构图:

       

docker swarm和k8s本质都是容器编排和管理,两者的对比如下:

        swarm:​内嵌在容器引擎内部,是容器引擎的一部分,与容器深度绑定,swarm偏重的是容器的部署,侧重于容器技术的扩展。

        ​k8s:​独立于docker,与docker是分离的,并完全不依赖于底层的docker,它侧重于​业务应用​的集群部署。k8s对容器的所有操作都渗透着为​应用而服务​的理念。以服务为中心,docker仅仅是其底层技术支撑的一种技术。

swarm与kubernetes对比
SwarmKubernetes
设计初衷跨宿主机集群的容器管理支持分布式、服务化的应用架构
产品理念完善史2年15年
GitHub Star4098+18200+
社区主力DockerGoogle、Redhat、CoreOS、华为、浙大SEL
核心功能管理节点、调度任务、服务发现、Rolling update、容器HA、通讯安全资源调度、服务发现、服务编排、资源逻辑隔离、服务自愈、安全配置管理、Job任务支持、自动回滚、内部域名服务、健康检查、有状态支持、运行监控/日志、扩容缩容、负载均衡、灰度升级、容灾恢复、应用HA
服务发现的实现通过Consul实现内置
模型抽象Pod、Service、Lable、RC、Node
典型案例SA Home Loans(Docker Datacenter内置) Bugsnag、新浪微博Pearson、Box、eBay、Yahoo、SAP、OpenAI、wepay、Samsung、The New York Times、华为、中国移动、网易、新浪SAE
优劣势

优势:Docker原厂维护,Swarm API兼容docker API,学习成本低,架构简单,部署运维成本较低,使用简单;

劣势:无法提供集群的更加精细化的管理,网络性能非官方测试只有主机网络性能的70%;如果容器或者容器主机崩溃,swarm没有机制来保证容器的运行;无法满足复杂的调度场景;

优势:容器的高可用性,集群的精细化管理,容器管理可靠性高,可以监控并维持容器的生命,默认使用Flannel和overlay网络,支持复杂的网络场景和容器调度场景;

劣势:学习成本高,部署运维成本高,非Docker原厂维护(Google主力维护);

                如果是小型项目,并且容器管理场景不会很复杂,可以考虑使用docker swarm,单机的话compose就能满足,如果是大型或者复杂使用场景,就需要使用kubernetes,总的来说,kubernetes才是最终归宿。

二、集群环境搭建

2.1、实验环境

主机环境
操作系统主机名ip地址功能
centos7.5  x86_64node1192.168.1.50管理节点,manager node
centos7.5  x86_64node2192.168.1.51工作节点,worker node
centos7.5  x86_64node3192.168.1.52工作节点,worker node
centos7.5  x86_64node4192.168.1.53工作节点,worker node

2.2、安装基础运行环境

(关闭firewalld和selinux)

对4台主机执行如下命令安装docker环境:

  1. #清除老版本docker,确保机器上没有安装docker
  2. yum remove docker docker-client docker-client-lastest docker-common docker-lastest docker-lastest-logrotate docker-logrotate docker-engine
  3. #yum安装gcc相关命令
  4. yum -y install gcc gcc-c++
  5. #安装 yum-utils 包(提供yum-config-manager 实用程序)并设置稳定的存储库
  6. yum install -y yum-utils
  7. #设置stable镜像仓库
  8. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  9. #更新yum软件包索引
  10. yum makecache fast
  11. #安装docker-ce引擎
  12. yum -y install docker-ce docker-ce-cli containerd.io
  13. #检测是否安装成功
  14. docker version
  15. systemctl start docker
  16. systemctl enable docker

2.3、建立swarm集群

步骤1:

在node1建立swarm管理节点:

docker swarm init --advertise-addr 192.168.1.50

        如上图,建立管理节点后,会返回从节点加入的命令。

步骤2:

将node2、node3、node4加入管理节点node1:

docker swarm join --token SWMTKN-1-0vnw7qc2r8796e8thdywk7vtjvje366e9e5mscob59ca7lkhb6-bzitohbqihf21jqhxdtoan3bz 192.168.1.50:2377

 步骤3:

在manager管理节点查看集群状态(worker节点是无法查看的):

  1. #在node1 manager节点执行
  2. docker node ls

2.4、swarm集群管理

(1)、重新生成集群token

如果有新的节点需要加入,加入的token忘记了,就需要重新在管理节点生成一个token,如下:

  1. #只能在manager节点生成token
  2. #1、生成manager token
  3. docker swarm join-token manager
  4. #2、生成worker token
  5. docker swarm join-token worker

     

         如上,根据需求选择是以manager身份加入还是worker身份加入;

        如下图,标记为Reachable的为以manager身份接入的节点,空白的是worker节点,Reachable节点权限还是要低于Leader主节点,但是也拥有集群管理权限,比如查看集群状态,生成集群join-token等:

(2)、节点权限降级

比如将node4节点由Reachable管理节点降级为worker节点

在Leader管理节点node1执行如下:

docker node demote node4

(3)、节点权限升级

比如将node4节点由Worker节点降级为Reachable管理节点

在Leader管理节点node1执行如下命令:

docker node promote node4

(4)、删除一个集群节点

【说明】:

a、删除集群节点(worker节点),需要被删节点先主动离开集群,然后再由manager节点删除

b、如果删除的是manager节点,则需要先降级为worker节点,再主动离开集群,最后由manager节点删除

  • 删除一个普通worker节点操作如下,以删除node2为例:
  1. #在node2被删节点执行如下:
  2. docker swarm leave -f #-f参数表示强制离开集群
  3. #在node1管理节点执行如下:
  4. docker node ls #观察node1节点状态STATUS是否变为Down
  5. docker node rm node2 #删除node2节点

  • 删除一个Reachable管理节点,以node4为例:
  1. #在node1管理节点操作下面命令:
  2. docker node demote node4 #先将node4降级为worker
  3. #在node4被删节点操作如下:
  4. docker swarm leave #离开集群
  5. #在node1管理节点操作如下:
  6. docker node rm node4

(5)、其他常用命令

(主要为docker node命令和docker swarm命令,详情可使用docker node --help和docker swarm --help查看所有参数)

  1. #查看集群节点状态,只能在manager节点使用
  2. docker node ls
  3. #查看运行节点的任务列表
  4. docker node ps [NODENAME]
  5. #查看节点详细信息
  6. docker node inspect [NODENAME]
  7. #更新节点
  8. docker node update [NODENAME]

2.5、集群管理常见报错

(1)、存在两个同名swarm节点,导致无法删除

解决方式:HOSTNAME相同,导致swarm不知道删哪个,但是两者ID号不同,可以使用ID方式删除,如下:

docker node rm 5ka7ksvrnlr1n2wjrtkanpnq3 -f

三、集群高可用演示

3.1、Docker Swarm高可用性介绍

        在Docker Swarm中,Swarm manager负责管理整个集群,包括成规模的众多Docker主机资源。如果这个Swarm manager挂了,你必须创建一个新的来解决中断的服务。

        Docker Swarm具有High Availability的特性,当有一个manager实例出现问题,Docker Swarm可以优雅的进行故障转移-failover。你可以创建一个单独的primary manager实例和多个replica实例来使用这个特性。

        一个primary manager是Docker Swarm集群的主要联系人。你也可以创建replica实例作为次要联系人,并与它进行通信。对于replica收到的请求会被自动的代理到primary manager。如果一个primary manager故障,一个replica会成为leader。通过这种机制,你可以始终保持于集群的联系。

3.2、高可用切换演示

以如下docker集群状态为例,node1为主管理节点、node2和node4为普通管理节点、node3为工作节点:

 当在node1 Leader节点执行systemctl stop docker,模拟将docker服务挂掉之后,等过一小会儿之后,docker服务会自动被重新启动,并且集群将重新连接,只是主管理节点(Leader)会转移,如下图:

 【注意】:如果集群没有设置普通管理节点(Reachable),那么当主管理节点(Leader)挂掉再恢复之后,主管理节点(Leader)不会改变,因为没有普通管理节点(Reachable)参与选举。

四、通过docker service管理服务

4.1、docker service命令详解

【注】:以下命令中,mynginx和nginx更换为对应的服务名和镜像名 

(1)、创建/启动服务

  1. #创建nginx服务
  2. docker service create nginx
  3. #创建nginx服务,并映射80端口
  4. docker service create -p 80:80 nginx
  5. #创建nginx容器,并设置5个运行副本
  6. docker service create --replicas 5 nginx

(2)、查看正在运行的服务

docker service ls

(3)、查看某个服务运行状态

docker service ps mynginx

(4)、增加和删除DNS

  1. docker service update --dns-add 222.222.222.222 mynginx
  2. docker service update --dns-rm 222.222.222.222 mynginx

(5)、增加和删除端口映射

  1. docker service update --publish-add 80:80 xenodochial_ritchie
  2. docker service update --publish-rm 80:80 xenodochial_ritchie

(6)、缩容和扩容

  1. #设置运行副本为2个实例
  2. docker service scale tender_hofstadter=2
  3. #设置运行副本为5个实例
  4. docker service scale tender_hofstadter=5

(7)、显示服务详细信息

docker service inspect mynginx

(8)、获取服务日志

docker service logs mgnginx

(9)、删除一个或多个服务

docker service rm mynginx

(10)、回滚服务

docker service rollback mynginx

(11)、更新服务

docker service update mynginx

4.2、使用docker service管理服务演示

(1)、创建服务

以在swarm集群创建nginx服务为例:

集群节点状态如下:

创建mynginx服务:

docker service create --name mynginx -p 80:80 nginx

查看docker service:

docker service ls

 如上图,REPLICAS为1表示目前只有一个副本在运行

查看docker service中mynginx的状态和信息:

docker service ps mynginx

如上图, 可以看到mynginx服务只有一个副本在运行,并且是运行在node4节点上,可以在node4节点执行docker ps -a查看到在运行的mynginx容器:

因为现在mynginx已经在swarm集群运行,并且映射了端口,此时通过node1~4任何一个节点的主机ip都可以访问到nginx服务:

(2)、扩容或缩容服务

 (当web访问量骤增和骤减,这时候就需要动态的对mynginx服务进行扩容和缩容)

  1. #有以下两种方式,2选1即可
  2. #方式1
  3. docker service update --replicas 5 mynginx #将运行副本数设置为5
  4. #方式2
  5. docker srevice scale mynginx=5 #将运行副本数设置为5

查看扩容/缩容后的服务状态:

docker service ls

docker service ps mynginx

 如上图可以看到,docker service会将所有副本均衡的分布到所有节点上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/809184
推荐阅读
相关标签
  

闽ICP备14008679号