Утечки памяти не связаны с Docker, а с Cgroups, когда пытаешься включить ограничение памяти ядра (использую как временный костыль против fork-бомб). Ирония в том, что ядро течёт при мониторинги потребления памяти ядра (исправлено в 4.0).
Попробовал я, значит, CoreOS… Мне кажется, что я скоро сделаю N+1 OS. Когда я только познакомился с Docker, мне казалось, что мне подойдёт любая OS, которая удовлетворяет вот этому условию:
Linux Kernel 3.10+
Как сильно я ошибался…
Так получилось, что я использую фичи Docker 1.6.0+ (на момент написания проекта приходилось ночные релизы использовать)
Всё шло гладко до нагрузочного тестирования, которое показало, что течёт память, да не просто память, а память ядра. В ходе раскопок узнал много нужного и не очень, но радости моей не было предела, когда я узнал, что в 4.0 уже это исправлено! Итак: Linux Kernel 4.0+
Собирать своё ядро на Ubuntu мне не хотелось ну совсем, да и на данный момент все эксперименты ведутся в виртуальных машинах, так что можно пойти по пути экзотических ОС, в частности, «оптимизированных» для Docker (так как меинстрим дистрибутивы нереально пнуть на обновление ядра). Ок, RancherOS не прошёл по версии ядра, поставил CoreOS, а тут у нас overlay+extfs и ладно бы оно не лагало, так нет, упало на первом же запуске pip install… Итог: нужен AUFS, как уже проверенное решение
Лично мне (!) проще читать (!) код без лишних знаков (а скобки при должных отступах нужны только компилятору). Я согласен, что скобки — не такая уж и глобальная проблема, при желании можно даже простой скрипт написать, который будет транслировать из синтаксиса без скобок в синтаксис со скобками, но лично я не вижу никакого преимущества в скобках, поэтому считаю их лишними.
Я хочу обратить ваше внимание (я и сам не заметил как отвлёкся на эту тему), что я не ставил целью сравнения Python с чем-нибудь ещё, я говорил про VIM в случае безскобочного языка на примере Python.
Есть такие вещи, как знаки переноса, в человеческой речи они тоже есть. В Python для этого в конце строки достаточно поставить \ или воспользоваться услугами круглых скобок. Примеры:
a = MyComplexClass("one", "two three four five...")\
.do_something()
a = (MyComplexClass("one", "two three four five...")
.do_something()
)
something_really_long_long_long_long = ComplexSomethingLikeJavaPeopleLike(
1, 2, 3
)
Я изначально описывал не отличие Python от {}-языков, а то, что копирование с Python не является никакой проблемой в VIM несмотря на то, что в Python нет скобок. Более того комбинацию d<N>d можно использовать в любом коде.
В небольших методах, скажем, до 10 строк легко используется комбинация, например, d4d, которая вырезает 4 строки в буфер. Именно в этом контексте я привёл уточнение про маленькие блоки кода.
Пишу в VIM уже 8 лет, на Python — 6 и вот как-то обходился d<N>d или визуальным выделением через v. Хороший Python код очень редко требует копирования больших объёмов (в том числе и из-за того, что большинство методов вмещаются в 1 экран кода), в отличие от {}-образных.
Отступы сделайте (не первый урок по программированию ж ей богу) и ничего сливаться у вас не будет:
begin;
int beginningBegin = 25;
int endd = 34;
if (beginningBegin > endd) then
begin
beginningBegin -= beginningBegin;
endd = endd — beginningBegin;
end;
beginningBegin = 45;
end;
Но вообще, я предпочитаю Python-стиль, как не дублирующий скобками/BEGIN-END и так имеющуются структуру и логику. Если у вас отступы отдельно живут, а скобки отдельно и вы считаете, что скобки помогают избежать проблем, а ваш код так и остаётся с кривыми отступами, хочу вас заверить, что такой код нужно считать ущербным и нужно исправлять отступы. Итого, имея скобки как средство языка и отступы для красоты — вам приходится делать двойную работу.
Я только добрался посмотреть на Genie и Vala. Чёрт побери, нет предела совершенству! Я как раз думал, что Nim и Rust имеют свои сильные стороны и было бы интересно их скрестить и тут я читаю про Genie… Я пока прочитал только официальную вики-статью wiki.gnome.org/Projects/Genie, но может вы меня отговорите до того как я начну раскопки? Может он устарел или его забросили (Vala вроде релиз был недавно), или может он как-то к Gnome слишком привязан?
Её устранили в 4.0 ядре, поэтому и хожу пинаю чтоб обновляли. boot2docker быстро откликнулись и обновили (я думал, что мне на первое время хватит, но оказалось, что я не угадал с направлением), а RancherOS уже две недели не отзываются, а они мне нравятся минимализмом и web-интерфейс у них интересный, хочу попробовать, а ещё они автоматически поднимают ipsec между контейнерами, что позволяет поднимать связанные контейнеры через интернет (интересно, но пока не придумал применения особо).
Были ли моменты, когда хотелось что-то сделать вопреки CoreOS? :)
На самом деле, моя проблема с выбором ОС сейчас связана с одной небольшой деталью — в ядрах до 4.0 есть утечка памяти в ядре (в одном специфическом случае, в который нормальные люди не попадают обычно), так что я хожу по всем проектам и пинаю людей на апдейт ядра.
Мой опыт подтверждает ваши слова относительно того, что Swarm — это просто абстракция, которая, на сколько это возможно, стирает границы между разными машинами. Пока что у меня на нём работает тестовый кластер, который изначально был запланирован только для внутрикорпоративнх экспериментов, так что высоких требований по uptime у него нет, так что Swarm отлично подошёл как простой способ управления всем хозяйством с одной машины.
Вообще, Docker + Swarm вытеснили весь головняк с CFEngine, который хоть и решал проблемы, но всегда происходили какие-то накладки в конфигах, вылавливание которых порой занимало больше времени чем хотелось, так что в этом смысле мне нравится эта связка для текущих задач.
Кто-нибудь пробовал использовать ОС заточенные под Docker (RancherOS, CoreOS, Atomic, Snappy Ubuntu, ...)? Меня интересует личный опыт, так как статей я поначитался уже много; больше всего привлекает RancherOS, но они как-то сбавили темпы и это меня расстраивает.
Я нырнул в мир Docker буквально пару месяцев назад и это просто потрясающе! Кроме того, что я построил проект, который благодаря Docker стал модульным, безопасным и прекрасным, я наконец смог переехать на Arch Linux благодаря тому, что теперь я и у себя на ноуте могу с минимальными накладными расходами (виртуалка с Linux на Linux мне не нравилась совсем, а с chroot много мороки) иметь окружение идентичное с боевыми серверами.
Тема управления кластеров с Docker контейнерами сейчас особенно популярна, лично я остановился на Docker Swarm. Преимущества:
официально поддерживается Docker
прост в настройке и использовании
К недостаткам Docker Swarm я бы отнёс:
возможно, слишком прост для построения изолированных инфраструктур
возможно, команде Docker лучше было бы фокусироваться на самом Docker, а не распылять усилия и заходить на территорию kerbernetes/fleet/mesos/...
Лично мне Docker Swarm нравится и пока что я им доволен как никогда. А какие у вас мысли по этому поводу? Стоит ли морочиться с Kubernetes для кластера из 10 машин?
N+1OS. Когда я только познакомился с Docker, мне казалось, что мне подойдёт любая OS, которая удовлетворяет вот этому условию:Как сильно я ошибался…
Продолжаю поиски…
На счёт глубокой альфы Swarm ничего сказать не могу — у меня больше месяца аптайм с ним и ничего не падало ещё.
vii.\или воспользоваться услугами круглых скобок. Примеры:d<N>dможно использовать в любом коде.P.S. Я сам никого не минусую, но если кто-то хочет обменяться минусами — вы хоть намекните кому я задолжал.
d4d, которая вырезает 4 строки в буфер. Именно в этом контексте я привёл уточнение про маленькие блоки кода.d<N>dили визуальным выделением черезv. Хороший Python код очень редко требует копирования больших объёмов (в том числе и из-за того, что большинство методов вмещаются в 1 экран кода), в отличие от {}-образных.Но вообще, я предпочитаю Python-стиль, как не дублирующий скобками/BEGIN-END и так имеющуются структуру и логику. Если у вас отступы отдельно живут, а скобки отдельно и вы считаете, что скобки помогают избежать проблем, а ваш код так и остаётся с кривыми отступами, хочу вас заверить, что такой код нужно считать ущербным и нужно исправлять отступы. Итого, имея скобки как средство языка и отступы для красоты — вам приходится делать двойную работу.
На самом деле, моя проблема с выбором ОС сейчас связана с одной небольшой деталью — в ядрах до 4.0 есть утечка памяти в ядре (в одном специфическом случае, в который нормальные люди не попадают обычно), так что я хожу по всем проектам и пинаю людей на апдейт ядра.
Вообще, Docker + Swarm вытеснили весь головняк с CFEngine, который хоть и решал проблемы, но всегда происходили какие-то накладки в конфигах, вылавливание которых порой занимало больше времени чем хотелось, так что в этом смысле мне нравится эта связка для текущих задач.
Тема управления кластеров с Docker контейнерами сейчас особенно популярна, лично я остановился на Docker Swarm. Преимущества:
К недостаткам Docker Swarm я бы отнёс:
Лично мне Docker Swarm нравится и пока что я им доволен как никогда. А какие у вас мысли по этому поводу? Стоит ли морочиться с Kubernetes для кластера из 10 машин?