Consul в настоящее время не публикуется в формате менеджера пакетов. Каков хороший способ распределить его по многим системам и обеспечить его последовательную установку?
Как я могу распространять консул инструмента обнаружения служб на хосты Linux?
Ответы (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 соответственно).
Доставьте его в виде контейнера 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.
Предварительное условие: установите 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
Существует модуль 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/
Другой вариант — повторно использовать один из существующих образов Docker.
например progrium/consul — отличный контейнер, предназначенный для работы в экосистеме Docker.
Если вас интересуют пакеты 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.
Другая альтернатива, которая предполагает только, что на целевых машинах 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 это называется inventory
— http://docs.ansible.com/ansible/latest/intro_inventory.html
затем ansible my_linux_machines -m copy -a "src=consul dest=/usr/bin/consul"
вы также можете загрузить zip-архив, разархивировать его и затем скопировать. поиск "ансибл унтар"
Существует мультиплатформенная роль Ansible, которая помогает создать кластер Consul с клиентами:
https://github.com/brianshumate/ansible-consul
Еще одна его роль может добавить Убежище поверх Консула.