Позвольте поделиться с вами новым стеком, состоящим из кластера Kubernetes и набора специализированных расширений, которые позволят вам реализовывать ежедневные сложные рабочие процессы. Конечно, простое развёртывание Kubernetes и его расширений само по себе не приносит большой пользы. Если у вашей команды нет навыков разработки или развёртывания в Kubernetes, не говоря уже о понимании интеграции и использования сторонних расширений с вашими приложениями, тогда какая от этого польза для вас, верно? Я работаю с Kubernetes уже несколько лет, это потрясающая платформа, универсальная, расширяемая и мощная. Но с большой силой приходит большая ответственность! Я руководил командами, разрабатывающими приложения, предназначенные для работы в Kubernetes. С годами стало очевидно, что, несмотря на величие платформы, в комнате был слон… Давайте заглянём немного глубже в эту кроличью нору, окей? Создавать образы контейнеров и запускать их, например, с помощью docker‑compose, достаточно просто. Большинство разработчиков знают, как добраться туда без особых хлопот. Но если вы хотите серьёзно подойти к запуску своих приложений в продакшен средах, у вас практически не будет другого выбора, кроме как проявить интерес к такой платформе, как Kubernetes. Kubernetes — это совершенно другой зверь. Простое подключение тома с некоторыми предварительно заполненными данными, предоставление порта для обеспечения доступности вашего приложения или просто обдумывание того, как все сочетается, приобретают совершенно иной смысл, когда вам приходится делать это в Kubernetes. Для тех из вас, у кого была возможность работать c k8s помимо простого варианта использования «hello world» и у кого нет докторской степени в Kubernetes, вероятно, хорошо известно, что я имею в виду под этим. Но сложность выходит далеко за рамки этих нескольких примеров. Запуск приложения в продакшн — непростая задача. В Kubernetes есть механизмы, позволяющие решать самые сложные аспекты продакшн сред (автоматическое масштабирование, сетевая безопасность, поддержка кластеров, бесконечная расширяемость). Также они создают огромную сложность, которая часто мешает разработчикам и DevOps‑инженерам эффективно использовать их. Большинство разработчиков говорят, что знают Kubernetes, когда я спрашиваю их об этом. Они считают, что если они один раз задеплоили pod и прикрепили к нему том, у них есть базовое понимание, которого достаточно для работы с кластером. Давайте добавим ещё несколько модных словечек и посмотрим, вызовут ли они у вас знакомые нервные импульсы: Управление доступом на основе ролей (не многие люди используют его, оно интуитивно непонятное и слишком сложное, в результате чего все становятся «root») Сетевые политики (ограничение сетевого трафика между приложениями, требуется совместимый CNI, сложный в использовании) Хранилища данных (Ceph, NFS, Longhorn, пути к хостам...) Типы хранилища (ReadWriteOnce, ReadWriteMany...) Много ресурсов на выбор: Pods, Deployments, StatefulSets, DaemonSets, Services,VirtualServices, Gateways, Ingress, PVs, PVCs, Secrets, ConfigMaps, Roles, ClusterRoles, RoleMappings. Отладка приложений в Kubernetes (журналы, состояние, ресурсы...) И это лишь некоторые базовые концепции Kubernetes. Давайте не будем забывать о сторонних инструментах вроде Helm, агрегаторов журналови других преимуществах, которые это удивительное сообщество создавало на протяжении многих лет. Что касается HELM, это отличный менеджер пакетов для рабочих нагрузок kubernetes. Но создание собственных HELM charts — сложная задача. У каждого приложения есть выделенный chart, обычно он настраивается специально для этого приложения, однако оно развертывает аналогично структурированные ресурсы Kubernetes под капотом. Вследствие этого придётся детально изучить каждый файл HELM chart-а «values.yaml», чтобы понять, как его использовать. Почему? «PersistetVolumes» и «PersistedVolumeClaims» позволяют вам сохранять данные вашего приложения, даже когда ваше приложение выходит из строя.  Эти тома и файлы скрыты где‑то в кластере вне вашей досягаемости, и каждый новый том, созданный для вашего приложения, сначала полностью пуст. Видите, к чему я клоню с этим? Итак, что, если у меня есть какие‑то данные, которые я хотел бы поместить в том, от которого зависит мое приложение? Экс‑исходная схема базы данных и набор данных, статический веб‑сайт, который служит базой для моего приложения и т. д. Давайте посмотрим правде в глаза, пустой том — это хорошо, но иногда ему нужны некоторые предварительно заполненные данные. Обычно вам приходится усложнять приложение всевозможными механизмами инициализации, которые обнаруживают пустой том и заполняют его, прежде чем вы действительно сможете начать его использовать.  Я мог бы продолжить с такими темами, как Ingress и Gateway, SSO, ACL, управление сертификатами и так далее, но я думаю, вы поняли суть. Это то, что я вижу каждый день, когда разработчик присоединяется к нашей команде и обнаруживает готовый к продакшену Kubernetes, который он должен понимать, чтобы разрабатывать и тестировать приложения. Количество времени, которое я трачу на изучение всех этих концепций, огромно, не говоря уже о количестве времени, которое разработчики должны тратить на исследования и изучение. Когда разработчик увольняется, ему должны найти замену и начать обучать заново. В конечном итоге это обходится компании очень дорого. Так почему же Kubernetes настолько сложен в использовании? Следующее утверждение довольно хорошо подводит итог этому: Kubernetes сложен, поэтому ваши приложения не должны быть такими! Если бы вы могли использовать Kubernetes и все его зависимости, но без необходимости беспокоиться о понимании и освоении всего этого… Что ж, может быть, вы и сможете! У меня такое ощущение, что это проблемное пространство вокруг Kubernetes ещё не было должным образом рассмотрено. Существуют коммерческие решения, которые имеют большое значение (но только в определенной степени), например, «OpenShift». С открытым исходным кодом в этом отношении их не так много, за исключением большого количества документации. Итак, что же представляет собой платформа MDos? MDos — это неуправляемый вариант Kubernetes. Он развёртывает для вас кластер K3S Kubernetes и несколько выбранных инструментов и расширений вокруг него, чтобы сделать его полностью готовым к развёртыванию Kubernetes в рабочей среде. Вдобавок ко всему, он добавляет уровень управления, позволяющий связать все это воедино так, чтобы вы могли сосредоточиться на использовании доступных функций платформы, а не внедрять и настраивать эти функции самостоятельно. Он также предоставляет платформу для объединения ваших приложений в развертываемый ресурс, который позволяет вам подключать к вашим приложениям дополнительные функции: SSO, управление сертификатами TLS, вход, управление журналами и др. После установки на сервер у вас будут запущены следующие компоненты, готовые к работе: узел Kubernetes  Istio (возможности входа и сетки); Cert‑Manager (управление сертификатами TLS); OAuth2-прокси (аутентификация SSO / OAuth2 / OIDC); Longhorn (распределенное блочное хранилище для Kubernetes); Loki & Grafana (агрегатор логов и панель мониторинга); Registry Docker (ваш собственный частный и безопасный реестр образов); Keycloak (гибкое управление аутентификацией); FTP‑сервер (позволяет синхронизировать объёмные данные с модулями); MDos Controller / API (делает для вас объемный список, чтобы интегрировать и скрыть сложность для всех вышеперечисленных инструментов) Все эти инструменты решают за вас конкретные задачи, а контроллер MDos — связующее звено, которое объединяет все это вместе для конкретных нужд. Для взаимодействия с контроллером MDos используют Dos CLI. Чтобы установить платформу MDos, обратитесь к документации, доступной здесь: https://mdundek.github.io/mdos/installation. Этот интерфейс командной строки устанавливается на каждом компьютере, с которого вам необходимо взаимодействовать с платформой. Это ваш швейцарский армейский нож, который позволит вам внедрять и настраивать сложные задачи рабочего процесса вокруг Kubernetes и его зависимостей.  Чтобы установить MDos CLI, обратитесь к документации, доступной здесь: https://mdundek.github.io/mdos/installation/#install-the-mdos-cli . CLI также используется для создания каркаса приложений MDos. Он предоставляет стандартизированную структуру папок, которая используется для хранения исходного кода приложения, файлов конфигурации и зависимостей, которые затем можно развернуть в кластере.  Приложения следует рассматривать как концепцию более высокого уровня. Приложение mDos состоит из одного или нескольких компонентов приложения. Компоненты приложения — фактические заполнители ресурсов вашего проекта (исходный код), где один компонент может быть, например, внутренним сервером API, а второй компонент будет содержать ваше интерфейсное приложение. К каждому компоненту приложения может быть присоединен один или несколько томов для обеспечения сохраняемости хранилища и зеркального отображения данных. Эта архитектура позволяет создавать сложные приложения в соответствии с вашими потребностями. Макет проекта приложения MDos состоит из одной или нескольких папок, каждая из которых представляет компонент приложения. В корне папки приложения находится файл «mdos.yaml», который содержит все параметры конфигурации среды выполнения для приложения и его компонентов: В этом примере у нас есть приложение с именем my‑application, которое состоит из двух различных компонентов приложения: backend и frontend. Каждый компонент имеет свой собственный Dockerfile. На уровне приложения также существует папка volumes, в которой вы можете хранить файлы томов компонентов приложения, которые будут использоваться в вашем приложении, и конфигурационный файл mdos.yaml, содержащий все параметры конфигурации среды выполнения. В качестве примера, здесь в папке volumes есть подпапка под названием static‑website, которая используется интерфейсным приложением для обслуживания данных своего веб‑сайта. Этот пример подробно описан в разделе Начало работы на сайте документации MDos. Мы повторно используем этот пример здесь в целях иллюстрации. Если вы хотите развернуть его самостоятельно, воспользуйтесь официальной страницей «Начало работы«, упомянутой выше, для получения более подробных инструкций о том, как его воспроизвести. Допустим, вы хотите разработать новое приложение, которое должно быть развернуто на Kubernetes. Для этого используйте Dos CLI:  Это создаст новую папку с конфигурационным файлом mdos.yaml в нем. Теперь можно переходить к созданию компонентов приложения. Внутри папки проекта вашего приложения выполните следующую команду: CLI задаст вам пару вопросов о параметрах базовой конфигурации. Это создаст новую папку компонента с Dockerfile, а также обновит файл mdos.yaml, ссылающийся на компонент как на часть общего проекта приложения вместе с его параметрами конфигурации. Теперь вы можете приступить к реализации компонента приложения hello‑world‑server. Создадим базовый HTTP‑сервер NodeJS, который при вызове будет возвращать «hello world». Создайте новый файл: hello‑world/hello‑world‑server/index.js И последнее, но не менее важное: нужно заполнить Dockerfile нашего компонента,, чтобы мы могли создавать образ контейнера во время развертывания. Откройте Dockerfile, который находится внутри папки hello-world-server, и установите его содержимое: Теперь у нас есть приложение, готовое к использованию. Далее нужно сообщить приложению mdos, что мы хотим открыть порт 8080, и настроить входящую конфигурацию, чтобы предоставить его за пределами кластера, используя имя хоста hello‑world.mydomain.com. Начнем с предоставления доступа к порту 8080 для компонента приложения. Это можно сделать с помощью сервиса kubernetes. Перейдите в папку компонента hello‑world‑server и выполните команду: И, наконец, вход, чтобы у нас было имя хоста, настроенное для доступа к этому приложению:   Вот как теперь должна выглядеть файловая структура проекта: Давайте взглянем на сгенерированный код в файле mdos.yaml: Все функции настройки приложения будут находиться внутри этого файла yaml, даже для самых продвинутых вариантов использования и конфигурационных потребностей — все будет здесь. Не нужно пачкаться с низкоуровневыми абстракциями kubernetes, платформа переведет все в необходимые вам артефакты. Загляните под капот Kubernetes. Учить на практическом курсе по подписке в удобное время.  Чтобы узнать больше обо всем, что вы можете настроить для своих развертываний в этом файле yaml, пожалуйста, ознакомьтесь со справочной документацией по приложению Msdos.  Прежде чем приступить к развертыванию нового приложения, нужно создать пространство имён, в котором мы сможем развернуть это приложение. В Kubernetes пространства имен используются для группировки ресурсов, чтобы их можно было правильно администрировать и запускать в их собственном контексте с ограниченной областью действия. В MDos мы назначаем выделенное пространство имен каждому клиенту на платформе. Приложения принадлежат к пространству имен клиентов, без этого пространства имен мы не сможем развернуть приложение. Чтобы создать новое пространство имен клиента с именем a-team, выполните следующую команду: Не создавайте свои пространства имен с помощью kubectl CLI. Это позволит обойти несколько шагов настройки, необходимых для использования всех расширенных функций MDos. Теперь развернем наш пример «Hello World» в кластере. Перейдите в приложение hello-world и выполните команду: Вот и все, теперь ваше приложение должно быть доступно в следующем домене: https://hello-world.mydomain.com Поскольку это базовый пример, мы пока пропускаем такие темы, как управление пользователями, аутентификация или любые другие расширенные темы. Поскольку мы прошли аутентификацию с помощью учетной записи администратора MDos, мы можем выполнять развертывание в этом пространстве имен без создания или назначения пользователей и разрешений для этого пространства имен. Вот несколько полезных ссылок с более подробной информацией и расширенными вариантами использования: Репозиторий GitHub находится здесь: Установите платформу: https://mdundek.github.io/mdos/installation/ Начало работы: https://mdundek.github.io/mdos/getting-started/ Справочный документ для “mdos.yaml”: https://mdundek.github.io/mdos/reference-documentation/ Расширенные темы: https://mdundek.github.io/mdos/advanced-resources/ Всех, кто уже работал с Kubernetes и хочет углубить свои знания, мы приглашаем на курс «Kubernetes: Мега».  На курсе мы рассмотрим авторизацию в кластере, автоскейлинг, резервное копирование и другие вещи, касающиеся продвинутой эксплуатации кластера. Вас ждут 13 онлайн-встреч со спикерами по 1-1,5 часа, более 6 часов практики на стендах, групповой чат с куратором и итоговая сертификация. Что еще будет:  создадим отказоустойчивый кластер в ручном режиме; авторизация в кластере; настройка autoscaling; резервное копирование;  Stateful приложения в кластере; интеграция Kubernets и Vault для хранения секретов; HorizontalPodAutoscaler; ротация сертификатов в кластере; Blue-Green Deploy и Canary Deploy; настройка Service mesh. Всем, кто собирается запускать Kubernetes в продакшн и отвечать за его работу в дальнейшем. Применение углубленных знаний о k8s поможет компании сэкономить сотни тысяч рублей, а также повысить вашу ценность, как специалиста.  Мы сделали курс для администраторов кластеров и баз данных, DevOps’ов, специалистов по безопасности, архитекторов и инфраструктурных разработчиков, которые давно работают с k8s, хотят глубже понять тонкости и научиться реализовывать сложные сценарии. Главный результат познания Kubernetes — уменьшается time-to-market продукта. Это важно, потому что обычно ожидание становится критичным для команды эксплуатации, пока продукт непрерывно улучшают. С K8s можно быстро поднять себе в stage-кластере инфраструктуру, протестироваться на ней, поэкспериментировать и что-то выкатить.  Обучение состоит исключительно из практических примеров, а теория направлена на на более глубокое понимание, что же находится под капотом Kubernetes. Мы в тестовом режиме запустили подписку, в которую входят 20 курсов Слёрм. За 50 000 рублей вы можете пройти интересные вам программы из списка в течение трех месяцев.  Стоимость видеокурса «Kubernetes: Мега» без подписки — 70 000 рублей, а с подпиской вы получите гораздо больше знаний на 20 000 дешевле. Оформите подписку до 21 марта и успейте собрать все сливки.  Узнать подробности и записаться.