我如何在生产中使用Docker Swarm运货集装箱?

      最后更新:2021-11-04 10:07:15 手机定位技术交流文章

      随着我们的行动规模和集装箱规模的扩大,大量集装箱的管理将给我们带来许多问题。 杜克正式宣布解决多集装箱管理问题,我们可以利用多集装箱管理问题来管理更大的集装箱集群。

      后代的永生
      2014年,Docker在集装箱市场上变得更加活跃,包装由Mesos和Kubernetes组织。 同时,Docker开始准备包装开发和集束管理工具,并启动了自己的通信协议项目Baam。 之后,Beam开发了Beam,Beam成为能够使用Docker API进行控制的分布式系统,此后,该项目于2014年11月被称为libswarm。

      Docker团队在2016年重建了Swarm Swarm, 被称为Swarm V2, 以满足中央服务的扩展。 目前,Docker Swarm可以处理100多个节点的集束规模,而Docker团队正在出版Docker 1.In 12版,Docker Swarm默认会被纳入 Docker 引擎。

      因为Swarm是一个正式的Docker包装集束管理平台,Swarm最重要的好处之一是生育支持Docker API,这使得前Docker用户能够非常方便地将服务转移到Swarm。

      与此同时,Swarm为Docker网络插件提供内部支持,让用户能够轻松构建需要交叉主机通信的集装箱集群。 但是,Swarm的好处远不止于此,还有更多,如以下所列。

      Swarm采用拉夫特(分布式一致性协议)协议,以确保各组之间数据的一致性,管理多个集装箱节点的集群,以尽量减少单一点故障。

      安全:为维护节点之间的通信安全,Swarm采用TLS双向认证。它可以使用双向TLS进行节点认证、角色授权和加密通信,还可以自动处理证书的签发和替换。

      简单说来:Swarm比较容易使用,除了Docker Docker(Docker)之外,几乎没有其他外部依赖关系,Docker(Docker 1 中引入了Docker 1 ) 。根据版本12,Swarm直接建在Docker(Docker)中,可能被视为“打开了盒子 ” 。

      Swarm的好处来自其具有吸引力的架构,我们将研究这一架构。

      Swarm 的架构
      Swarm的结构分为两部分:管理节点(管理节点)和工人节点(工人节点)。

      图1显示成群结构。

      管理节点负责接收用户的请求,该节点提供用户定义的集装箱活动状态说明,然后Swarm负责发送和管理集装箱,并试图达到用户的预期状态。

      工作节点:行政部门负责履行某些包装管理职责(任务),如启动、停止、删除等。

      管理节点和工作节点的作用没有固定,您可以手工将工作节点转换为管理节点或管理节点。

      摇摇基本概念
      在我们开始使用Swarm之前,我们必须首先掌握一些Swarm的关键原则,这些原则将有助于我们学习和理解Swarm的建筑。

      Swarm 集群
      Swarm集群是一批由Swarm集中管理和控制的节点,可能是真正的机器或虚拟机器,其中一些节点作为管理节点,负责集束国的行政和协调工作,另一些节点作为工作节点,负责集装箱管理和执行特殊职责,如用户服务分解。

      节点
      Swarm 集群中的每一台物理机器或虚拟机器被称为节点。 节点根据其工作职责被归类为管理节点或工作节点。 由于Raft 协议需要谈判节点状态,因此生产环境通常表明管理节点的数量被配置成奇数,通常为3、5或7。

      服务
      这项服务是为了支持包装组织构想,是一组相互互动的复杂包装环境的一般词汇,服务申报通常涉及一系列配置,例如集装箱的发射方式、开始的复制件数量、环境变量、储存、配置、网络等等,用户通过这些配置宣布一项服务并提供给Swarm,这是循环式的。

      全球服务和制版服务是两类服务。

      全球服务:每个业务节点都履行与Kubernetes 中的守护进程设置相似的职责。

      复制服务:根据要求的复制件数量,该服务在整个组群中运行。

      任务
      当管理节点根据服务中提及的副本数量将工作转移到节点时,任务开始在该节点启动并运行, 当异常发生时,任务失败。 调度器然后将未完成的任务重排到其他正常节点, 以便正确运行, 以保证运行中的集装箱副本数量与服务中描述的警察数量相符。 指定管理节点根据服务中提及的副本数量将工作转到节点, 任务开始于该节点启动并运行, 当异常发生时, 任务失败。 调度器然后将未完成的任务重排到其他正常节点, 以确保运行中的集装箱副本数量与服务中描述的警察数量相符。

      服务外部访问
      集装箱的IP只能进入集群内,集装箱在使用后立即销毁,集装箱的IP也可能动态变化,集群内的服务应由集群以外的用户使用,服务必须映射到主机上的固定港口。 Swarm利用输入负载平衡模式将服务暴露在主机上,每个服务都发给一个公共港口(Published Po)。

      当请求到达组群中的节点时,如果节点没有所需的服务,则请求是针对服务真正运行所在的节点,因此响应了使用者的请求。

      创建 Swarm 群集


      以下是使用Swarm群集的一些先决条件:

      如果您的 docker 版本超过 1. 12, 我们建议使用最新的 Docker 稳定版本 。

      主机必须打开许多港口(TCP:2377,UDP:4789,UDP:7946)。

      我的目标是利用四台计算机和下列演示节点建立一个Swarm群集:

      在生产环境中,建议至少有三名管理人员作为管理节点。

      第一步:初始化集群

      Docker 1. Swarm 已被默认地从版本 12 纳入 Docker 中, 因此我们可以使用 Docker 命令启动 Swarm 。 以下是组初始化的命令格式 :

      复制代码
      docker swarm init --advertise-addr <YOUR-IP>
      当主机有许多网卡时,通常会使用广告添加器;如果主机只有一张网卡,这个论点可以忽略。

      通过运行以下命令启动管理节点上的集 :

      复制代码
      $ docker swarm init
      Swarm initialized: current node (1ehtnlcf3emncktgjzpoux5ga) is now a manager.

      To add a worker to this swarm, run the following command:

      docker swarm join --token SWMTKN-1-1kal5b1iozbfmnnhx3kjfd3y6yqcjjjpcftrlg69pm2g8hw5vx-8j4l0t2is9ok9jwwc3tovtxbp 192.168.31.100:2377

      To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
      在集束启动后,Swarm将通知我们,目前的节点已经是一个管理节点,并将指示我们如何在组群中增加一个主机,作为可运作的节点。

      第2步:添加操作节点

      根据组群初始化第一阶段,重复组群内的命令,然后对其余三个运行节点中的每个节点执行以下命令:

      复制代码
      $ docker swarm join --token SWMTKN-1-1kal5b1iozbfmnnhx3kjfd3y6yqcjjjpcftrlg69pm2g8hw5vx-8j4l0t2is9ok9jwwc3tovtxbp 192.168.31.100:2377
      This node joined a swarm as a worker.
      工作节点是默认添加节点, 在生产环境中, 我们可以使用 docker spin-token 管理器命令来查看如何添加管理节点 :

      复制代码
      $ docker swarm join-to ken manager
      To add a manager to this swarm, run the following command:

      docker swarm join --token SWMTKN-1-1kal5b1iozbfmnnhx3kjfd3y6yqcjjjpcftrlg69pm2g8hw5vx-8fq89jxo2axwggryvom5a337t 192.168.31.100:2377
      Swarm输出的结果可复制到管理节点,从而添加到集群中。

      应当指出,管理节点的数目必须是奇数,生产环境表明,管理Swarm群集需要3个、5个或7个管理节点。

      第三步:节点查看

      添加节点后, 我们可以使用以下命令检查当前节点的状态 :

      复制代码
      $ ]# docker node ls
      ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
      1ehtnlcf3emncktgjzpoux5ga *   swarm-manager       Ready               Active              Leader              19.03.12
      pn7gdm847sfzydqhcv3vma97y *   swarm-node1         Ready               Active                                        19.03.12
      4dtc9pw5quyjs5yf25ccgr8uh *   swarm-node2         Ready               Active                                        19.03.12
      est7ww3gngna4u7td22g9m2k5 *   swarm-node3         Ready               Active                                        19.03.12
      到目前为止,已经完成了一个拥有一个管理节点和三个工人节点的群群。

      使用 Swarm
      当集群完成后,我们可以在Swarm集群中建造服务,该集群使用两种服务部署形式。

      (1) 使用 docker 服务命令创建服务。
      docker 服务命令可用于创建此服务。 以下是创建服务的顺序 :

      复制代码
      $ docker service create --replicas 1 --name hello-world nginx
      24f9ng83m9sq4ml3e92k4g5by
      overall progress: 1 out of 1 tasks
      1/1: running   [==================================================>]
      verify: Service converged
      现在,我们开发了一种服务, 使用 docker 服务可以看到:

      复制代码
      $ docker service ls
      ID                  NAME                  MODE                REPLICAS            IMAGE               PORTS
      24f9ng83m9sq        hello-world           replicated          1/1                 nginx:latest
      当我们不再使用此服务时, 我们可以用 docker 服务 rm 命令删除它 :

      复制代码
      $ docker service rm hello-world
      hello-world
      此服务现已成功退出分组 。
      如果您想要了解更多关于 docker 服务指令的信息, 请在这里查看 。

      我们主张使用docker-complex模板文件在生产环境中部署服务,以便服务管理更容易和更容易追踪,同时可以产生和维持许多服务,更适合生产环境中更复杂的依赖关系部署模式。

      (2) 使用 docker 粘贴命令创建服务。
      19课期间, 我们生成了一个 docker 组合模板文件, 并成功使用它来构建和启动 MySQL 服务和 WordPress 。 现在, 我们将会对 19 位发言人组合模板文件做一些调整 :

      复制代码
      version: '3'

      services:
      mysql:
      image: mysql:5.7
      volumes:
      - mysql_data:/var/lib/mysql
      restart: always
      environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mywordpress
      MYSQL_USER: mywordpress
      MYSQL_PASSWORD: mywordpress

      wordpress:
      depends_on:
      - mysql
      image: wordpress:php7.4
      deploy:
      mode: replicated
      replicas: 2
      ports:
      - "8080:80"
      restart: always
      environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: mywordpress
      WORDPRESS_DB_PASSWORD: mywordpress
      WORDPRESS_DB_NAME: mywordpress
      volumes:
      mysql_data: {}

      我为服务模板文件添加了一个部署指令,并提供了两个WordPress例子,这些例子将使用复制服务推出。

      当您准备开始 WordPress 配置时, 我们将创建一个新的 docker-competect. yml 文件, 如前文所示, 然后我们以以下命令开始服务 :

      复制代码
      $ docker stack deploy -c docker-compose.yml wordpress
      Ignoring unsupported options: restart

      Creating network wordpress_default
      Creating service wordpress_mysql
      Creating service wordpress_wordpress
      执行上述命令后,我们成功部署了两个服务:

      MySQL 服务默认情况下会启动副本 。

      WordPress 服务, 以我们的 docker-complication 模板表示, 开始提供两份副本 。

      要检查当前启动服务, 请使用 docker 服务是命令 。

      复制代码
      $ docker service ls
      ID                  NAME                  MODE                REPLICAS            IMAGE               PORTS
      v8i0pzb4e3tc        wordpress_mysql       replicated          1/1                 mysql:5.7
      96m8xfyeqzr5        wordpress_wordpress   replicated          2/2                 wordpress:php7.4    *:8080->80/tcp
      如所示, Swarm 为我们成功创建了一个 MySQL 服务和两个 WordPress 示例。 WordPress 实例通过8080 号港口在主机上曝光,我们可以通过在集群中的任何节点访问 IP + 808080 个港口获取 WordPress 服务。 例如,我们可以通过访问 http://:808080 访问 成功访问 WordPress 所提供的 WordPress 服务。

      结语
      Docker Swarm是一种集群技术,用来设计复杂的应用程序,帮助我们将几个主机组成一个摇篮集群,帮助我们管理和发送复杂的集装箱服务。 Since Swarm已并入Docker, Swarm的安装和使用已变得非常直接,只要Docker有使用经验,你的应用程序就可以很容易地转移到摇篮集群。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/12740.html

          热门文章

          文章分类