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%, а время запуска и развертывания такого контейнера — самым минимальным.

Масштабируйте приложения с облачным Kubernetes
Запуск кластера за 10 минут
Перейти

Популярность контейнеров и зачем вам Kubernetes

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

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

Однако все не так просто. Чем больше контейнеров, тем сложнее ими управлять. И тут пришли на помощь системы оркестрации контейнеров.

Кластер Kubernetes: для тех, у кого большое хозяйство

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

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

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