Hashicopy之nomad应用编排方案06(配置task)

举报
kaliarch 发表于 2022/06/11 12:33:25 2022/06/11
【摘要】 一 背景大多数应用程序需要某种本地配置。虽然命令行参数是最简单的方法,但许多应用程序需要通过环境变量或配置文件提供更复杂的配置。本节探讨如何配置Nomad作业以支持许多常见的配置用例。 二 定义应用参数许多任务通过命令行参数接受配置。例如,考虑http-echo服务器,它是一个小型go二进制文件,将提供的文本呈现为网页。二进制文件接受两个参数:listen标志包含要侦听的地址:端口-tex...

一 背景

大多数应用程序需要某种本地配置。虽然命令行参数是最简单的方法,但许多应用程序需要通过环境变量或配置文件提供更复杂的配置。本节探讨如何配置Nomad作业以支持许多常见的配置用例。

二 定义应用参数

许多任务通过命令行参数接受配置。例如,考虑http-echo服务器,它是一个小型go二进制文件,将提供的文本呈现为网页。二进制文件接受两个参数:

  • listen标志包含要侦听的地址:端口
  • -text-呈现为HTML页面的文本

在Nomad之外,服务器是这样启动的:

http-echo -listen=":5678" -text="hello world"

Nomad等效的作业文件可能如下所示:

job "docs" {
  datacenters = ["dc1"]


  group "example" {
    network {
      port "http" {
        static = "5678"
      }
    }

    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":5678",
          "-text",
          "hello world",
        ]
      }
    }
  }
}

注意:对于此作业规范,您必须在每个客户端的/bin文件夹中安装http-echo。Nomad还可以选择使用工件资源获取二进制文件。

Nomad有许多驱动程序,大多数都支持通过args参数将参数传递给它们的任务。此参数还支持Nomad变量插值。例如,如果您希望Nomad动态地分配一个高端口来绑定服务,而不是依赖一个静态端口来执行前面的作业:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    network {
      port "http" {
        static = "5678"
      }
    }

    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":${NOMAD_PORT_http}",
          "-text",
          "hello world",
        ]
      }
    }
  }
}

三 设置环境变量

某些应用程序可以通过环境变量进行配置。十二要素应用程序文档建议通过环境变量配置应用程序。Nomad通过两种方式支持自定义环境变量:

  • 环境节中的插值
  • 在模板节中模板化

3.1 env stanza

每个任务可能有一个指定环境变量的env节:

task "server" {
  env {
    my_key = "my-value"
  }
}

env节还支持插值:

task "server" {
  env {
    LISTEN_PORT = "${NOMAD_PORT_http}"
  }
}

有关详细信息,请参阅env节文档。

四 加载外部配置文件

许多应用程序使用文件进行配置。Nomad支持使用工件节下载文件,并在启动任务之前对它们进行模板化。这允许传送任务正常运行所需的配置文件和其他资产。
下面是一个示例作业,它将配置文件作为工件下拉并对其进行模板:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    task "server" {
      driver = "exec"

      artifact {
        source      = "http://example.com/config.hcl.tmpl"
        destination = "local/config.hcl.tmpl"
      }

      template {
        source      = "local/config.hcl.tmpl"
        destination = "local/config.hcl"
      }

      config {
        command = "my-app"
        args = [
          "-config", "local/config.hcl",
        ]
      }
    }
  }
}

有关工件资源的更多信息,请参阅工件节文档。

参考链接

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。