Docker-шмокер и Kubernetes. Что это и зачем.

Docker и Kubernetes. Что это и как работает. Блог Bor64.com

В этой статье мы на пальцах разберемся с такими вещами как Docker и Kubernetes. Что это значит и зачем использовать.

Все упрощено для лучшего понимания.

Но для начала немного истории.

P.S. Очень нравится название Kubernetes. Это так круто и футуристично звучит… Kubernetes 🙂

Начало. Виртуальная машина.

Помните времена, когда мы ставили виртуальную машину на свой компик и разворачивали рабочее окружение? Эх.. Ушла эпоха.

Linux Ubuntu на виртуальной машине. Bor64.com

И это хорошо! Потому что на самом деле это было не так удобно, глядя с высоты настоящего времени.

Для начала нужно было найти iso-файл дистрибутива нужной операционки. Затем нужно было скачать кучу разных библиотек и поставить Python с базами данных. Потом начинаешь работать и твоя физическая тачка потиху умирает, потому что виртуалка требует от нее памяти и ресурсов процессора. Конечно же, можно выделить определенное количество ресурсов при создании виртуалки, но ведь хочется, чтобы и она не тормозила. А еще виртуалка съедает место на жестком диске. Много съедает.

Выделение ресурсов компьютера для виртуальной машины. bor64.com

А если твой друг хочет потыкать проект, который ты пилишь. Как ему это сделать? Вот так:

  • скачать iso-файл такой же операционки, как у тебя и создать виртуальную машину
  • установить такие же библиотеки, как у тебя
  • потом ты на диск записываешь свое ДЕТИЩЕ и несешь ему через весь город
  • он копирует все на свой компик, запускает и… ничего не работает, потому что лопух «что-то не так установил»

Классика.

В общем жили так до тех пор, пока челы не запилили Vagrant.

Vagrant. Спасибо, ты был прекрасен.

Если не вдаваться в подробности, то Vagrant — это обертка вокруг виртуальных машин, например VirtualBox или VMWare. Он позволяет простыми командами из консоли создать готовое рабочее окружение.

Все, что нужно было сделать, это скачать готовый или написать свой Vagrantfile, где четко указано, какую операционную систему поставить, какие библиотеки и какой версии Python вы хотите установить, а после этого выполнить в консоли команду vagrant up.

Все! Vagrant создаст виртуальную машину, скачает и поставит указанную операционку внутрь нее, а потом установит все указанные библиотеки и Python. Разве это не круто?

Vagrantfile и готовое рабочее окружение. Bor64.com
Пишите в файле Vagrantfile то, что должен сделать Vagrant, выполняете команду «vagrant up» и получаете готовое рабочее окружение.

Но еще круче то, что можно было скинуть своему другу файлик Vagrantfile и у него развернется такое же окружение, как и у вас. Приколи! Безо всяких проблем!

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

Но и тут есть свой косяк.

Так как Vagrant использует виртуализацию, то проблемы с ресурсами компьютера остаются актуальными.

Docker

Зачем вообще мы говорим про виртуальные машины? Зачем их использовать?

Без виртуальных машин, вам пришлось захламлять свой компьютер разными программами для работы над проектом. Эти программы рано или поздно начнут конфликтовать с вашей уже устоявшейся инфраструктурой. И что потом? «ПЕРЕУСТАНОВИТЯ МНЕ ВИНДОВС!«

А еще представьте, что вы работаете над большим проектом, который нужно тестировать на разном программном обеспечении. Без виртуальных машин вам пришлось бы покупать кучу компьютеров, как-то синхронизировать свой проект между ними, чтобы тестировать его. Удобно?

Виртуалки изолируют все, что касается вашей работы, от вашей основной системы. И если в виртуальной машине что-то «сдохнет», то вы просто ее удаляете и ставите новую без вреда для основной системы.

А теперь представьте себе, что можно развернуть виртуалку без виртуалки. Типо у вас рабочее окружение изолировано от вашей операционной системы, но все это без виртуальной машинки. Спасибо Docker’у за это.

Docker — это прослойка над ядром вашей операционной системы, которая позволяет изолировать любое приложение в отдельный контейнер.

То есть в отдельный контейнер вы кладете PHP, в другой Python, в третий Mysql, в четвертый MongoDB и т.д. Причем вы можете создать несколько контейнеров для, например, Python разных версий.

создание контейнеров в Docker. Bor64.com
Каждое приложение в своем изолированном контейнере.

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

Ведь как работает виртуальная машина: у вас есть железо (ваш комп), на котором стоит операционка Windows / Mac OS / Linux, над которой стоит Hypervisor (он управляет виртуальными машинами), над которым стоят виртуалки, внутри которых стоит операционка Windows / Mac OS / Linux с кучей софта. Представляете сколько это жрет ресурсов вашего физического компьютера?

А Docker просто создает изолированный контейнер с нужным приложением (PHP, Python, Java, разные базы данных и др.) и этот контейнер работает на вашей текущей операционной системе.

сравнение работы Docker и виртуальной машины. Bor64.com
Инфраструктура — совокупность всего железа, программного обеспечения и коммуникаций вашего компьютера.

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

Но и это не все. С Docker’ом вы можете создать контейнер с нужным окружением, засунуть в него ваш проект, сделать образ и скинуть его вашему другу. Затем ваш друг запустит в консоли одну команду и у него создастся такой же контейнер, как и у вас. И все будет работать так же, как и у вас. Это сказка!

Kubernetes

Представьте, что вы разрабатываете высоконагруженный WEB-сервис. По мере увеличения числа пользователей, вам нужно увеличивать ресурсы сервера, чтобы он мог поддерживать хорошую производительность. Как минимум вы начинаете создавать дополнительные контейнеры (реплики) базы данных. И вам нужно объединить их в кластер. А кластером из контейнеров нужно управлять: грамотно распределять нагрузку между ними; налаживать связь между контейнерами, чтобы они «общались между собой»; следить, чтобы контейнеры не отвалились, а если отвалится какой-нибудь, то чтобы другой взял на себя его функции.

Представили сколько это работы? Но вам не всегда может быть нужно много реплик. Например у вас сезонный сервис и летом посетителей вообще мало. Тогда ненужные реплики можно убрать, чтобы не платить за дополнительные ресурсы сервера.

Вот тут-то и нужен Kubernetes.

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

Это из Wikipedia

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

Можете думать о Kubernetes, как о дирижере в оркестре.

Kuberntes управляет Docker контейнерами. Bor64.com

Подытожим

раньше было лучше!

нет

С одной стороны, раньше нам достаточно было разобраться, как работать в виртуальной машиной и все.

А теперь надо знать все эти Docker’ы, Kubernetes’ы и еще фиг знает что. Да. НО! Теперь у нас есть практически неограниченные возможности в быстром создании рабочего окружения, не заботясь о «чорт, а как мой проект будет работать у Васи? а запустится ли он там вообще? а шо делать, если нагрузка увеличится? аааа!!!». Вы просто создаете нужные контейнеры и спокойно работаете. Нужно масштабировать проект? — Kubernetes поможет.

Если вы с чем-то не согласны, у вас есть вопросы или просто хотите сказать спасибо — прошу в комментарии. Пообщаемся 🙂

Спасибо за внимание

Телеграм-канал Bor64.com кнопка подписаться

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

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