image

Не так давно я побывала на конференции Kubecon 2023 в Чикаго. Готовясь к конференции, я почитала статьи в блогах, а на самой конференции посетила несколько семинаров для начинающих (в жанре «101»). Но всё равно не могла сказать, что уверенно понимаю эту технологию. Хуже всего прошёл последний день конференции. Я решила добираться в отель на такси и вызвала Uber. И водитель спрашивает: «А о чём была конференция»? Я ему отвечаю: «О Kubernetes». Попыталась объяснить, но почти сразу поняла, что двух слов на эту тему связать не смогу.

Только представьте себе: уезжать с трёхдневной конференции, но быть не в силах рассказать таксисту о той технологии, которая на ней обсуждалась. Фейспалм. Поэтому теперь попытаюсь реабилитироваться и пофантазировать, как следовало бы рассказать о Kubernetes таксисту Uber.

image

Начало беседы


Я: представьте, что вы шеф-повар, руководите кухней популярного ресторана. У вас в подчинении целая бригада поваров, и каждый отвечает за приготовление тех или иных блюд. Есть группа, занимающаяся закусками, есть те, кто специализируется на горячих блюдах, есть группа по десертам. Ваша задача – скоординировать работу этих поваров, а также обеспечить, что клиенту не придётся чрезмерно долго ждать заказанных блюд. Представили?

image

Водитель: понятно.

Я: В данном сценарии шеф-повар – это Kubernetes. Точно как реальный шеф-повар обязан управлять всей командой поваров на кухне, Kubernetes координирует работу всех компонентов, обеспечивающих корректную работу вашего софта. Официально Kubernetes определяется как «инструмент оркестрации контейнеров», но понятие «контейнер» в данном случае весьма абстрактное, поэтому давайте в нашем контексте вместо «контейнера» говорить «повар». В таком случае Kubernetes – это «инструмент оркестрации поваров». Таким образом, когда услышите о Kubernetes – сразу представляйте себе такую кухню.

image

Водитель: Ага, пока всё логично. Но в чём суть этих контейнеров? Не могу же я всё время представлять их в виде поваров.

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

Контейнер


Мельчайший элемент этой картинки – контейнер. В принципе, это может быть любой полноценный софт. Например, это может быть веб-сервер Node.js, на котором развёрнуто веб-приложение, либо в контейнере может лежать база данных MongoDB, в которой хранятся данные (этот тезис ориентирован в основном на программистов, читающих данную статью, таксисту я бы так объяснять не стала ????). Допустим, на кухне вы готовите суп на первое и салат в качестве закуски. Здесь суп – это отдельный контейнер. Салат – тоже отдельный контейнер.

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

image

Под


На кухне под подобен подносу, на котором вам подают суп и салат. В Kubernetes под – это сущность, в которой могут содержаться 1 или более контейнеров. Так делается потому, что контейнеры в пределах пода могут обмениваться информацией друг с другом.

Для программистов: представьте, что в рамках одного пода у меня находится контейнер с веб-сервером и контейнер с базой данных. Они могут обмениваться информацией через r localhost.

Подходящую «кухонную» аналогию для такой конфигурации я придумать не могу. Пойду на ухищрение: представьте себе хуманизацию супа, болтающую с хуманизацией салата. Но и суп, и салат в данном случае находятся на подносе с первыми блюдами, поэтому не могут поболтать со стейком и его гарниром (картошкой). Они ведь на разных подносах. (Это означает, что у разных подов разные сетевые пространства имён, поэтому они не могут общаться друг с другом).

image

Ведущий узел


Это шеф-повар, управляющий всей кухней и присматривающий за ней. Вспомните концепцию «оркестрации контейнеров» или «оркестрации поваров», о которой мы говорили выше. Если попытаться показать на реальных примерах, как устроена оркестрация, то есть, работа этого ведущего узла, то вот что у нас получится:

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

Автоматизированное развёртывание – это определение зависимостей вашего приложения и инструкций для среды выполнения в файле YAML. Далее приложение можно развернуть на основе конфигурации, описанной в этом файле. На кухне такой YAML-файл аналогичен рецепту, с которым повар сверяется при приготовлении блюда. Тем самым обеспечивается единообразие блюд и эффективность готовки как таковой.

