Docker 1.9 + Weave 1.2.1 bridge mode

от автора

Сегодня, после обновления на Docker 1.9 у меня вполне ожидаемо сломался ранее прекрасной работающий Weave
Описание возникших проблем и их решение под катом

Проблема №1.

Проявляется в Ubuntu 14.04.

При попытке выполнить weave launch происходит следующее:

root@sahara:~/weave# /usr/local/bin/weave launch --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70 Error deleting container: Error response from daemon: Unable to remove filesystem for 4f15a00bcf3b7d6df83ed8467cad98177df331d2deed580c4547effc2db13a02: remove /var/lib/docker/containers/4f15a00bcf3b7d6df83ed8467cad98177df331d2deed580c4547effc2db13a02/shm: device or resource busy 

Как выяснилось, это уже известная проблема:
github.com/weaveworks/weave/issues/1647
github.com/weaveworks/weave/issues/1652

Там пишут, что, возможно, поможет переход на использование overlayfs вместо aufs, но мне помогла установка ядра 3.19 (пакет linux-image-extra-virtual-lts-vivid)

Спасибо за помощь ребятам из Weave, сидящим на канале #weavenetwork в IRC

Проблема №2

Вторая проблема связана с тем, что я использую Weave для связи контейнеров в кластере Mesos + Kubernetes, и мне совсем не нужны болтающиеся неиспользуемые eth0 в контейнерах. Тем более, что я это настраивал еще во время Weave 1.0, когда еще не были придуманы методы адекватной связки Mesos и Weave.

Поэтому я использовал не рекомендуемый официально метод привязки weave к контейнерам заменой моста docker0 на weave.
Это работало вплоть до Docker 1.8 + Weave 1.1.1
Сегодня же все сломалось:

root@sahara:~/weave# /usr/local/bin/weave launch-router --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70 Error response from daemon: Cannot start container b5c0d3e7b69a0101586d1ffe79862f292ed72b72d3f6bf5e21debf086b81db67: [8] System error: failed to set gateway while updating gateway: network is unreachable root@sahara:~/weave#  

Тут уже помощь клуба из IRC не помогла, пришлось выплывать самому.
Путем долгих проб и ошибок выяснилось, что корень зла крылся в присвоении статического IP адресв мосту weave при начальной конфигурации.
А именно. Ранее я поднимал мост такой записью в /etc/network/interfaces.d/weave:

auto weave iface weave inet manual         pre-up /usr/local/bin/weave --local create-bridge         post-up ip addr add dev weave 10.4.7.1/16         pre-down ifconfig weave down         post-down brctl delbr weave 

Как выяснилось, если убрать ip add..., то docker —bridge weave запускается и нормально работает.
Так же, для запуска weave в таком режиме требуется выключать FASTDP:
export WEAVE_NO_FASTDP=1
В итоге, релевантные части фалов настройки:
/etc/network/interfaces.d/weave:

auto weave iface weave inet manual         pre-up WEAVE_NO_FASTDP=1 /usr/local/bin/weave --local create-bridge         pre-down ifconfig weave down         post-down brctl delbr weave 

/etc/init/weave.conf:

start on filesystem and started docker respawn script     export DOCKER_BRIDGE=weave     export WEAVE_NO_FASTDP=1     /usr/local/bin/weave launch-router --no-dns --init-peer-count 8  --ipalloc-range 10.128.0.0/10 10.43.68.61 10.43.68.62 10.43.68.63 10.43.68.64 10.43.68.65 10.43.68.69 10.43.68.70     /usr/local/bin/weave expose 10.4.7.1/16     /usr/bin/docker attach weave end script 

/etc/default/docker:

DOCKER_NETWORK_OPTS="--bridge weave --fixed-cidr=10.4.7.0/24" 

Теперь все работает как и раньше.

Возможно, этот опыт сэкономит кому-нибудь время и нервы.

ссылка на оригинал статьи http://habrahabr.ru/post/270521/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *