Облака своими руками

Всякий облачный, кластерный и контейнерный софт для локалхоста
 
+
-
edit
 

Balancer

администратор
★★★★★
coreos docker
А есть в природе какие-нибудь толковые style-guide под Docker? Как лучше оформлять запуск контейнеров, как лучше организовывать/подключать персистентные данные (файлы, базы данных, логи) и т.п.? Или каждый лепит как попало в силу своей приверженности хаосу?

...

Надумал тут пощупать CoreOS.

...

Блин, только сейчас, пока писал пост, внезапно понял, почему назвали Docker :)

// Транслировано с juick.com
 
+
-
edit
 

Balancer

администратор
★★★★★
coreos docker Linux Project Atomic
Небольшое сравнение CoreOS и Project Atomic:
major.io





// Транслировано с juick.com
 

+
-
edit
 

Balancer

администратор
★★★★★
docker контейнеры сети
Отличный инструмент для связывания контейнеров Docker в разных сетях.
github.com
Качаем небольшой скрипт и запускаем контейнеры через него, указывая требуемый IP контейнера. Качаем скрипт и запускаем через него контейнеры на второй машине, указав хост первой. Всё, наши контейнеры видя друг друга по сети, даже находясь в разных сетях, даже если вторая машина за NAT. Очень просто и удобно!




// Транслировано с juick.com
 

+
-
edit
 

Balancer

администратор
★★★★★
docker mariadb Ubuntu компьютеры облака
И хотя я планирую активно перелезать в облака с контейнерами, на новый домашний сервер поставить не CoreOS, как планировал а Ubuntu Cloud Server. Те же уши, но решение проверенное уже многими и за долгий срок. Кстати, первая моя установка Ubuntu на свою серверную железку :D До этого на своих была всегда Gentoo, а Ubuntu была на чужих (Hetzner и DigitalOcean).

Ubuntu Server взывала странные чувства. Репозитории сетевые не подключила, только CD-ROM. После перезапуска даже nano не было установлено. Хотя полтора гига сожрало. Доустановил nano с диска (т.е. с USB-флешки), прописал репы, обновился, поставил mc — жить можно, дальше всё как привычно :D

Хотел было MariaDB воткнуть в Docker и организовать персистентное хранилище, а потом подумал — а нафига? Всё равно ресурсов будет жрать столько, что больше одного инстанса ставить смысла мало, проще на хосте и поставить (привет CoreOS, там так не сделать) и уже оттуда пользоваться всем, кому нужно. Тем более, что, как я понял, в MariaDB сделали возможность репликации разных баз на разные сервера (единственная для меня причина по которой тяжёлый MySQL имело смысл ставить в нескольких инстансах в контейнерах).

Да и обновляться так будет проще.

Вообще, вопрос обновления — самый больной для Docker. Не рассчитан он на обновления :-/ Каждый раз придётся взвешивать тщательно, что приоритетнее, лёгкое разворачивание и автономность или поддержка/обновления.

// Транслировано с juick.com
 

+
-
edit
 

Balancer

администратор
★★★★★
docker nginx PHP концепции облака
Продолжаю постигать дзен Docker'а. Поток мыслей по теме :)

Вот nginx. Отлично контейнеризуется. Делаем минимальный образ и запускаем только его. Официальный nginx весит 100Мб... Многовато, но если хотя бы на десяток контейнеров поделить — копейки. А вот автоматически dockerfile/nginx весит уже аж 500Мб. Посмотрел — они аж из целой Ubuntu его собирают! Вот нафига попу гармонь? Это ж снова попытка сделать из Docker оригинальную LXC! А нужно-то только один голый nginx иметь. При запуске контейнера указать персистентные конфиг и docroot. И всё, больше ничего не нужно. Даже 100Мб — это дофига.