Балансировка нагрузки – это распределение сетевого трафика между разными подами. На кухне балансировка нагрузки подобна тому, как если бы мы поручали разные задачи разным поварам, которые сегодня заняты на смене. Может быть, Боб занимается десертами, но его завалили заказами, только успевай зачерпывать мороженое. В таком случае шеф-повар клонирует Боба, у него получается Боб 2.0. Далее Боб 2.0 перехватывает у Боба 1.0 часть заказов на приготовление мороженого, чтобы немного разгрузить Боба 1.0.

image

Здесь важно отметить и такой момент: у каждого рабочего узла есть так называемый «kubelet». В кухонном сценарии «kubelet» аналогичен повару, работающему за отдельным столом. У этого повара есть набор задач, например, убедиться, что блюда для каждого заказа корректно собираются на подносе. Другие задачи – подбирать ингредиенты для блюда и выбрасывать очистки. Аналогично, «kubelet» делает, например, такие вещи: обеспечивает бесперебойную работу контейнеров внутри подов, помогает инициализировать поды (например, заботится о том, чтобы все необходимые зависимости были установлены), участвует в сборке мусора и делает многое другое.

Добавлю контекста для технарей: Kubelet – это свободно распространяемый исполняемый двоичный файл на языке Go (например, файл с инструкциями, написанными на машинном коде; ЦП может непосредственно выполнять эти инструкции).

image

Здесь давайте ненадолго остановимся. Если вы поняли всё, что я уже успела рассказать, то вы усвоили основы архитектуры Kubernetes! Если вы не хотите вечно залипать на этом комиксе про кухню, посмотрите следующую схему – там употребляется только терминология, специфичная для Kubernetes.

image

Водитель: Кстати, вы всё логично рассказываете. Так что я понял, что такое Kubernetes. Но по-прежнему ума не приложу, зачем он может быть нужен. То есть, какой смысл всё это изучать?

Я: Именно, последнее, что нам осталось разобрать — как именно используется Kubernetes. Что с ним можно делать? Чем он полезен/важен в мире технологий? Давайте ненадолго вернёмся к кухонной аналогии и объясним ещё несколько концепций.

  • Владелец ресторана/франшизы в данном случае аналогичен команде разработчиков, создающих приложение или сервис. В Макдональдсе владелец франшизы (назовём его Франсуа Галль) хочет получить данные о том, какова выручка в каждой из точек, и на основании этого уволить часть сотрудников или нанять новых. Для этого Франсуа Галль может взять телефон, позвонить директору ресторана, чтобы узнать информацию и раздать распоряжения. При работе с Kubernetes программисты, конечно же, не могут взять трубку и переговорить со своим кластером, но на «ведущем узле» есть сервер API. Его можно вызвать и получить доступ ко всем задачам. Например, инженер может узнать, какова ситуация со всеми подами, узлами, сервисами, понять степень работоспособности системы м проверить метрики. Также инженер может создать или удалить ресурсы по мере необходимости.
  • Гость, который заходит в ресторан перекусить, аналогичен пользователю приложения или сервиса. Точно как на кухне Макдональдса готовят бигмаки, чтобы я мог утолить голод, кластер Kubernetes в Spotify позволяет мне слушать в браузере музыку, которую я выбираю из очень большой коллекции.

Всю эту новую информацию я вынес на рисунок, приведённый ниже. Эта схема очень похожа на те, которые можнео нагуглить по запросу «архитектура Kubernetes».

image

image

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

Заключение


Я решила написать этот пост именно в таком стиле (изложить высокотехнологичную тему так, как будто объясняю её таксисту), поскольку хотела подобрать для Kubernetes аналогии, которые были бы понятны и доступны любому человеку.



Возможно, захочется почитать и это:

