Kubernetes для начинающих:
как он появился, что умеет
и из чего состоит

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

Так как это программа с открытым исходным кодом, почти все современные облачные сервисы предлагают свою платформу на основе Kubernetes (PaaS) или инфраструктуру как услугу (IaaS), на которой Kubernetes может быть развернут как сервис. Многие поставщики также предоставляют собственные фирменные дистрибутивы Kubernetes.

Немного истории Кубернетес

Название платформы появилось из сочетания древнегреческого κυβερνήτης и этимологического корня слова «кибернетика». Первое значение слова κυβερνήτης — кормчий, пилот, рулевой; второе — губернатор, правитель. Изначально «Кормчий» был разработан Google для внутренних нужд компании. На его создание сильно повлиял гугловский кластерный менеджер Borg, из которого были взяты основы, дизайн и... ведущие участники проекта. Borg был написан на C ++, но основным языком программирования Кубернетес стал Go. Borg — так называлась группа инопланетян из фильма «Звездный путь» (Star Trek).

На логотипе Кубернетес изображен штурвал корабля (намек на штурвал контейнеровоза) с семью спицами-рукоятками, отсылающими к первоначальному названию проекта «Project Seven», которое было дано платформе в честь «Седьмой из девяти» — дружелюбного персонажа «Стартрека» из группы Borg. Эта героиня фильма была превращена из нечеловеческого кибернетического разума в индивидуальное и дружественное к людям состояние. Нумероним Кубернетес — K8s (k-eights), где число 8 заменяет восемь символов между K и s.

Исходный код Кубернетес был открыт Google в 2014 году, лицензия Apache License 2.0, и с тех пор его сервисы, поддержка и инструменты широко доступны, а экосистема постоянно расширяется. Разработка этого программного обеспечения основывается на большом опыте работы Google с масштабными рабочими нагрузками и лучших практиках сообщества. После разработки «Кормчий» был передан Фонду развития облачных вычислений (Cloud Native Computing Foundation, about), у которого ныне является флагманским проектом. Сегодня технология стала стандартом разработки высоконагруженных проектов за счет удобства и широкой функциональности.

Что делает Kubernetes

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

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

Kubernetes может:

Мониторить сервисы и обнаруживать контейнеры с высоким трафиком, используя DNS-имя или собственный IP-адрес. А затем включить балансировку нагрузки, распределяя сетевой трафик для стабильного развертывания.
Наиболее эффективно распределить ресурсы узлов, которые вы предоставили системе для запуска контейнерных задач.
Автоматически создать новый контейнер для развертывания и удалить существующий, распределив его ресурсы в новый контейнер.
Автоматически смонтировать хранилище (выбранное вами конкретное локальное или облачное) и управлять им.
Контролировать работу контейнеров: перезапустить отказавшие, завершить работу тех, которые не прошли определенную вами проверку работоспособности и заменить их.
Хранить конфиденциальную информацию и управлять ей, а также конфигурацией приложения. При развертывании и обновлении конфигурации стека пароли, OAuth-токены и ключи SSH не будут раскрыты, а образы контейнера не будут изменены.

Компоненты Kubernetes

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

Кластер Кубернетес (cluster Kubernetes) — это первое, с чем вы имеете дело при развертывании Кубернетес. Он состоит узлов (нод, nodes) в виде набора машин. Кластеров может быть несколько (clusters) и каждый имеет минимум одну рабочую ноду (node), которая запускает контейнеризированные приложения (containerized applications). В нодах размещены поды (pods) — компоненты приложения. Подами и нодами управляет плоскость управления (Control Plane), которая в крупных проектах для надежности может быть запущена на нескольких компьютерах, а кластер — на нескольких узлах. Управление кластерами осуществляется через инструмент командной строки Kubectl. Помимо основных компонентов в Кубернетес есть дополнения. Они используют ресурсы Kubernetes, относящиеся к пространству имен kube-system, для расширения функциональности кластера. О дополнениях можно почитать здесь.
Работы были выполнены в течение двух месяцев. В результате была стабилизирована работа всех систем виртуализации и как следствие всей инфраструктуры. Однако из-за постоянных сбоев произошло логическое повреждение данных в одной из больших БД, и сохранить эту БД не удалось. Из-за нестабильности резервные копии этой БД также оказались повреждены. Восстановление БД выполнялось вручную силами заказчика, стоимость ручного восстановления данных составила примерно 680 000 рублей. Системная ежегодная техническая поддержка как услуга, предотвращающая подобные инциденты, стоила бы заказчику около 24 000 рублей в год.

Компоненты узла

Они поддерживают работу подов и среды выполнения Кубернетес на всех узлах.

Среда выполнения контейнера — ПО для запуска контейнеров. Кубернетес поддерживает несколько таких сред: Kubernetes Container Runtime Interface (CRI), Docker, containerd, CRI-O.

Kubelet — утилита-агент, следящий за тем, чтобы контейнеры, созданные Kubernetes, были запущены в поде. Принимает набор PodSpecs и гарантирует исправность и работоспособность определённых контейнеров.

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

Компоненты плоскости управления

Эти компоненты обрабатывают события кластера и отвечают за его основные операции (например, если поле развертывания replicas не соответствует нужному количеству реплик, то автоматически запускает новый под). Могут быть запущены на любой машине кластера, но тогда на ней уже нельзя будет запустить пользовательские контейнеры.

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

Kube-apiserver — API-сервер, клиентская часть панели управления Кубернетес. предназначен для развертывания на несколько экземпляров (горизонтального масштабирования) и балансировки трафика между ними.

etcd — высоконадежное распределенное хранилище всех данных кластера в формате «ключ-значение». Может быть использовано как основное, тогда надо настроить резервное копирование.

Kube-controller-manager — запускает процессы контроллеров, которые отслеживают общее состояние кластера через API-сервер и вносят в него необходимые изменения. Существует несколько контроллеров и каждый из них выполняет свою функцию (например, реагирует на сбои узла или создает стандартные учетные записи и токены доступа API для новых пространств имен). Это контроллеры: узла (Node Controller), репликации (Replication Controller), конечных точек (Endpoints Controller), учетных записей и токенов (Account & Token Controllers).

Cloud-controller-manager — запускает циклы контроллеров, взаимодействующих с облачными провайдерами. Код, предназначенный для функциональности облачных провайдеров, и код самого Кубернетес могут разрабатываться независимо друг от друга. От облачных провайдеров зависят следующие контроллеры: узла (Node Controller), маршрутов (Route Controller), сервисов (Service Controller), тома (Volume Controller).

Заключение

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

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

Не пропустите последние новости. Подписывайтесь!