Дальше — больше. nginx'у нужен php-fpm. Прекрасно, он пашет по сетевому интерфейсу, отлично конфигурится в той же Ubuntu (хоть индивидуально модули задавай). То есть, логика простая — запускаем контейнер с nginx, запускаем контейнер с php-fpm, каждый сам по себе, всем хорошо. С обновлениями просто, каждый обновляется отдельно (если я правильно понял, достаточно периодически docker pull делать — и всё). Фигушки. Нет вообще в docker hub'е голого php-fpm! Только в паре с nginx (в лучшем случае, а то целые комбайны). Такое впечатление, что народ сути Docker не только вообще не понимает, но и подумать на этот счёт не хочет :)

Судя по всему, придётся заводить самому в хабе минимальный образ с php-fpm, да ещё писать для народа идеологический how-to :)




// Транслировано с juick.com
 

  • Balancer [26.09.2014 18:39]: Перенос сообщений из Nginx
RU Balancer #26.09.2014 18:47  @Balancer#26.09.2014 17:55
+
-
edit
 

Balancer

администратор
★★★★★
Хотя нет, вру. Среди самопальных и не очень популярных образов есть чистые php-fpm на Ubuntu/CentOS/Debian/Arch. Надо будет сравнить, изучить. Какие организованы лучше и обновляются регулярно.

Кстати, php из своего контейнера может соединяться с nginx не только по сети, но и через сокет. Сокет тоже можно мапить на хост.

...

Вот, запустил nginx в контейнере как полагается. Не трогая контейнер, задав внешние конфиг и корень. Правда, выдаёт всего ~6000 rps на статике. С другой стороны, это без тюнинга (только число воркеров прописал по числу ядер), на мобильном Атлоне и через локальную сеть... Проверил с локальной машины — только медленнее стало :) Ага. Проверил с локальной машины с хоста — отдаётся только 6300 rps. Так что не такой и большой оверхед выходит.

...

Остановил docker как сервис, запустил снова — запущенный nginx в контейнере живёт. Т.е. docker следить за восстановлением контейнеров. Это хорошо :)
 3737
+
-
edit
 

Balancer

администратор
★★★★★
docker weave контейнеры сети
Нашёл отличный рецепт, как присоединить weave к уже запущенному LXC-контейнеру: github.com
weave-lxc attach 10.0.1.234/8 container-name
и готово, контейнер включён в weave-сеть. То, чего мне так не хватало для начала практического использования weave. Docker — это прекрасно, но основная нагрузка всё равно пока на LXC. А теперь их можно объединить.

Одна беда, почему-то weave вообще не работает на двух основных серверах (Ubuntu 12.04 LTS и Gentoo). Хотя на одном из них точно работала раньше... В настройках роутинга, вроде, всё нормально. Не понимаю...

Напомню, что weave — это такая фигня, что легко ставится и позволяет просто, удобно и автоматизированно соединить в одну сквозную виртуальную сеть Docker-контейнеры в разных физических подсетях. В т.ч. связь идёт между закрытыми за NAT машинами при наличии общего открытого прокси — github.com






// Транслировано с juick.com
 

yacc

старожил
★★☆
Что-то я не понял - а какие облака тебе интересны?
 

Balancer

администратор
★★★★★
yacc> Что-то я не понял - а какие облака тебе интересны?

Распределённые децентрализованные :)
 33.033.0

yacc

старожил
★★☆
Balancer> Распределённые децентрализованные :)
Нее - какой вид сервиса?
А то вот я по работе как бы облаками пользуюсь, но выглядит это как выделенная виртуальная машина :)
 38.0.2125.11138.0.2125.111

Balancer

администратор
★★★★★
yacc> Нее - какой вид сервиса?

Облако в современном понимании — это не один сервис. Это распределённая внешняя обработка/хранение информации.

yacc> А то вот я по работе как бы облаками пользуюсь, но выглядит это как выделенная виртуальная машина :)

Это частный случай (если речь о резервированной реплицированной машине, а не просто об удалённом компе — тогда в современном понимании это не облако).
 33.033.0

yacc

старожил
★★☆
Balancer> Облако в современном понимании — это не один сервис. Это распределённая внешняя обработка/хранение информации.
Это ты как-то совсем обобщенно :)

Balancer> Это частный случай (если речь о резервированной реплицированной машине, а не просто об удалённом компе — тогда в современном понимании это не облако).
Разумеется с резервированием. Да, частный случай AWS. Тебя такое интересует? Или другие виды сервисов с резервированием?
 38.0.2125.11138.0.2125.111

