【问题标题】:How can I distribute the service discovery tool consul to linux hosts?如何将服务发现工具 consul 分发到 linux 主机?
【发布时间】:2014-09-20 11:09:13
【问题描述】:

Consul 当前未以包管理器格式发布。有什么好的方法可以将它分布到多个系统并确保以一致的方式安装它?

【问题讨论】:

  • // ,我也有同样的问题,但从更一般的意义上说,如何将软件“打包”为存档中的二进制文件。我可以知道你在这个问题之前做了什么研究吗?

标签: service-discovery consul


【解决方案1】:

我发现您可以使用 fpm 从 consul 二进制文件轻松创建一个包:

fpm --verbose -s dir -t rpm -n consul -v 0.4 --url=http://consul.io --vendor=HashiCorp  --description "A distributed service discovery tool" ./consul_/consul=/usr/local/bin/consul

该命令将在您当前的工作目录中创建一个 rpm 文件。您也可以使用带有 -t 标志的 'deb' 来创建 deb 包。

如果你还没有安装 fpm,你可以用 ruby​​gems 安装它:

gem install fpm

FPM 需要创建您选择的包类型所需的工具,因此最好将其安装在类似的系统上(分别用于 RPM 和 DEB 的 Red Hat 或 Debain 变体)

【讨论】:

  • // , 这适用于分发到 Debian、CEntOS 5 或 CEntOS 6 吗?
  • FPM 为多个发行版构建软件包,请参阅github.com/jordansissel/fpm 了解更多详情
【解决方案2】:

如果您对 Ubuntu 软件包感兴趣,我开始在 https://launchpad.net/~bcandrea/+archive/ubuntu/consul 维护 Launchpad PPA。它目前针对的是我需要的 LTS 版本 (12.04/14.04),但我也可能会考虑添加中间版本。

您可以按照通常的步骤安装它:

$ sudo apt-add-repository ppa:bcandrea/consul
$ sudo apt-get update
$ sudo apt-get install consul consul-web-ui

如果你想为它制作一个 Debian/Ubuntu 包并自己分发,你可能想看看我的 Makefile 来创建包:https://github.com/bcandrea/consul-deb

【讨论】:

  • 减一:“我开始维护”,除非他们没有维护。
  • 抱歉给您添麻烦了。我在复制包构建时遇到了困难,然后(在经过很长时间的停顿之后)我最近切换到使用 Docker 和 git-buildpackage 并上传了最新版本 v0.6.4。不过,我想公认的解决方案仍然是获取二进制包的最快方法。
【解决方案3】:

将其作为docker 容器交付。

Dockerfile 会:

  1. wget zip 文件,解压
  2. 为数据和配置创建目录
  3. 添加 consul.json 配置文件
  4. 为配置和数据创建卷
  5. 暴露领事端口
  6. 定义入口点

Dockerfile 大概如下所示:

RUN wget 'https://dl.bintray.com/mitchellh/consul/0.3.1_linux_amd64.zip' -O consul.zip && unzip -d /usr/bin consul.zip 
RUN mkdir -p /opt/consul/data /opt/consul/config
ADD consul.json /opt/consul/config/
VOLUME ["/opt/consul/data","/opt/consul/config"]
EXPOSE 8500
ENTRYPOINT ["/usr/bin/consul", "agent", "-config-dir=/opt/consul/config"]
CMD ["-server", "-bootstrap"]

【讨论】:

  • // ,不过,这仅将其分发到/通过 Docker。我相信这种回避了@wjimenez5271 问题的“跨多个系统”部分,不是吗?
  • @NathanBasanese 我不明白你的意思。如果 sidestep 意味着它失败了,那么不,它会在每个支持 docker 的平台上成功。我认为这很好。如果您的意思是解决方案应该用所有平台上可用的低级原语(wget/curl、unzip)编写,那为什么呢?如果您的意思是它必须直接在本机操作系统上编写——为什么? “这只将它分发给/通过 Docker”——为什么这会取消这个答案的资格?
  • // ,Docker 一个平台,任何 docker 解决方案都将特定于 docker 平台。这种想法是标准扩散的又一个例子。我认为我们可以同意 Docker(仅作为标准系统平台的能力)至少创造了它试图解决的一些问题,不是吗? xkcd.com/927
  • // ,它是一个很好的资源节约和标准化工具,毫无疑问,它可以保证它会运行。
