3

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

4

8 回答 8

4

我发现您可以使用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 变体)

于 2014-07-29T06:14:40.030 回答
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"]
于 2014-08-28T17:29:55.790 回答
3

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

先决条件:安装 fpmgem install fpm

领事 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
于 2015-12-29T10:03:08.517 回答
2

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

安装服务器,加入 172.20.20.10。我们“期待”一个 3 节点集群,所以这个片段将适用于所有三个服务器节点(即使是第一个,只要它是“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,
    }
}

该片段也适用于客户端代理(只需将“服务器”位翻转为 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/

于 2014-10-23T17:51:34.137 回答
2

另一种选择是重用一个现有的 docker 图像

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

于 2015-01-27T10:23:55.963 回答
1

如果您对 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 。

于 2014-08-26T09:13:56.830 回答
0

另一种替代方案仅假设 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,请准备一个包含目标机器列表的文件。这inventory在 ansible 行话中被称为 - http://docs.ansible.com/ansible/latest/intro_inventory.html

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

你也可以有ansible下载zip,解压然后复制。搜索“ansible untar”

于 2017-11-24T05:57:50.430 回答
0

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

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

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

于 2019-09-18T18:56:11.730 回答