Основные функции

Управление узлами осуществляется с помощью модуля node-manager, основные функции которого:

  1. Управление несколькими узлами как связанной группой (NodeGroup):
    • Возможность определить метаданные, которые наследуются всеми узлами группы.
    • Мониторинг группы как группы (группировка узлов на графиках по группам, группировка алертов о недоступности узлов, алерты о недоступности N узлов или N% узлов из группы).
  2. Систематическое прерывание работы узлов — Chaos monkey. Предназначено для верификации отказоустойчивости элементов кластера и запущенных приложений.
  3. Установка/обновление и настройка ПО узла (containerd, kubelet и др.), подключение узла в кластер:
    • Установка операционной системы (смотри список поддерживаемых ОС) вне зависимости от типа используемой инфраструктуры (в любом облаке или на любом железе).
    • Базовая настройка операционной системы (отключение автообновления, установка необходимых пакетов, настройка параметров журналирования и и.т.).
    • Настройка nginx (и системы автоматического обновления перечня upstream’ов) для балансировки запросов от узла (kubelet) по API серверам.
    • Установка и настройка CRI containerd и Kubernetes, включение узла в кластер.
    • Управление обновлениями узлов и их простоем (disruptions):
      • Автоматическое определение допустимой минорной версии Kubernetes группы узлов на основании ее настроек (указанной для группы kubernetesVersion), версии по умолчанию для всего кластера и текущей действительной версии control plane (не допускается обновление узлов в опережение обновления control plane).
      • Из группы одновременно производится обновление только одного узла и только если все узлы группы доступны.
      • Два варианта обновлений узлов:
        • обычные – всегда происходят автоматически;
        • требующие disruption (например, обновление ядра, смена версии containerd, значительная смена версии kubelet и пр.) – можно выбрать ручной или автоматический режим. В случае, если разрешены автоматические disruptive-обновления, перед обновлением производится drain узла (можно отключить).
    • Мониторинг состояния и прогресса обновления.
  4. Автомасштабирование кластера и заказ виртуальных машин в облаке (через поддерживаемый cloud provider):
    • Создание, запуск и подключение виртуальных машин к кластеру выполняется в автоматическом режиме.
    • Для группы узлов можно задать диапазон количества виртуальных машин.
  5. Управление Linux-пользователями на узлах.

Управление узлами осуществляется через управление группой узлов (node group), где каждая такая группа выполняет определенные для нее задачи. Примеры групп узлов по выполняемым задачам:

  • группы master-узлов;
  • группа узлов маршрутизации HTTP(s)-трафика (front-узлы);
  • группа узлов мониторинга;
  • группа узлов приложений (worker-узлы) и т.п.

Узлы в группе имеют общие параметры, и настраиваются автоматически в соответствии с параметрами группы. Deckhouse масштабирует группы, добавляя, исключая и обновляя ее узлы. Допускается иметь в одной группе как облачные так и bare metal (статичные) узлы. Это позволяет получать узлы на физических серверах, которые могут масштабироваться за счет облачных узлов (гибридные кластеры).

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

Поддерживаются также следующие сервисы Managed Kubernetes (может быть доступен не весь функционал сервиса):

  • Google Kubernetes Engine (GKE).

Типы узлов

Поддерживаются следующие типы узлов:

  • CloudEphemeral — такие узлы автоматически заказываются, создаются и удаляются в настроенном облачном провайдере.
  • CloudPermanent — отличаются тем, что их конфигурация берется не из custom resource nodeGroup, а из специального ресурса <PROVIDER>ClusterConfiguration (например, AWSClusterConfiguration для AWS). Также, важное отличие узлов в том, что для применения их конфигурации необходимо выполнить dhctl converge (запустив инсталлятор Deckhouse). Примером CloudPermanent-узла облачного кластера является мaster-узел кластера.
  • CloudStatic — узел созданный вручную (статический узел), размещенный в том же облаке, с которым настроена интеграция у одного из облачных провайдеров. На таком узле работает CSI и такой узел управляется cloud-controller-manager’ом. Объект Node кластера обогащается информацией о зоне и регионе, в котором работает узел. Также, при удалении узла из облака, соответствующий ему Node-объект будет удален в кластере.
  • Static — статический узел, размещенный на сервере bare-metal или виртуальной машине. Узел не управляется cloud-controller-manager’ом, даже если включен один из облачных провайдеров.

