[Перевод] Kubernetes — это как океанариум

Прим. перев.: в конце прошлого года Anne LoVerso — инженер из VMware Pivotal Labs — опубликовала развернутое сравнение Kubernetes с… океанариумом. Эта небольшая статья с наглядными иллюстрациями и аналогиями ориентирована на тех, кто впервые знакомится с K8s, и призвана упростить их самое первое погружение в дебри океана… оркестратора.

fc52e4be4c04033935ca18446b6dfc7e.png

Знакомьтесь: это приложение.

Оно полностью функционально и вполне может работать само по себе, однако оно не может выжить самостоятельно. Ему необходима правильно подготовленная среда.

Этой рыбке-приложению, в частности, для жизни необходима вода.

2ed81a8c56fc33c88d27a0416a3b8df9.png

Мы могли бы запустить его в океан, полный других приложений и программ.

Но в этом случае ему пришлось бы конкурировать за ресурсы и иметь дело с различными опасностями.

В океане у нашей рыбки нет собственного выделенного пространства и ресурсов.

0a39712de90a4cc065252b3041a342e2.png

И тут на выручку приходят контейнеры.

С помощью инструментов вроде Docker мы можем предоставить контейнеры приложениям и обеспечить им персональную среду.

b0d6277aef3e81421af515292a1a931a.png

Это pod, базовый элемент Kubernetes.

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

Теперь, когда наша рыбка надежно помещена в коробку (pod), Kubernetes-океанариум может ей управлять.

cde95eae2e214d2b3c5c11d4b5ca2b32.png

Иногда приложениям требуются ресурсы вроде памяти и вычислительных мощностей процессора.

Например, в нашем случае контейнеру с рыбкой необходимы 60 Вт для аквафильтра.

222bc526991c61482ea30f26692cd082.png

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

В первой комнате доступных ресурсов не осталось: обе розетки заняты.

5ee54de5a6e8435457402fe671686396.png

Во второй комнате имеются свободные розетки, но предупреждение на стене гласит, что их максимальная мощность — 40 Вт (а нам, как вы помните, нужны 60 Вт).

Комнаты соответствуют узлам в кластере Kubernetes — это так называемые worker’ы, на которых работают pod’ы.

355c089926f3fb525f29f802b3e5178f.png

Сам Kubernetes выступает в роли управляющего океанариумом.

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

Если бы ограничений не существовало, то аквариумы были бы равномерно распределены по всем комнатам.

df1a4a3ac8c004badee4a175fd4a8eaa.png

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

Например, Глубоководная экспозиция состоит из аквариумов с рыбами-удильщиками, сосудов с медузами и резервуара с гигантским кальмаром. Когда они создаются как часть экспозиции, мы определяем, сколько контейнеров каждого вида создать.

Такая экспозиция — это Deployment.

a9ba35814af11a185e4a3735635e079c.png

При планировании выставки мы задаем инструкции по созданию каждого ее элемента.

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

207b4a54e3c7b3cf74b0c7bb8ae244f0.png

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

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

c00571903c5be6794c9f6a850dc8a29a.png

Посетителям аквариума не важно, смотрят ли они на медузу Fred или медузу Pearl. Все, что они хотят, — это увидеть живую медузу.

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

В мире Kubernetes ReplicaSet следит за тем, чтобы на смену «уставшему» pod’у всегда приходил новый, и их число соответствовало заданному.

b2e9b6be6b20a278f07113d777668f0e.png

Есть еще одно важное соображение при проектировании выставки.

До сих пор (для иллюстрации) мы представляли pod в виде этакой открытой коробки, в которую помещается приложение «в аквариуме».

694eb384965d986571da9cb88d2080e6.png

Это более точное представление pod’а. Со стороны он выглядит как закрытая коробка с привязанными лейблами.

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

85beec53f34a54f0c9dbfbd14ca90605.png

Нам нужен способ, позволяющий посетителям заглянуть в pod.

Другими словами, нам нужно организовать окно, через которое они смогут увидеть рыбку внутри.

86288a1440173f6425c539258d82c4cc.png

В Kubernetes за это отвечает сервис (Service). У сервисов несколько различных предназначений, но главное — пробросить порт контейнера наружу, чтобы тот был доступен извне.

Подключая наши pod’ы к сервису, мы даем возможность посетителям океанариума любоваться рыбами внутри.

48af0420c280568f65740a118eff0c2e.png

Сервисы также позволяют pod’ам и контейнерам взаимодействовать друг с другом.

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

d0f81a454bceacd18936f3e8d5b1b9c7.png

Еще нам пригодится так называемая сетевая политика (Network Policy).

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

fe12005f993e6c14599c9d1c959647ae.png

ConfigMap — это набор переменных или параметров, необходимых pod’у для работы.

Рыбе для жизни необходима корзина с едой. Поэтому она монтируется на контейнер.

Как видно, корзина с ConfigMap’ами может быть прозрачной или непрозрачной. Это связано с тем, что она может содержать как обычные, так и секретные значения.

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

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

Пример типичной схемы с понятиями, изложенными в этой статье.Пример типичной схемы с понятиями, изложенными в этой статье.

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

e2413a1c097cebb7b1a95745fcde32f3.png

P.S. от переводчика

В тему этого материала нельзя не напомнить про легендарный «The Illustrated Children’s Guide to Kubernetes».

А также читайте в нашем блоге:

© Habrahabr.ru