Одной из основных тенденций IT-разработок является контейнеризация, а самой востребованной автоматической системой управления этим процессом – Kubernetes. ПО имеет открытый исходный код от Гугл* и отличается от разработок других компаний большой мощностью, высокой безопасностью и гибкостью. Группа специалистов компании «Интегрус» предлагают услуги по установке, настройке и развертыванию Kubernetes.
Платформа позволяет автоматизировать управление контейнерами приложений на различных ОС (Linux, CentOS, Ubuntu). Кластеры подключается к API высокоуровневому программному интерфейсу. Это позволяет проводить системную группировку контейнеров, балансировку нагрузки и активацию задач из множества приложений одномоментно.
Установка и настройка Kubernetes подходит большими компаниями или командами, требовательными к значительным объемам производственной среды. При этом платформа предъявляет высокие требования к приложениям, которые функционируют как микросервисы.
Из-за значительного расхода ресурсов использовать кластер при запуске в малых проектах не представляется выгодным. Установка Kubernetes производится при помощи готовых решений либо вручную. Составляющие архитектуры платформы:
- Nodes (узлы, ноды) – физические либо виртуальные машины с компонентами, позволяющие использовать контейнеризацию. Ноды формируют Kubernetes кластер. Управление менеджером контроллеров и планировщиком возлагается на мастер-ноду, которая отвечает за взаимодействие через сервер API и содержит хранилище конфигураций, метаданных и статусов объектов.
- Namespace – под пространством имен понимаются виртуальные кластеры, которые запускаются на общем физическом кластере. Объект разграничивает ресурсы внутри кластера между проектами и командами.
- Pod (под) – модуль, состоящий из нескольких либо одного контейнера, управляющий совместным развертыванием на ноде. Требование группировки контейнеров обязательно в случае их взаимозависимости и запуска в общей ноде. Под увеличивает быстроту отклика в процессе взаимодействия.
- ReplicaSet (набор экземпляров, реплик) – отвечает за контроль и описание подов, повышая отказоустойчивость и упрощая масштабирование. Для создания объекта используется Deployment.
- Deployment – объект «развертывание» сохраняет описание подов, реплик, алгоритмов, используемых для замены при изменении параметров. Для выполнения декларативных обновлений на нодах и наборах реплик используется контроллер развертывания.
- StatrfulSet – набор состояний для развертывания и управления подами, отличается от набора реплик или развертывания предсказуемым значением.
- DaemonSet – данный набор ответственен за запуск единственного экземпляра конкретного пода в выбранной ноде (нодах).
- Job или CronJob – контроллеры позволяют однократный или по расписанию запускать задания в определенном объеме. Регулируют и запускают поды, контролируя процесс завершения работы.
- Label и Selector – объекты обеспечивают полноценное функционирование Kubernetes, не являясь самостоятельными. Они маркируют ресурсы, упрощая манипуляции, выбор и фильтрацию объектов.
- Service – сетевой сервис для распределения трафика и нагрузки на поды.
Развертывание Kubernetes осуществляется на основе Линукс-контейнеров с подробным описанием о количестве требуемых контейнеров и ресурсов под них. Непосредственное развертывание выполняется на рабочих нодах.
Важно, что совокупность контейнеров в рамках одного пода связана сетью между собой в общем локальном хосте. Невозможно использовать один и тот же порт. То есть по сути Kubernetes работает с подами, а не докер-контейнерами.
Задачами платформы являются:
- работа с контейнерами (развертывание, запуск конфигурации, перезапуск, перемещение и др.);
- масштабирование ряда контейнеров на различных хостах;
- балансировка контейнеров через API для определения пулов, их контейнеров и равномерность нагрузки.
Преимущества Kubernetes:
- Работа ведется через собственные айпи-адреса либо с использованием общего имени для большой группы. Регулируется нагрузка на сетевой трафик и поддерживается стабильность его развертывания после распределения.
- Управление хранилищами в автоматическом режиме.
- Откат к предыдущей версии. Возможность изменять конфигурацию, делать откаты к прошлой версии в случае нарушения стабильности развертывания.
- Автоматическое распределение пространства и оперативной памяти их кластера nod для обеспечения всех контейнеров рабочим ресурсом.
- Безопасное управление настройками и паролями без необходимости обновления контейнеров.
- Самостоятельное восстановление контейнеров, поврежденных в случае сбоя или переставших отвечать на запросы. Создание и запуск осуществляются без изменения пода.
Несмотря на то, что платформа представляет собой эффективный инструмент, решение требует дополнительной работы по настройке, например, когда нужна обратная совместимость API или решение вопросов миграции схем БД. В Kubernetes используются императивные команды для создания, модификации и удалению ресурсов, но в случае критических задач их применение нежелательно.
При установке кластера Kubernetes рекомендуется придерживаться официальной документации. При этом количество оперативки нужно увеличить до 4Гб, т.к. меньший объем провоцирует «глюки». В конечном итоге работа виртуальных машин напрямую связана с конкретными потребностями и нагрузками.
Услуги по развертыванию кластера Kubernetes требуют предварительной подготовки машин. Все они должны иметь доступ между собой по сети, связь с интернетом и чистую операционную систему. Команды по установке выполняются через root-права, если иного не указано в мануале.
Установка Ingress Kubernetes
Рассматривая принцип работы, важно не путать два понятия:
- Ingress – суть кластера, описывающего конфигурации для контроллера.
- Ingress Controller – дополнение, представляющее собой конфигурацию всех Ingress, и дающее доступ к внешним приложениям.
Реализовать контроллер можно посредством различного софта, но чаще всего используется контроллер на основе Nginx, являющийся самым простым. Обычно в Kubernetes при установке Ingress Controller Nginx вешаются на узлы, имеющие внешние IP-адреса, и используются как точки для подключения к различным сервисам. Контроллеры способны как обрабатывать трафик, так и использоваться за внешним балансером. Использование Nginx решает проблему безопасности при размещении Ingress в сети.
Работает Ingress только на седьмом уровне OSI-модели, для остальных следует применять иные способы публикации. Nginx дает возможность гибкого управления запросов по различным доменам.
Установка кластеров специалистами осуществляется вручную, без использования готовых реализаций. Однако в Kubernetes установка Ingress Nginx содержит ряд основным моментов, выполнения которых достаточно для публикации ресурса в кластере.
- Настройка предварительно загруженных сертификатов SSL/TLS в кластер. Сертификат Wildcard устанавливается в качестве дефолтного под те домены, где нет персонализации сертификатов.
- Установка Cert-manage. Утилита отвечает за получение и продление сертификатов, выполняет интеграцию с Ingress Controller.
- Для отладки работы контроллера требуется получить доступ к логам и файлам. Логи, а также конфигурацию внутри контроллера для удобства чтения проще выгружать в отдельный файл.
- Определение конфигурации Nginx. Задание требуемых параметров для работы Ingress производится через configmap.
Для установки требуется наличие одного или нескольких серверов с ОС Ubuntu 16.04 или Centos 7.
Установка Kubernetes Ubuntu
Специалисты «Интегруса» выполняют установку Kubernetes Ubuntu. Перед началом установки ОС требуется не создавать либо отключить раздел swap. Начало работы с Kubernetes начинается с установки контейнеров Docker. Лучше всего «стартовать» с версии, хранящейся в репозитории, так как она стабильна и заранее протестирована разработчиками.
Чтобы установить контейнеры на Убунту, требуется обладать правами суперпользователя. За счет команд можно работать с самыми последними версиями контейнеров.
Настроить систему:
- Задать имена для узлов.
- Установить компоненты (пакеты, утилиты).
- Разово отключить файл подкачки.
- Загрузить модули в ядро и применить новые параметры.
Настроить брандмауэр, создав разные наборы правил для нод – мастера и рабочей.
Установить и настроить Doker.
Установить компоненты из репозитория. Необходимо запретить обновление компонентов, установленных ранее.
Создать кластер, настроив контроль-панель главной ноды. После этого можно создавать поды, службы и различные развертывания.
Установка Kubernetes CentOS
Установка контейнеров требует выполнения в консоли обязательных команды и установки компонент управления кластером. Существуют три утилиты:
- kubeadm – для создания и настройки объектов;
- kubelet – для запуска контейнера на хосте;
- kubectl – для настройки составных компонент кластера.
При установке CentOS 7 получить корректный доступ к файловой системе для контейнеров можно при помощи команды setenforce 0. Также следует проверить использование единого драйвера cgroup для kubelet и контейнера.
Настройка Kubernetes
Провести инициализацию кластера. Это выполняется при помощи сетевых плагинов, например, Flannel. Если на консоли отображаются ошибки или предупреждения, то ошибки требуется немедленно устранять, а предупреждения, не касающиеся окружения production, можно игнорировать.
Если действия корректны на экране появляется команда для присоединения других нодов к хосту. Она зависит по внешнему виду от структуры кластера. Важно сохранить ее для дальнейшего использования. Все последующие команды выполняются от имени пользователя, управляющего кластером.
Настроить CNI, чтобы получить возможность запуска приложений. Сетевой интерфейс контейнера устанавливает взаимодействие и управляет контейнерами внутри Kubernetes. Создать CNI можно при помощи специальных плагинов.
Добавить узлы в Kubernetes. Для этого через SSH производится подключение к серверу. На него устанавливаются Doker, Kubeadm и Kubelet. До момента исполнения команды kubeadm init, остается возможность редактирования.
Получить токен авторизации. Срок его действия составляет сутки, после чего надо добавить в кластер новый нод или при помощи команды создать новый ключ.
Учесть дополнительные настройки, например, для дефолтной конфигурации.
Проверить запуск и правильную работу кластера.
Только после выполнения всех этих операций установка считается завершенной, и можно приступить к настройке Kubernetes под веб-приложения. Это выполняется за счет установки контроллера Nginx Ingress либо диспетчера пакетов helm.
Для Kubernetes установка Windows требует внимательного изучения документации. Контейнерная технология долгое время не была востребована в данной ОС, но теперь ситуация изменилась. Корректировки документации происходят с интервалом в один-два месяца.
При работе с контейнерами Микрософт необходимо постоянно сверяться с Windows Container Version Compatibility. Для корректного запуска контейнера используется LTS версия Windows, в противном случае его придется постоянно пересобирать. С другой стороны, постоянное изменение позволяет работать только на свежем софте, не привязываясь к универсальному Dokerlife, рассчитанному на все системы Windows.
Эти нюансы справедливы для тех контейнеров, запуск которых производился в режиме process isolation. Режим Hyper-V позволяет запускать контейнеры со сборкой в любой версии, в том числе линкусовые контейнеры, но тогда работа с Kubernetes невозможна.
Сложность настройки Kubernetes компенсируется созданием совершенного инструмента оркестирирования, позволяющего автоматизировать развертывание контейнеров и упростить работы с их массивами.
* — компания нарушает законы РФ.