Что такое Kubernetes и как работает инструмент

Модуль 2

Контейнеры и экосистема Kubernetes

Тема 3

Введение в Kubernetes

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

Предпринималась не одна попытка решить эту проблему: Docker Compose, Docker Swarm, Nomad, но справедливо будет сказать, что по разным причинам лидером стал Kubernetes.

Что такое Kubernetes

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

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

Словарь Kubernetes

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

Итак, рассмотрим инфраструктурную терминологию Kubernetes. На схеме ниже представлен типовой кластер Kubernetes:

На мастере установлен «контрольный пункт» (control plane), несущий на себе обязательные функции по управлению Kubernetes:

Kubernetes API Server, входящее окно для запросов на сервисные функции: развертывание контейнеров и др.;
kube-scheduler, который распределяет приложения по воркерам;
kube-controller-manager, выполняющий сервисные функции, такие как мониторинг рабочих узлов, обработка ошибок и т. д.;
etcd, распределенное хранилище данных, которое сохраняет конфигурацию кластера.

На каждом воркере установлен набор компонентов, осуществляющих общение с мастером или управление приложениями:

Docker или другая среда;
Kubelet — сервис, обменивающийся данными с сервером API и управляющий контейнерами;
kube-proxy, балансирующий трафик между компонентами приложения.

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

Чтобы развернуть приложение в Kubernetes, необходимо упаковать его в один или несколько образов контейнеров, отправить их в реестр (например, Docker Hub), а затем описать развертывание с помощью файла в специальном формате YAML.

Описание содержит сведения о том:

откуда брать образы контейнеров;
сколько выделять ресурсов (RAM, CPU);
как связывать их друг с другом;
какие порты открывать;
кто имеет доступ;
какие команды выполнять при запуске или остановке контейнера.

Это исчерпывающая инструкция, поддерживающая сложнейшие развертывания.

После отправки YAML в Kubernetes система определит наличие ресурсов на воркерах, развернет контейнеры и обеспечит их беспрерывный мониторинг через Kubelet-сервис на воркере. Если контейнер перестанет реагировать нормально (критерии нормальности также конфигурируются), Kubernetes автоматически переразвернет приложение на другом узле.

Уникальные характеристики Kubernetes

Почему Kubernetes стал популярным? Во многом из-за своих уникальных свойств:

Эффективное использование оборудования. В Kubernetes приложение отделено от инфраструктуры и определяется отдельно.
Приложения буквально не знают о том, что происходит вне их ответственности. Поэтому они могут свободно перемещаться по кластеру, что позволяет оркестратору максимально плотно «упаковать» их на вычислительных ресурсах.
Богатая расширяемая функциональность взаимодействия мастера с приложениями. Контрольный слой Kubernetes постоянно отслеживает то, что происходит с приложениями, контейнерами и инфраструктурой. Даже в базовом наборе он предоставляет полноценный инструментарий для анализа аварийных ситуаций.
Автоматическое масштабирование и восстановление. Настраиваемые метрики, на основе которых Kubernetes может вынести решение о выделении дополнительных ресурсов или аварийном восстановлении приложения.
Активное и дружное сообщество, включающее в себя лидеров индустрии.

Различия IaaS и PaaS Kubernetes: преимущества и вопросы

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

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

Давайте посмотрим на практических примерах, как работает Kubernetes в PaaS режиме.

Развертывание приложения на Managed Kubernetes

Основы сетевой связности Kubernetes, и как кластер K8s работает с платформой VK

CI/CD Kubernetes