Balancer

администратор
★★★★★
yacc> Это ты как-то совсем обобщенно :)

Ну так и термин широкий же.

yacc> Или другие виды сервисов с резервированием?

Резервирование бывает разных видов. Например, через кластеризацию или балансировку. Или обычный бэкап — резервирование не обязательно должно быть с нулевым временем восстановления и без потерь.
 38.0.2125.11138.0.2125.111

yacc

старожил
★★☆
Balancer> Резервирование бывает разных видов.
Разумеется. Но FailOver - это как правило бесперебойное. Переодический бэкап - это можно и в коллокейшене сделать.
 38.0.2125.11138.0.2125.111
+
-
edit
 

Balancer

администратор
★★★★★
docker lxc контейнеры
Эти контейнеры меня доведут :D Поднял в контейнере MariaDB, настроил репликацию с удалённого сервера, дня три она крутилась, а сегодня сервер с контейнером перезагрузил. Лезу в MySQL — нет ответа. Хм. Начинаю ковыряться в Docker образах. В docker ps пусто. В docker ps -a вижу два container_id с образом mariadb. Запускаю один — фигушки. Другой — стартует. Потом становится понятно, что первый стартовал просто как mysql-клиент ко второму. Ладно, лезу в контейнер — репликации нет, головной сервер не настроен o_O. Лезу в /var/lib/mysql — там файлы от 01 декабря O_o. Потом смотрю, ещё и объём базы вместо 15Гб что-то около 300Мб...

В общем, ковырялся минут 40 в общей сложности, даже find'ом искал по всему диску БД по имени... Пока не догадался в lxc-ls глянуть и увидеть, что я базу-то в LXC-контейнере поднимал :D Как раз, специально, ибо сложная MySQL-конфигурация тянет не на приложение, а комплекс приложений. Придётся, походу, всё строго документировать, а то запутаться в десятках разнотипных контейнеров на полудюжине серверов как делать нефиг...

// Транслировано с juick.com
 

+
-
edit
 

Balancer

администратор
★★★★★
Уф. Решил задачу автоматического конфигурирования Docker-связки nginx/host + nginx/container + php-fpm/container. Т.е. чтобы одним скриптом запуска всё соединялось в работающую конфигурацию. Пока всё костыльно, без прав доступа и т.п. Но не придётся придумывать статические порты доступа для контейнеров или вручную прописывать проксирование на nginx-хосте.
 41.0.2272.10141.0.2272.101
+
-
edit
 

Balancer

администратор
★★★★★
Отлично! weave позволяет на лету связывать в одну сеть уже запущенные контейнеры Docker и LXC. Жаль только, что не позволяет автоматически сменить точку входа в сеть, если исходная отваливается. Можно, конечно, скриптом попробовать оптимизировать, типа, если один внешний хост перестаёт пинговаться, то переключаемся на резервный... Может, есть более прямая альтернатива?
 41.0.2272.11841.0.2272.118
RU Balancer #14.04.2015 09:21  @Balancer#14.04.2015 09:19
+
-
edit
 

Balancer

администратор
★★★★★
В копилку, чтобы потом не искать снова:
code diff
  1. --- weave       2015-02-03 17:01:30.000000000 +0300
  2. +++ weave-lxc   2015-04-14 09:21:46.970249984 +0300
  3. @@ -173,7 +173,7 @@
  4.  # If an error is caused by container dying, swallow output from error.
  5.  with_container_netns () {
  6.      CONTAINER="$1"
  7. -    CONTAINER_PID=$(docker inspect --format='{{.State.Pid}}' $CONTAINER)
  8. +       CONTAINER_PID=$(sudo lxc-info -n $CONTAINER -p -H)
  9.      if [ "$CONTAINER_PID" = 0 ] ; then
  10.          echo "Container $CONTAINER not running." >&2


// via https://github.com/weaveworks/weave/issues/108
 41.0.2272.11841.0.2272.118
Последние действия над темой

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru