Consul目前没有以包管理器格式发布。有什么好方法可以将它分布到多个系统并确保以一致的方式安装它?
8 回答
我发现您可以使用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,你可以用 rubygems 安装它:
gem install fpm
FPM 需要创建您选择的包类型所需的工具,因此最好将其安装在类似的系统上(分别用于 RPM 和 DEB 的 Red Hat 或 Debain 变体)
将其作为docker容器交付。
Dockerfile将:
- wget zip文件,解压
- 为数据和配置创建目录
- 添加 consul.json 配置文件
- 为配置和数据创建卷
- 暴露领事端口
- 定义入口点
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"]
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
有一个木偶模块(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/
另一种选择是重用一个现有的 docker 图像。
例如progrium/consul是一个伟大的容器,旨在在 Docker 生态系统中工作
如果您对 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 。
另一种替代方案仅假设 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”
有一个多平台 Ansible 角色可以帮助创建带有客户端的 Consul 集群:
https://github.com/brianshumate/ansible-consul
他的另一个角色可以在 Consul 之上添加 Vault。