Комментарии (16)


  1. fishHook
    24.11.2023 12:11
    +12

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

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


    1. Proscrito
      24.11.2023 12:11

      Если вы не можете объяснить это 6 летнему ребенку, вы сами это не понимаете. (С) Эйнштейн

      Но в целом согласен. Таксисту нафиг не нужно, а для ребенка слишком сложно. Забуксует уде на "компонентах софта". Это что такое вообще? Для таксиста объяснение должно укладываться в одну фразу, для ребенка понятийный аппарат свести к минимуму и разжевать. На кухне куча людей и шеф-повар ими руководит. А этот ваш кубернетис кем руководит? Вы же там программы пишете и сайты делаете?..


  1. restruct
    24.11.2023 12:11
    -1

    Жан Ишбиа, разработчик языка Ada, писал ещё в прошлом веке:

    Разработчик примитивного языка Pascal верил в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений.

    Простые ответы на сложные вопросы — это корректный синоним лживого искажения. Сложные явления требуют сложного разговора, понятного только умным. Интеллект — это сложно!

    В мире слишком много вещей и явлений, которые не объясняются 3 плевками и 5 словами. Если обыватель (таксист) не понимает статью о контейнерах и оркестрации, виноваты его недалёкость и необразованность, а вовсе НЕ неумение автора прояснять обывателям.


    1. fizteh147
      24.11.2023 12:11
      +4

      Всё же есть разница между "хочу объяснить, но не могу сформулировать" и "сформулировал, но меня не понимают".

      Когда проблемы с формулировкой объяснения - интеллект таксиста тут ни при чем, рассказчик сам не может облачить свои знания в слова. Это скорее про осознание того, что ясного знания по технологии нет.

      И если дело правда вот в этом

      Попыталась объяснить, но почти сразу поняла, что двух слов на эту тему связать не смогу.

      то это объяснение скорее не для таксиста, а для самого себя.


    1. Andrusha
      24.11.2023 12:11
      +3

      Во-первых, в "5 словах" можно описать концепцию, вовсе не обязательно погружаться в тонкости реализации. А у автора оригинальной статьи походу типичная профдеформация, популярная в научной среде. Видели же всякие вузовские учебники, выглядящие так, как будто написаны не для студентов, а для коллег автора учебника?

      Во-вторых, конкретно про Kubernetes написана книжка для детей.


    1. eton65
      24.11.2023 12:11
      +1

      Разработчик примитивного языка Pascal верил в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений

      Сложные проблемы требуют максимальной декомпозиции. И тогда оставшаяся сложность решения - правильная.

      Получается, что даже Жан Ишбиа может ошибаться.


    1. Scott_Leopold
      24.11.2023 12:11
      +4

      А вот Фейнман (физик, нобелевский лауреат) считал, что "если Вы не можете объяснить то, чем Вы занимаетесь, пятилетнему ребёнку, то Вы сами этого не понимаете".

      А Эйнштейн (тот самый) заявлял, что "физические теории и концепции можно объяснить даже буфетчице".

      Хотя я допускаю, что Вы умнее их


      1. restruct
        24.11.2023 12:11
        +2

        Фейнман (физик, нобелевский лауреат) считал, что «если Вы не можете объяснить то, чем Вы занимаетесь, пятилетнему ребёнку, то Вы сами этого не понимаете».

        Вы напрасно приписываете великим свои нелепые фантазии. Неуклюжее враньё в эпоху всемогущего Гугла разоблачается за секунды.

        Фраза «Если учёный не может объяснить 8-летнему мальчику, чем он занимается — он шарлатан» взята из популярного ХУДОЖЕСТВЕННОГО романа К. Воннегута «Колыбель для кошки» (в переводе Риты Райт, 1963). А восходит эта чушь к математику 19 века, который не мог знать действительно сложных вещей (потому что 19 век):

        Нельзя хвастаться тем, что ты сказал последнее слово в какой-либо теории, если не можешь объяснить ее несколькими словами первому встречному на улице.

        Ж.Д. Жергонн, французский математик, 1771-1859

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

        Ричард Фейнман подобной чуши никогда не говорил. А вот что он действительно говорил и писал:

        Смело могу утверждать: квантовой механики никто не понимает.

        Фейнман Р. Характер физических законов. – М.: Наука, 1987, с. 117

        Если бы я мог объяснить это каждому встречному, то не заслуживал бы Нобелевской премии.

        Эта цитата относится к числу НЕподтвержденных, однако мне, внимательному читателю «Фейнмановских лекций по физике» и вдумчивому исследователю жизни Ричарда, очевидно, что эта фраза очень характерна для него. Свои лекции он читал аспирантам (НЕ студентам!) тех. университета, а не уличным мимокрокодилам.

        Теперь Эйнштейн:

        А Эйнштейн (тот самый) заявлял, что «физические теории и концепции можно объяснить даже буфетчице».

        Альберт Эйнштейн этой чуши никогда не говорил. Подобная ахинея могла прийти только в голову пресловутой буфетчицы. Ваша мать случаем не из советского общепита?

        Теорию относительности много лет понимал только сам Альберт. Спустя многие годы добавилось несколько человек. В 2023 знание обывателей об Эйнштейне ограничивается высунутым языком на известной фото.


  1. EvgeniyDobro
    24.11.2023 12:11
    +10

    Водитель, после данного объяснения - а мы на Docker swarm сидим, а таксую я для души...


  1. Ratenti
    24.11.2023 12:11

    Таксисту достаточно сказать конференция про компьютеры


  1. enkryptor
    24.11.2023 12:11

    Не лучший выбор — начинать с аналогии, умолчав о том, что это аналогия. Мы сразу ставим человека в неправильный контекст, и когда в объяснении наконец появится "софт", слушатель будет обескуражен. Если подходить к задаче более системно, то первое, что нужно сделать — это обозначить тематику: компьютеры, серверы и сети, ПО. Скорее всего этого будет достаточно.

    Но, как говорится, "отрицаешь — предлагай". Вот как бы я объяснил, что такое Kubernetes, человеку, который работал с компьютерными устройствами только как пользователь:

    «Почти все имели дело с компьютерными программами (приложениями). Но кроме персональных компьютеров и смартфонов есть ещё серверы, за счёт которых все эти системы работают через интернет. На серверах тоже есть свои программы, которые сейчас принято организовывать в т.н. контейнерах — это механизм, упрощающий запуск и развёртывание программ. Контейнеры тут — это не физические коробки, это такие виртуальные сущности внутри сервера. Так вот, Kubernetes помогает работать с этими контейнерами — автоматически создаёт их, запускает, останавливает и т.д. Это может быть нужно, если контейнеров много, или управлять ими нужно в реальном времени — например, в зависимости от нагрузки.»


  1. Yolah
    24.11.2023 12:11
    +1

    Сначала вы пишите что контейнер - это повар. Затем пишите, что блюда это тоже контейнеры. Поды это подносы, на которых размещаются контейнеры, тобишь повара. А ещё повар это "kubelet". Так контейнер или "kubelet"? Или это одно и то же? Как


  1. K0LYUNYA
    24.11.2023 12:11
    +1

    — А о чём была конференция?

    — О всяких компьютерных штуках.

    Учитесь абстрагироваться от ненужных деталей.


  1. igorekudashev
    24.11.2023 12:11
    +1

    Умение объяснять отсутствует. Также отсутствует понимание какие вещи можно отбросить чтобы объяснить незнающему человеку. Чем то похоже на профдеформацию, когда ты уже привык что все вокруг знают как работает твой стек и им надо объяснить только подробности, только в этой статье сверху ещё натянули детские аналогии, и получилась совсем каша. Если бы мне надо было ответить, я бы сказал, что есть множество программ, которые запущены одновременно, а кубер это "главная" программа, которая позволяет управлять, настраивать и ограничивать это множество программ. Какая разница что там внутри? Контейнеры, поды, сервис дискавери, таксист таких слов не знает


  1. gurux13
    24.11.2023 12:11

    Kubelet – это свободно распространяемый исполняемый двоичный файл на языке Go (например, файл с инструкциями, написанными на машинном коде; ЦП может непосредственно выполнять эти инструкции).

    Простите, что?


  1. ArtCapCorn
    24.11.2023 12:11

    Судя по комментариям, не все поняли что это перевод ????