Группировка узлов и управление группами

Группировка и управление узлами как связанной группой означает, что все узлы группы будут иметь одинаковые метаданные, взятые из custom resource’а NodeGroup.

Для узлов, объединенных в группу, доступен мониторинг группы:

  • группировка параметров узлов на графиках группы;
  • автоматическая группировка алертов о недоступности узлов;
  • алерты о недоступности N или N% узлов группы и т.п.

Автоматическое развертывание, настройка и обновление узлов Kubernetes

Поддерживаемые платформы и версии Kubernetes

Автоматическое развертывание (в static/hybrid – частично), настройка и дальнейшее обновление ПО работает на любых кластерах, независимо от его размещения в облаке или на bare metal.

Поддерживаемая версия Kubernetes указывается в параметрах с точностью до минорной версии. Если версия не будет указана, то модуль node-manager будет использовать версию, указанную в параметрах control plane.

Развертывание узлов Kubernetes

Deckhouse автоматически развертывает узлы кластера, выполняя следующие идемпотентные операции:

  • Настройка операционной системы, оптимизация для работы с containerd и Kubernetes:
    • Устанавливаются требуемые пакеты из репозиториев дистрибутива.
    • Настраиваются параметры работы ядра, параметры журналирования, ротация журналов и другие параметры системы.
  • Установка требуемых версий containerd и kubelet, включение узла в кластер Kubernetes.
  • Настройка Nginx и обновление списка upstream для балансировки запросов от узла к Kubernetes API.

Поддержка актуального состояния узлов

Поддержание узлов кластера в актуальном состоянии в пределах указанной в настройках минорной версии Kubernetes. Системой автоматического обновления поддерживается два типа обновлений:

  • Обычные. Всегда происходят автоматически, не приводят к остановке или перезагрузке узла.
  • Требующие прерывания (disruption) - например, обновление ядра, смена версии containerd, значительная смена версии kubelet и т.д. Для этого типа обновлений можно выбрать ручной или автоматический режим. В автоматическом режиме перед обновлением выполняется корректная приостановка работы узла (drain) и только после этого выполняется обновление.

В один момент времени производится обновление только одного узла из группы, и только когда все узлы группы доступны.

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

Заказ узлов в поддерживаемых облаках

У каждого поддерживаемого cloud provider’а существует возможность автоматического заказа узлов. Для этого необходимо указать требуемые параметры для каждого узла или для группы узлов.

В зависимости от провайдера этими параметрами могут быть:

  • тип узлов или количество ядер процессора и объем оперативной памяти;
  • размер диска;
  • настройки безопасности;
  • подключаемые сети;
  • и другое…

Создание, запуск и подключение виртуальных машин к кластеру выполняется автоматически.

Автомасштабирование узлов

Когда для заказа узлов используется группа, существуют два варианта указания количества узлов в группе:

  • Фиксированное количество узлов. В этом случае Deckhouse будет поддерживать указанное количество узлов, например, заказывая новые в случае выхода из строя старых узлов.
  • Диапазон в виде минимального и максимального значения количества узлов. Указание диапазона включает автомасштабирование узлов кластера, которое срабатывает при дефиците ресурсов и состоянии Pending у Pod’ов. Если создать несколько групп узлов с разными характеристиками и приоритетом, то при автоматическом масштабировании будет учитываться приоритет группы (в первую очередь будет масштабироваться группа с бОльшим приоритетом).

Chaos monkey

Инструмент (включается у каждой из NodeGroup отдельно), позволяющий систематически вызывать случайные прерывания работы узлов. Предназначен для проверки элементов кластера, приложений и инфраструктурных компонентов на реальную работу отказоустойчивости.