Kubernetes — для тех, у кого большое хозяйство

Kubernetes — для тех, у кого большое хозяйство

За годы развития IT-индустрии человечество создало сотни операционных систем, тысячи языков программирования и десятки тысяч способов запускать программы на миллионах устройств. Авторы всех этих технологий, безусловно, хотели принести в мир радость и порядок. Но по факту в 2018 году мы имеем огромный зоопарк систем, которые очень плохо дружат между собой — а невыспавшиеся админы вынуждены постоянно придумывать всё более и более изощрённые способы заставить воюющие технологии объявить перемирие и начать сотрудничать.

В прошлом специалистам приходилось часами разбираться в том, как заставить работать две программы с разными требованиями на одном сервере (на второй сервер злобная бухгалтерия, конечно же, никогда не давала денег). Однако, как это часто бывает, именно из этих страданий родилась гениальная идея: вместо того, чтобы решать проблемы совместимости программ, мы научим компьютеры запускать сразу несколько операционных систем. А внутри каждой оси будет своя комфортная среда для выполнения любой программы, какой захотим!

Так появилась виртуализация.

Три причины, по которым мы любим виртуализацию

  • Удобство в управлении операционными системами. С появлением виртуализации на одном сервере стало возможным поставить 1C под Windows для управления складом и веб-приложение электронной коммерции под Linux. Красота!
  • Повышение безопасности. В случае взлома приложения хакер окажется внутри виртуальной машины, а не вашей системы. Выбраться из такой «песочницы» очень сложно (или вовсе невозможно). Простите, Мистер Робот.
  • Гибкость в выборе стека технологий. Например, можно нанять 30 программистов, 10 из которых будут писать на Java, 10 — на Python и остальные 10 — на C#. Потом три разные части большой программы запускаются на одном сервере (но в разных виртуалках) и прекрасно работают вместе над частями общей задачи. До появления виртуализации вам нужно было бы искать, скажем, сразу 30 Java-программистов и писать все приложение на Java. Что, конечно, гораздо сложнее, чем нанять 30 человек с опытом в разных технологиях.
  • Однако, как и у всего в этом мире, у виртуализации есть нюанс.

Три причины, по которым мы (справедливо) недолюбливаем виртуализацию

  • Занимает много места. Нужно хранить на компьютере сразу несколько ОС с кучей файлов, которые нужны для работы (а хочется хранить видео из отпуска и GTA 5).
  • Ест слишком много ресурсов. Для того, чтобы все системы работали слаженно, родительская ОС должна управлять гостевыми операционками, передавать им управление в порядке живой очереди и при этом следить, чтобы они не напакостили. А это все требует огромного количества ресурсов и внимания системы. Если не понимаете, о чем идет речь — попробуйте вывести группу из 20 детсадовцев на море и следите, чтобы всем было весело, но никто не утонул, не съел медузу и не потерялся.
  • Софт внутри виртуальной машины тормозит. Большие файлы, ограниченные ресурсы железа и необходимость одновременно выполнять кучу задач приводит к тому, что родительская операционка медленней переключается между процессами и работа софта замедляется.
Что делать тем, у кого большое хозяйство?

В результате, все эти причины вызвали следующий виток эволюции технологий виртуализации — виртуальные контейнеры.

К — контейнеризация

Контейнеры позволяют запускать гостевые операционные системы, но делают это гораздо быстрее, с меньшими дополнительными расходами и без хранения огромных файлов на диске.

Самый популярный стандарт контейнеров в 2018 году — Docker. С этими контейнерами вы можете, скажем, написать приложение на языке Go, засунуть его в Debian Linux и запустить на сервере с Windows. Размер базового контейнера для такого случая будет всего лишь 15 мегабайт, дополнительные расходы на обслуживание виртуалки в самом-самом плохом случае будут в районе 1-3%, а время запуска и развертывания такого контейнера — самым минимальным.

Зачем жить в контейнере, если ты не бомж?

Админы и разработчики восприняли новый подход с огромным энтузиазмом и начали пихать в контейнеры все, что только можно. И вот почему:

  • В контейнеры можно засовывать стабильные и предсказуемые среды выполнения кода. Допустим, вы начали переписывать ваше старое приложение на языке Python версии 2.7 на версию 3.7. Часть приложения уже переписана, а часть — нет. Берем два контейнера, запаковываем в них все зависимости, кладем в них разные части кода, разные версии языков программирования — и опа: все прекрасно работает на одной машине!
  • Программы больше не слетают после обновлений. Вам же знакома такая ситуация: обновил важную программу на сервере, она подтянула с собой еще обновления, те подтянули свои — и в итоге обновилось куча всего, но ваша программа не выдержала перегрузки и умерла? Забудьте, как страшный сон — такого больше такого не будет.
  • Управлять производительностью теперь легче, чем перезагрузить винду. Допустим, в обычное время с обслуживанием ваших клиентов справляется 2 контейнера, но вдруг наступил день Х — и трафик резко вырос. Что вы делали раньше? Страдали, плакали и кололись. Что вы делаете теперь? В одно касание разворачиваете еще дополнительные десять копий приложения и за секунды увеличиваете способность вашей системы принимать входящие запросы.

Что делать тем, у кого большое хозяйство?

А теперь представим, что вы рулите системой, состоящей из десятка частей и работающей на пяти серверах. Именно для таких случаев придумали Kubernetes.

Что делать тем, у кого большое хозяйство?

Kubernetes — это система оркестрации контейнеров. Kubernetes всегда знает, как где и когда запускать контейнеры и что с ними делать потом. Kubernetes включает и выключает контейнеры по требованию, меняет их количество и позволяет им общаться между собой. Пара команд — и вы можете масштабироваться от маленькой системы до очень мощной, принимающей миллионы запросов от пользователей.

Жизнь без системы оркестрации — дачный домик с туалетом на улице и без горячей воды.

Жизнь с Kubernetes — пятизвездочный отель с шикарной мебелью, где и еду в номер принесут, и такси подадут ко входу.

В 2018 году платформа Mail.Ru Cloud Solutions первой в России открыла для пользователей контейнеры Kubernetes как облачный сервис.