Неделю назад я приняла участие в конференции Kubecon 2023 в Чикаго. Я прочитала несколько блогов и посетила примерно 101 туториал, но все равно не получила хорошего представления о Kubernetes.
Хуже всего было в последний день конференции. Я заказала Uber, чтобы вернуться в гостиницу. Водитель спросил меня, чему посвящена эта конференция, на что я ответила: «Kubernetes». А после некоторых объяснений стало ясно, что я понятия не имею, о чем говорю.
Представьте себе, что вы приехали с трехдневной конференции и не можете описать своему водителю Uber технологию, которая там рассматривалась. Фейспалм. Поэтому, пытаясь искупить свою вину, я записала переосмысленный разговор с водителем.
От редакции Techrocks: у нас есть и другая статья на эту тему — «Быстрое введение в Kubernetes».
Начало разговора
Я: Представьте, что вы шеф-повар на кухне популярного ресторана. У вас есть целая команда поваров. Каждый из них готовит свою часть блюд: одна группа занимается закусками, другая — основными блюдами, третья — десертами. Ваша задача — координировать работу этих поваров, чтобы еда была подана клиенту вовремя. Представили?
Водитель: Ага.
Я: В этом сценарии главным поваром является Kubernetes. Подобно тому, как главному повару необходимо управлять всеми поварами на кухне, Kubernetes помогает управлять всем тем, что необходимо для работы вашей программы.
Официальное определение Kubernetes — это «инструмент для оркестровки контейнеров». Но поскольку слово «контейнер» довольно абстрактно, можно заменить его на «повар». Тогда Kubernetes будет «инструментом оркестровки поваров». Таким образом, при каждом упоминании «Kubernetes» у вас в голове будет возникать картинка кухни.
Водитель: Хорошо, пока все понятно. Но что это за контейнеры? Я не могу вечно представлять их в виде поваров.
Я: Да, верно. Теперь, когда у вас в голове сложилась картина кухни Kubernetes, давайте рассмотрим, как все кухонные роли соотносятся с концепциями Kubernetes. Будем двигаться от самого маленького к самому большому.
Контейнер
Самая маленькая часть этой головоломки — контейнер. Это, по сути, любая часть программного обеспечения. Например, это может быть веб-сервер Node.js, на котором размещается веб-приложение, или контейнер базы данных MongoDB для хранения данных. (Последнее предложение скорее для разработчиков, читающих эту статью; водителю Uber я бы, конечно, такого не говорила).
Представьте, что на кухне вы подаете суп и салат на закуску. Суп будет вашим контейнером. Салат тоже будет контейнером.
Я знаю, что сейчас это определение кажется несколько произвольным, но оно станет более понятным, когда я объясню его в контексте последующих компонентов.
Под (pod)
На кухне это поднос, на котором стоят суп и салат. В Kubernetes под — это нечто, что может содержать один или более контейнеров. Смысл в том, что контейнеры внутри пода могут взаимодействовать друг с другом.
Для инженеров. В качестве примера представьте, что у меня в поде есть контейнер для веб-сервера и контейнер для базы данных. Они могут взаимодействовать друг с другом через localhost.
Что касается подходящей аналогии с кухней, представьте себе мульт «Полный расколбас», где ваши антропоморфные суп и салат начинают общаться друг с другом. Но суп и салат из тарелки с закусками не могут пообщаться со стейком и картошкой на обеденной тарелке, потому что они находятся на разных тарелках. То есть разные поды не разделяют одно сетевое пространство имен и поэтому не могут общаться друг с другом.
Master Node
Шеф-повар, который управляет всей кухней и контролирует ее. Это та самая концепция «оркестровки контейнеров» или «оркестровки поваров», о которой мы говорили ранее. Примерами реальной работы Master Node по оркестровке могут быть следующие:
Масштабирование, т.е. регулировка количества работающих подсистем в зависимости от загрузки процессора. На загруженной кухне при резком увеличении спроса со стороны клиентов поварам может потребоваться увеличить масштаб работы, приготовив больше порций того или иного блюда. Кстати, обратите внимание на эту визуализацию. Вы, вероятно, представляете себе, как кухня нанимает новых поваров. Но я хочу, чтобы вы представили, что уже имеющиеся повара клонируются. Когда происходит масштабирование, поды, по сути, копируются.Автоматическое развертывание — определение зависимостей и инструкций по выполнению вашего приложения в YAML-файле, чтобы приложение могло развертываться на основе этой конфигурации. На кухне этот YAML-файл аналогичен написанному рецепту, который указывает повару, как приготовить блюдо, чтобы обеспечить последовательность и эффективность.Балансировка нагрузки, или распределение сетевого трафика между различными подсистемами. На кухне балансировка нагрузки подразумевает распределение задач между разными поварами на станции приготовления пищи. Возможно, Боб на десертной станции перегружен запросами на выемку мороженого, поэтому шеф-повар клонирует Боба и поручает Бобу 2.0 взять часть заказов на мороженое у Боба 1.0.
Также важно отметить, что каждый рабочий узел (англ. node — «узел») имеет так называемый «kubelet». В сценарии кухни «kubelet» — это повар за каждым столом. У повара есть множество обязанностей, например, следить за тем, чтобы подносы с едой были правильно собраны, помогать готовить ингредиенты и выбрасывать объедки. Аналогично, «kubelet» выполняет такие действия, как обеспечение работы контейнеров внутри подов, помощь в инициализации подов (например, установка необходимых зависимостей), помощь в сборке мусора и многое другое.
Дополнительный контекст для инженеров. Kubelet — это исполняемый бинарный файл с открытым исходным кодом (он же файл с инструкциями машинного кода, которые может непосредственно выполнить процессор), написанный на языке программирования Go.
Давайте остановимся здесь на секунду. Если вы поняли все, что я сказала до этого момента, то вы понимаете основы архитектуры Kubernetes! Если вы не хотите вечно опираться на кухонные образы, на схеме ниже я убрала все кухонные рисунки и оставила только терминологию Kubernetes.
Водитель: В общем, как это работает, понятно. Но я все еще не понимаю, зачем это нужно.
Я: Да, последняя часть головоломки — это понимание того, как используется Kubernetes. Как люди взаимодействуют с ним? В чем важность Kubernetes для мира технологий?
Давайте на секунду вернемся к нашей аналогии с кухней, чтобы объяснить еще несколько понятий.
Владелец ресторана/франшизы — это разработчики программного обеспечения, которые создают приложение или сервис. В McDonalds владелец франшизы (допустим, его зовут Фрэнсис Кукареку) хочет знать, сколько денег зарабатывает каждая точка McDonalds, и иметь возможность увольнять/нанимать сотрудников по мере необходимости. Он может позвонить шеф-повару, чтобы получить информацию и отдать распоряжения. В Kubernetes программисты не могут поднять трубку телефона, чтобы взаимодействовать со своим кластером Kubernetes. Но у «master node» есть сервер API, на который можно позвонить, и это позволяет получить доступ ко всем задачам. Например, разработчики могут получать информацию обо всех подах, нодах (узлах), сервисах, состоянии и метриках, а также удалять или создавать ресурсы.Клиенты, обедающие в ресторане, — это пользователи приложения или сервиса. Подобно тому, как на кухне McDonalds готовят для меня биг-маки, кластер Kubernetes в Spotify предоставляет мне услугу прослушивания музыки через браузер.
Я добавила эту новую информацию на рисунке, который привожу ниже. То, что вы увидите, на самом деле очень похоже на диаграммы, которые можно увидеть, набрав в Google «архитектура Kubernetes».
И, конечно, я понимаю, что некоторые абстракции в своем объяснении я опустила, поскольку считаю, что они не важны для формирования базовой ментальной модели Kubernetes. Не стесняйтесь копать дальше. По мере углубления в эту тему я буду добавлять в статью ссылки на ресурсы, которые покажутся мне полезными.
Заключение
Я выбрала такой способ повествования (описание технологий через призму разговора с водителем Uber), потому что хотела разложить Kubernetes на части, которые были бы понятны и доступны всем.
Спасибо, что прочитали! Если у вас есть конструктивные замечания по улучшению моей статьи (или моих дерьмовых рисунков), пожалуйста, оставляйте их в комментариях.
Перевод статьи «Explaining Kubernetes To My Uber Driver».
Запись Объяснение Kubernetes водителю Uber впервые появилась Techrocks.