Простыми словами о Kubernetes

24 августа 2023

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

Kubernetes — что это такое

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

K8s открывает широкие возможности работы с контейнерами и содержит в себе множество функций и инструментов для их реализации. Совокупность средств управления контейнерами и процессов автоматизации образуют понятие «оркестрация». Оно описывает то, как между собой должны вести себя компоненты системы.

Коротко об истории создания

Kubernetes является проектом Google, созданным в 2014 году под названием Project Seven (данное название отсылает к героине сериала Star Trek). Его разработка велась с учетом предыдущих ошибок и накопленного опыта, который компания приобрела при создании и использовании Borg — еще одного продукта Google, предшественника k8s, созданного для тех же целей, но используемого по большей части только внутри компании-разработчика. 

Часто Kubernetes называют k8s — это сокращение от Kubernetes. K_ubernete_s — между K и S находится 8 букв, отсюда и пошло данное сокращение. В Google понимали, что контейнеризация становится очень важной составляющей управления приложениями, поэтому выпустили свое новое решение в качестве открытого исходного кода, передав разработанную платформу в руки Cloud Native Computing Foundation (CNCF) и дав возможность разработчикам всего мира использовать и развивать k8s.

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

Для чего нужен Kubernetes

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

Самыми главными задачами Kubernetes являются:

  • развертывание приложений. K8s может запускать приложения, производить их перезагрузку и остановку;
  • обработка ошибок приложений. Во время работы приложений k8s следит за их состоянием. Если в работе какого-либо приложения замечена ошибка, Kubernetes может перезагрузить или остановить его, скрыв видимость данного приложения от клиента до момента восстановления работоспособности;
  • распределение нагрузки. K8s может осуществлять логическую группировку контейнеров, чтобы минимизировать потребление ресурсов. Также Kubernetes распределяет нагрузку между контейнерами, тем самым оптимизируя работу отдельных приложений и всей системы целиком;
  • масштабирование. K8s может самостоятельно производить масштабирование, то есть запускать одно приложение сразу на нескольких хостах, чтобы повысить надежность работы и уменьшить нагрузку на один хост.

Архитектура и компоненты

Nodes

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

  • Master-нода — нода администрирования, контролирующий узел системы. Нода такого типа управляет кластером k8s. Для этого на ней разворачиваются следующие компоненты:
    • kube-controller-manager — компонент, приводящий в работу контроллеры, которые включают в себя: реакцию на сбой узла, поддержку корректного количества подов для каждого объекта, связку подов и сервисов, создание учетных записей и API-токенов для новых пространств имен;
    • kube-apiserver — сервер, предоставляющий доступ для работы с API Kubernetes; 
    • kube-scheduler — планировщик, определяющий на каких узлах разворачивать те или иные поды в зависимости от расположения и требовательности к ресурсам;
    • etcd — распределенное хранилище. Работает в формате «ключ-значение» и содержит данные о состоянии всего кластера;
  • Worker-нода — отдельная среда, предоставляющая ресурсы для работы подов и приложений. Работа таких нод не представляется без компонентов:
    • kubelet — агент Kubernetes. Служба, управляющая работой ноды и ее содержимого: запуск, остановка и поддержка подов и контейнеров;
    • kube-proxy — компонент сетевой активности, балансирующий нагрузку и осуществляющий связность подов.

Pods

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

Контроллеры

  • ReplicaSet

Объект описания и контроля за несколькими репликами подов. Несколько реплик увеличивают отказоустойчивость приложения.

  • Deployment

Deployment-контроллер (контроллер развертывания) осуществляет обновление нод и наборов реплик (экземпляров) на основе информации и алгоритмов, хранящихся в данном контроллере.

  • StatefulSet

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

  • DaemonSet

Объект контроля запуска единственного экземпляра пода в выбранной ноде (или наборе нод).

  • Job/CronJob

Контроллеры запланированного запуска подов и корректности завершения их работы. Job — однократный запуск, CronJob — запуск по расписанию.

  • Service

Абстрактное средство, позволяющее осуществлять сетевой доступ к приложению, поду или группе подов. Также Service балансирует трафик между такими точками доступа.

Принципы работы Kubernetes

Исходя из понятия контейнеризации, контейнеры хранят в себе приложения и различные ресурсы, которые нужны для работы этого приложения, например, библиотеки. Доступ к отдельному контейнеру осуществляется с помощью IP-адреса, а для взаимодействия между контейнерами они помещаются в поды. Затем поды собираются в группы и помещаются в ноды (группа также может состоять и из одного пода) — виртуальные или физические машины.

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

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

Kubernetes является эффективной средой для обеспечения концепции CI/CD (непрерывная интеграция и поставка). Но, помимо k8s, на рынке представлены и другие решения. Так почему же большинство команд разработки выбирает именно Kubernetes?

  • Ориентация на приложения

K8s ориентирован именно на приложения, в то время как виртуальные машины — на операционные системы.

  • Удобство работы с распределенными ресурсами

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

  • Понятная документация и постоянно растущее активное сообщество

На официальном сайте kubernetes.io представлена документация, а также множество примеров использования k8s. Кроме того, быстрорастущее сообщество пользователей продукта постоянно делится своим опытом и готово прийти на помощь при возникновении вопроса.

  • Гибкое конфигурирование приложений и автоматизированный процесс обновлений

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

  • Безопасное тестирование

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

  • Поддержка контейнеров разных типов

Kubernetes поддерживает различные среды для запуска контейнеров (Kubernetes containers): Docker, containerd, CRI-O и любые реализации Kubernetes CRI (Container Runtime Interface).

Возможности Kubernetes

  • Оркестрация хранилища

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

  • Безопасное распределение нагрузки и трафика

Kubernetes самостоятельно следит за распределением нагрузки на различные составляющие системы и распределяет нагрузку и трафик между репликами.

  • Безопасность и конфиденциальность

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

  • Самовосстановление

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

Установка и настройка Kubernetes

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

Преимущества использования:

  • низкая стоимость;
  • быстрая настройка в личном кабинете;
  • возможность выбора локации (Россия, Европа, США);
  • высокая отказоустойчивость.

Функционал Kubernetes:

  • создание кластеров Kubernetes с разными параметрами;
  • создание High Availability Master ноды (дополнительно создаются резервные копии Master ноды для обеспечения отказоустойчивости кластера);
  • при создании кластеров создается роутер (для распределения входящих клиентских запросов).

Через панель управления ОБИТ вы можете создавать и удалять кластеры и узлы. Для остальных задач необходимо воспользоваться инструментарием командной строкой, разработанным для работы с кластерами — kubectl.

Для того, чтобы установить kubectl на Ubuntu, используйте следующий набор команд:

sudo apt-get update && sudo apt-get install -y apt-transport-https

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add —

echo «deb https://apt.kubernetes.io/ kubernetes-xenial main» | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update

sudo apt-get install -y kubectl

Для подключения к вашему кластеру k8s через командную строку необходимо загрузить файл конфигурации:

export KUBECONFIG=<путь к файлу>

Чтобы понять, что kubectl настроен правильно, введите команду:

kubectl cluster-info

Если в ответ вы получили URL, значит kubectl сконфигурирован корректно. Если же вы получили сообщение об ошибке, то либо kubectl настроен неверно, либо он не может подключиться к кластеру Kubernetes:

The connection to the server <server-name:port> was refused — did you specify the right host or port?

Для детальной диагностики ошибок воспользуйтесь следующей командой:

kubectl cluster-info dump

Заключение

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

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