云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_tk域名注册地址_测评

小七 141 0

HashiCorp Nomad和遗留应用程序

好像到处都是集装箱。他们应该是。它们使得将应用程序部署到开发、测试和生产环境中变得更加容易。然而,当容器不工作时呢?为了充分利用当前可用的容器编排平台,必须对应用程序和部署过程进行大量更改。对于绿地应用来说,这不是一个问题,因为它们通常是在考虑容器的情况下构建的。如果您想利用容器式调度器的优点,但对于遗留应用程序,您会怎么做?输入HashiCorp Nomad。Nomad是一个集群调度引擎,它具有多种驱动程序类型,允许您跨工作负载节点的分布式网络调度应用程序工作负载。这些驱动程序允许调度容器、虚拟机或运行工作负载的任何其他可执行文件。一个工作负载可以由单个应用程序进程或一组我们希望在Nomad节点上运行的进程组成。Nomad在运行时处理动态配置注入,以设置不同的服务依赖关系,如数据库连接、http端口、服务凭证以及使用HashiCorp consuv等服务发现工具进行注册。所有这些工作负载配置元素都可以由单个Nomad作业文件定义。Nomad作业文件是Nomad集群用来调度、配置和执行Nomad集群中所需作业的文件。使用此作业文件,您可以根据以下几个因素定义如何在集群中安排工作负载:操作系统和版本硬件配置标签定义数据中心位置资源消耗因素然后Nomad会找出将工作负载放在何处以及如何配置它来运行。»用于运行遗留应用程序的Nomad对于一些遗留应用程序,运行它们的唯一方法是使用二进制文件或一组二进制文件来执行工作负载。对于这些类型的应用程序,您可以使用Nomad的exec驱动程序。Nomad exec驱动程序允许调度作业并将其链接到计算机上已经存在或在运行时动态安装的可执行文件。让我们看一个例子。»旧版Tomcat应用程序在这个例子中,我们将看一个Tomcat应用程序。虽然这是一个可以被容器化的简单示例,但本文中介绍的概念可以很容易地应用于其他可执行类型。»先决条件要使这个示例正常工作,首先需要一个正在运行的Nomad集群。在本例中,我有一个由三个Nomad服务器节点和六个Nomad客户机节点组成的集群。在每个客户机节点上,我都在/opt/Tomcat目录中安装了apachetomcat。最佳实践是不使用包管理器在Nomad集群中安装依赖项,而是使用本地安装脚本或配置工具(如Chef或木偶。那里这是一个很好的理由。第一次安装因发行版和版本而异,您希望在Nomad集群中保持互操作性。第二,相当多的安装将二进制文件注册为已经在运行的服务。Nomad希望在作业和本地安装的服务之间保持一定程度的隔离,通常每台机器有一个配置。这使得使用同一服务运行不同的作业配置变得困难。一旦您启动并运行了集群并配置了Tomcat,我们可以使用LegacyApp.nomad作业文件。»作曲LegacyApp.nomad作业文件让我们单步执行Nomad作业文件,以便您可以了解它的格式和工作方式。Nomad和所有HashiCorp工具一样,遵循HCL格式。这允许声明格式具有插值功能,就像HashiCorp Terraform一样。每个Nomad文件首先需要的是一个作业名。对于这个工作,我们称之为"LegacyWebApp":工作"LegacyWebApp"{在作业下,可以定义有关作业运行位置的某些属性。对于我们的应用程序示例,我们希望它在我们的所有节点上运行,但是您可以使用它来确保诸如局部性、反亲和性、蓝色/绿色或其他一系列内容。region="全球"数据中心=["dc1"]我们需要的下一个定义是将要运行的应用程序的类型。您可以为Nomad定义三种类型的工作负载:批处理、系统和服务。批处理流程就是在给定的时间间隔内排队运行的工作负载。然后可以将Nomad用作分布式批处理程序。系统作业告诉Nomad您定义的任何作业都希望它在集群中的每个节点上运行。我们将使用的是服务。这是针对长时间运行的流程,该流程应始终基于以下章节中概述的作业规范运行。type="服务"接下来我们要定义的是一个组。Nomad中的组是所有需要一起运行以使工作负载正常工作的任务的集合。您可以在一个组中有一个任务,也可以在一个组中有多个任务。位于group节中的任何任务都将在同一Nomad节点上一起启动。组"tomcat"{在group节下,您将定义工作负载的所有属性。我们要确定的第一件事是要运行多少相同的工作负载。这是由count属性定义的。计数=3要定义的第二件事是如何更新工作负载任务。这是通过更新节完成的。在本节中,您可以精确地定义您希望如何进行升级。对于本例,我们希望模拟蓝色/绿色部署,这样在开始终止旧版本之前,我们将拥有与当前计数相同的canary部署数量,并且最低正常状态为30秒。健康的截止日期声明,如果所有的canary部署没有在10分钟内启动,那么销毁canary部署并保持稳定版本。更新{金丝雀=3min_healthy_time="30秒"health_deadline="10米"自动恢复=真max_parallel="1"}»任务节运行遗留二进制文件的真正诀窍在于任务节。第一部分是使用神器节。此声明允许您指定要将哪些组件下载到节点提供的临时存储中,以及将它们放在何处。您可以从HTTP端点或VCS系统(如GitHub或GitLab)中提取文件。您甚至可以下载压缩文件并将其解压缩到磁盘上。如果您需要下载一个全部由包装器脚本启动的二进制文件包,那么这很方便。您还可以下载不同的配置文件,并通过环境变量或使用模板通过Nomad的原生插值填充它们。对于Tomcat示例,我们需要下载两个文件。第一个是我们要在上面部署的war文件。二是风俗习惯服务器.xml我们将填充Nomad节点本身提供的环境变量。在artifact节中,必须有一个源位置。目标是可选的,如果未声明,则默认为节点上的本地/目录。任务"WebApp"{人工制品{源="http://location.of.my.file/myfile.war"destination="/local/webapps"}人工制品{源="http://location.of.my.file/server.xml"destination="/local/tomcat/conf"}»环境节我们要使用的下一节是env调用。这允许您设置将在运行时填充的环境变量。对于我们的应用程序示例,我们将填充从命令运行Tomcat所需的内容,如JAVA_HOME、CATALINA_HOME以及特定于我们的应用程序的内容,如数据库凭据,以及映射到Tomcat进程的http端口。允许您在同一主机上运行多个Tomcat实例。您将与resources节结合使用,其中http端口将由节点动态分配。环境{数据库主机="你的.db主机"DBUSER="数据库用户"DBPASS="密码"数据库="解调器"卡塔琳娜选择=-Dport.http=$NOMAD_端口_http-Ddefault.context=$NOMAD_TASK_DIR"NOMAD_TASK_DIR"JAVA_HOME="/location/to/JAVA"CATALINA_HOME="/opt/tomcat"}请注意,我使用填充的Nomad环境变量作为http端口和Nomad任务目录的位置来填充要注入Tomcat服务启动的java命令行参数。CATALINA_OPTS环境变量中的这两个参数传递给服务器.xml建立要监听的http端口以及war文件所在的根目录。»执行驱动程序驱动程序声明针对用于运行此工作负载的驱动程序类型。对于这个工作负载,我们使用exec驱动程序。这允许以运行nomad进程的用户身份执行任意命令。我们再次注入一个环境变量,告诉tomcat服务器.xml已找到配置文件,以便在启动时使用。这个卡塔琳娜.sh是一个包装器脚本,用于构建和运行java命令以启动tomcat。您可以使用java驱动程序来实现这一点,但是构建所有选项可能会很棘手,而且tomcat已经有了运行tomcat的好方法。大多数命令都有传递运行时参数的方法。配置文件