Как я могу распространять консул инструмента обнаружения служб на хосты Linux?

Consul в настоящее время не публикуется в формате менеджера пакетов. Каков хороший способ распределить его по многим системам и обеспечить его последовательную установку?


person wjimenez5271    schedule 29.07.2014    source источник
comment
// , у меня такой же вопрос, но в более общем смысле, что делать с программным обеспечением, упакованным в виде двоичного файла внутри архива. Могу ли я узнать, какие исследования вы провели до этого вопроса?   -  person Nathan Basanese    schedule 13.02.2017


Ответы (8)


Я обнаружил, что вы можете легко создать пакет из бинарного файла consul, используя fpm:

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 в вашем текущем рабочем каталоге. Вы также можете использовать 'deb' с флагом -t, чтобы вместо этого создать пакет deb.

Если у вас еще не установлен fpm, вы можете установить его с помощью rubygems:

gem install fpm

Для FPM требуются инструменты, необходимые для создания выбранного вами типа пакета, поэтому лучше всего установить его в аналогичной системе (вариант Red Hat или Debain для RPM и DEB соответственно).

person wjimenez5271    schedule 29.07.2014
comment
// , Будет ли это работать для распространения в Debian, CEntOS 5 или CEntOS 6? - person Nathan Basanese; 13.02.2017
comment
FPM собирает пакеты для нескольких дистрибутивов. Подробнее см. github.com/jordansisssel/fpm. - person wjimenez5271; 14.02.2017

Доставьте его в виде контейнера 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"]
person hughdbrown    schedule 28.08.2014
comment
// , Однако это только распространяет его в/через Docker. Я считаю, что во многих системах эта часть вопроса @wjimenez5271 обходит стороной, не так ли? - person Nathan Basanese; 13.02.2017
comment
@NathanBasanese Я не понимаю, что ты имеешь в виду. Если обходной шаг означает, что он терпит неудачу, то нет, он будет успешным на каждой платформе, поддерживающей докер. Я думаю, это хорошо. Если вы имеете в виду, что решение должно быть написано на низкоуровневых примитивах (wget/curl, unzip), доступных на всех платформах, то почему? Если вы имеете в виду, что это должно быть написано непосредственно на родной ОС - почему? Это распространяет его только в / через Docker - почему это дисквалифицирует этот ответ? - person hughdbrown; 14.02.2017
comment
// , Docker является платформой, и любое решение docker будет специфичным для платформы docker. Такое мышление является еще одним примером распространения стандартов. Я думаю, мы можем согласиться с тем, что Docker (только в качестве стандартной системной платформы) по крайней мере создает некоторые проблемы, которые он пытается решить, не так ли? xkcd.com/927 - person Nathan Basanese; 14.02.2017
comment
// , Это отличный инструмент для экономии ресурсов и стандартизации, где можно гарантировать, что он будет работать, без сомнения. - person Nathan Basanese; 14.02.2017

consul — это единый двоичный файл, идеально подходящий для легкого (повторного) распространения и обработки. Упаковка в виде .deb — это всего лишь три строки с fpm.

Предварительное условие: установите fpm с помощью gem install fpm

Полный рабочий пример для консула 0.6 (текущая версия на январь 2016):

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
person geekQ    schedule 29.12.2015

Существует модуль puppet (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 узлов: https://github.com/benschw/consul-cluster-puppet

... и сообщение в блоге о том, как это было построено: http://txt.fliglio.com/2014/10/consul-with-puppet/

person ben schwartz    schedule 23.10.2014
comment
// , Не работает на CEntOS 6 Puppet masters под управлением Puppet 3.6. :( github.com/solarkennedy/puppet-consul/issues/ - person Nathan Basanese; 13.02.2017

Другой вариант — повторно использовать один из существующих образов Docker.

например progrium/consul — отличный контейнер, предназначенный для работы в экосистеме Docker.

person lifus    schedule 27.01.2015

Если вас интересуют пакеты Ubuntu, я начал поддерживать PPA-репозиторий Launchpad по адресу https://launchpad.net/~bcandrea/+archive/ubuntu/consul. В настоящее время он нацелен на выпуски 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.

person bcandrea    schedule 26.08.2014
comment
минус один: я начал поддерживать, но они не поддерживаются. - person Henrik; 05.03.2015
comment
Извините за беспокойство. У меня были трудности с воспроизведением сборок пакетов, затем (после, по общему признанию, очень долгой паузы) я недавно переключился на использование Docker и git-buildpackage и загрузил последнюю версию v0.6.4. Я думаю, что принятое решение по-прежнему является самым быстрым способом добраться до двоичного пакета. - person bcandrea; 18.05.2016

Другая альтернатива, которая предполагает только, что на целевых машинах Linux запущен демон ssh и что с исходной машины вы можете использовать ssh с помощью ключей:

Ansible можно установить на исходный компьютер, а затем использовать простую командную строку, как описано в http://docs.ansible.com/ansible/latest/intro_adhoc.html#file-transfer

Передача файлов Вот еще один вариант использования командной строки /usr/bin/ansible. Ansible может передавать большое количество файлов параллельно на несколько машин.

Чтобы передать файл напрямую на несколько серверов:

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

Поэтому, если у вас уже есть необходимый файл consul, подготовьте файл, содержащий список целевых машин. На жаргоне ansible это называется inventoryhttp://docs.ansible.com/ansible/latest/intro_inventory.html

затем ansible my_linux_machines -m copy -a "src=consul dest=/usr/bin/consul"

вы также можете загрузить zip-архив, разархивировать его и затем скопировать. поиск "ансибл унтар"

person noam cohen    schedule 24.11.2017

Существует мультиплатформенная роль Ansible, которая помогает создать кластер Consul с клиентами:

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

Еще одна его роль может добавить Убежище поверх Консула.

person bbaassssiiee    schedule 18.09.2019