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

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

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

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

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

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

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

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

  • Google Kubernetes Engine (GKE);
  • Amazon Elastic Kubernetes Service (EKS).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Chaos monkey

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