Что такое Kubernetes? Ваша следующая платформа приложений

Kubernetes - популярная платформа с открытым исходным кодом для оркестровки контейнеров, то есть для управления приложениями, построенными из нескольких, в основном автономных сред выполнения, называемых контейнерами. Контейнеры становятся все более популярными с момента запуска проекта контейнеризации Docker в 2013 году, но большие распределенные контейнерные приложения становится все труднее координировать. Благодаря тому, что контейнерные приложения значительно упростились в масштабировании, Kubernetes стал ключевым элементом контейнерной революции.

Что такое оркестровка контейнеров?

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

Что такое Kubernetes?

Kubernetes - это проект с открытым исходным кодом, который стал одним из самых популярных инструментов оркестровки контейнеров; он позволяет развертывать многоконтейнерные приложения и управлять ими в любом масштабе. Хотя на практике Kubernetes чаще всего используется с Docker, самой популярной платформой для контейнеризации, он также может работать с любой контейнерной системой, которая соответствует стандартам Open Container Initiative (OCI) для форматов образов контейнеров и среды выполнения. А поскольку Kubernetes является открытым исходным кодом, с относительно небольшими ограничениями на то, как его можно использовать, его может свободно использовать любой, кто хочет запускать контейнеры, где угодно, где они хотят их запускать - локально, в общедоступном облаке или и то, и другое. .

Google и Kubernetes

Kubernetes начал свою жизнь как проект внутри Google. Это преемник, но не прямой потомок Google Borg, более раннего инструмента управления контейнерами, который Google использовал для внутренних целей. Google открыла исходный код Kubernetes в 2014 году, отчасти потому, что архитектура распределенных микросервисов, которую поддерживает Kubernetes, упрощает запуск приложений в облаке. Google рассматривает внедрение контейнеров, микросервисов и Kubernetes как потенциально способное привлечь клиентов к своим облачным сервисам (хотя Kubernetes, безусловно, также работает с Azure и AWS). Kubernetes в настоящее время поддерживается Cloud Native Computing Foundation, которая сама находится под эгидой Linux Foundation.

Kubernetes против Docker и Kubernetes против Docker Swarm

Kubernetes не заменяет Docker, а дополняет его. Однако Kubernetes ли заменить некоторые из технологий более высокого уровня, которые возникли вокруг Докер.

Одна из таких технологий - Docker Swarm, оркестратор, связанный с Docker. По-прежнему можно использовать Docker Swarm вместо Kubernetes, но Docker Inc. решила сделать Kubernetes частью выпусков Docker Community и Docker Enterprise в будущем.

Не то чтобы Kubernetes - это прямая замена Docker Swarm. Kubernetes значительно сложнее Swarm и требует больше работы для развертывания. Но опять же, эта работа призвана обеспечить большую отдачу в долгосрочной перспективе - более управляемую и отказоустойчивую инфраструктуру приложений. Для разработки и небольших кластеров контейнеров Docker Swarm представляет собой более простой выбор. 

Kubernetes против Mesos

Еще один проект, о котором вы, возможно, слышали как конкурент Kubernetes, - это Mesos. Mesos - это проект Apache, изначально созданный разработчиками из Twitter; на самом деле это рассматривалось как ответ на проект Google Borg.

На самом деле Mesos предлагает услуги оркестрации контейнеров, но его амбиции выходят далеко за рамки этого: он стремится стать своего рода облачной операционной системой, которая может координировать как контейнерные, так и неконтейнерные компоненты. С этой целью в Mesos может работать множество различных платформ, включая сам Kubernetes.

Архитектура Kubernetes: как работает Kubernetes

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

Кластеры Kubernetes

Абстракция Kubernetes самого высокого уровня, кластер , относится к группе машин, на которых работает Kubernetes (которое само является кластеризованным приложением), и контейнеры, которыми он управляет. Kubernetes кластер должен иметь хозяина , систему , что команды и контролирует все другие машины Kubernetes в кластере. Кластер Kubernetes с высокой степенью доступности реплицирует объекты мастера на нескольких машинах. Но только один мастер одновременно запускает планировщик заданий и диспетчер-контроллер.

Узлы и поды Kubernetes

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

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

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

Сервисы Kubernetes

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

Сервис в Kubernetes описывает, как к данной группе подов (или другим объектам Kubernetes) можно получить доступ через сеть. Как сказано в документации Kubernetes, модули, составляющие серверную часть приложения, могут измениться, но интерфейсная часть не должна знать об этом или отслеживать это. Услуги делают это возможным.

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

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

Kubernetes Ingress

Сервисы Kubernetes считаются работающими в кластере. Но вы захотите иметь доступ к этим сервисам из внешнего мира. Kubernetes имеет несколько компонентов, которые облегчают это с разной степенью простоты и надежности, включая NodePort и LoadBalancer, но наиболее гибким компонентом является Ingress. Ingress - это API, который управляет внешним доступом к службам кластера, обычно через HTTP.

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

Панель управления Kubernetes

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

Видео по теме: Что такое Kubernetes?

В этом 90-секундном видео вы узнаете о Kubernetes, системе с открытым исходным кодом для автоматизации контейнерных приложений, от одного из изобретателей технологии, Джо Беда, основателя и технического директора Heptio.

Преимущества Kubernetes

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

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

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

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

Kubernetes упрощает развертывание предварительно настроенных приложений с помощью диаграмм Helm

Менеджеры пакетов, такие как APT Debian Linux и Pip Python, избавляют пользователей от необходимости вручную устанавливать и настраивать приложение. Это особенно удобно, когда приложение имеет несколько внешних зависимостей.

По сути, Helm - это менеджер пакетов для Kubernetes. Многие популярные программные приложения должны работать в Kubernetes как группа взаимозависимых контейнеров. Helm предоставляет механизм определения, «диаграмму», которая описывает, как приложение или сервис могут быть запущены как группа контейнеров внутри Kubernetes.

Вы можете создавать свои собственные диаграммы Helm с нуля, и вам, возможно, придется, если вы создаете настраиваемое приложение для внутреннего развертывания. Но если вы используете популярное приложение с общим шаблоном развертывания, есть большая вероятность, что кто-то уже составил для него диаграмму Helm и опубликовал ее в официальном репозитории диаграмм Helm. Еще одно место для поиска официальных диаграмм Helm - это каталог Kubeapps.com.

Kubernetes упрощает управление хранилищем, секретами и другими ресурсами, связанными с приложением.

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

Kubernetes предоставляет абстракции, позволяющие контейнерам и приложениям работать с хранилищем так же независимо, как и другие ресурсы. Доступ ко многим распространенным типам хранилищ, от томов Amazon EBS до простых старых общих ресурсов NFS, можно получить через драйверы хранилища Kubernetes, называемые томами. Обычно тома привязаны к определенному модулю, но подтип тома, называемый «постоянный том», может использоваться для данных, которые должны храниться независимо от любого модуля.

Контейнеры часто нуждаются в работе с «секретами» - такими учетными данными, как ключи API или пароли служб, которые вы не хотите жестко закодировать в контейнере или открыто спрятать на томе диска. Хотя для этого доступны сторонние решения, такие как секреты Docker и HashiCorp Vault, Kubernetes имеет свой собственный механизм для обработки секретов в исходном виде, хотя его нужно настраивать с осторожностью. Например, Etcd должен быть настроен для использования SSL / TLS при отправке секретов между узлами, а не в виде обычного текста. 

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

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

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

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

Где взять Kubernetes