【解决方案4】:

有一个 puppet 模块 (https://github.com/solarkennedy/puppet-consul) 可以帮助解决这个问题。它从dl.bintray.com 中提取二进制文件并帮助配置系统。

安装服务器,加入 172.20.20.10。我们“期待”一个 3 节点集群,所以这个 sn-p 将适用于所有三个服务器节点(即使是第一个,只要它是“172.20.20.10”副本)

class { 'consul': 
    join_cluster => '172.20.20.10',
    config_hash => {
        'datacenter' => 'dc1',
        'data_dir'   => '/opt/consul',
        'log_level'  => 'INFO',
        'node_name'  => $::hostname,
        'bind_addr'  => $::ipaddress_eth1,
        'bootstrap_expect' => 3,
        'server'     => true,
    }
}

sn-p 也适用于客户端代理(只需将“服务器”位翻转为 false。)最后一步是创建服务定义并将其注册到本地领事客户端代理:

consul::service { "foo",
    tags           => ['service'],
    port           => 8080,
    check_script   => '/opt/foo-health-checker.sh',
    check_interval => '5s',
}

这是一个构建演示堆栈的示例 Vagrantfile,包含一个 3 节点 consul 集群:https://github.com/benschw/consul-cluster-puppet

...还有一篇介绍它是如何构建的博客文章:http://txt.fliglio.com/2014/10/consul-with-puppet/

【讨论】:

【解决方案5】:

另一种选择是重用the existing docker images 之一。

例如progrium/consul 是一个伟大的容器,旨在在 Docker 生态系统中工作

【讨论】:

    【解决方案6】:

    consul 是一个单一的二进制文件,非常适合轻松(重新)分发和处理。 打包为 .deb 只是一个带 fpm 的三行代码。

    先决条件:用gem install fpm安装fpm

    consul 0.6 的完整工作示例(截至 2016 年 1 月的当前版本):

    wget -N https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip
    unzip -o consul_0.6.0_linux_amd64.zip
    fpm --force --verbose -s dir -t deb -n consul -v 0.6 \
      --url=http://consul.io --vendor=HashiCorp  \
      --description "A distributed service discovery tool" ./consul=/usr/local/bin/consul
    

    【讨论】:

      【解决方案7】:

      另一种选择,它只假设 linux 目标机器运行 ssh 守护进程,并且您可以从源机器使用密钥进行 ssh:

      可以在源机器上安装Ansible,然后使用http://docs.ansible.com/ansible/latest/intro_adhoc.html#file-transfer中描述的简单命令行

      文件传输 这是 /usr/bin/ansible 的另一个用例 命令行。 Ansible 可以将大量文件 SCP 到多台机器 并行。

      将文件直接传输到多个服务器:

      $ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"
      

      假设您已经拥有所需的文件consul,请准备一个包含目标计算机列表的文件。这在 ansible 行话中称为 inventory - http://docs.ansible.com/ansible/latest/intro_inventory.html

      然后ansible my_linux_machines -m copy -a "src=consul dest=/usr/bin/consul"

      你也可以用ansible下载压缩包,解压然后复制。搜索“可解压”

      【讨论】:

        【解决方案8】:

        有一个多平台的 Ansible 角色可以帮助创建带有客户端的 Consul 集群:

        https://github.com/brianshumate/ansible-consul

        他的另一个角色可以在 Consul 之上添加 Vault。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-07
          • 2011-03-01
          • 2017-08-16
          • 2017-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多