Компоненты
ALT Orchestra и Kubernetes тесно интегрированы друг с другом.
Далее основное внимание уделяется компонентам, специфичным для ALT Orchestra.
| Компонент | Описание |
|---|---|
| apid | При взаимодействии с ALT Orchestra вы напрямую работаете с gRPC API, предоставляемым компонентом apid. Он выступает шлюзом для взаимодействия со всеми компонентами системы и перенаправляет запросы в machined. |
| containerd | Стандартная в отрасли среда выполнения контейнеров, ориентированная на простоту, надёжность и переносимость. |
| machined | Замена традиционного процесса init в Linux, разработанная специально для запуска Kubernetes и не позволяющая запускать произвольные пользовательские сервисы. |
| kernel | Ядро Linux, поставляемое с ALT Orchestra, настроено в соответствии с рекомендациями проекта Kernel Self Protection Project (KSPP). |
| trustd | Для запуска и эксплуатации кластера Kubernetes требуется определённый уровень доверия между узлами. Основанный на концепции «корня доверия» (Root of Trust), trustd отвечает за установление доверия внутри системы. |
| udevd | Управляет файлами устройств в /dev и обрабатывает действия в пользовательском пространстве при подключении и отключении устройств. |
apid
При взаимодействии с ALT Orchestra вы напрямую обращаетесь к gRPC API, предоставляемому компонентом apid.
apid выступает шлюзом для взаимодействия между всеми компонентами системы. На узлах control plane он также обеспечивает маршрутизацию запросов к нужному узлу.
Рассмотрим несколько примеров, чтобы понять работу apid.
Когда пользователь взаимодействует с компонентами ALT Orchestra через talosctl, поведение apid определяется двумя параметрами:
-eили--endpoints— указывает узел ALT Orchestra (точнее, егоapid), который будет обрабатывать соединение. Обычно это публично доступный сервер.-nили--nodes— указывает узел(ы) ALT Orchestra, которые должны ответить на запрос.
Если параметр --nodes не указан, используется первый endpoint.
Примечание: обычно
endpointуже определён в файле конфигурации ALT Orchestra. При желании там же можно определить иnodes.
Например, если пользователь хочет получить информацию о памяти через API machined, он может выполнить:
$ talosctl -e cluster.altlinux.space memory
NODE TOTAL USED FREE SHARED BUFFERS CACHE AVAILABLE
cluster.altlinux.space 7938 1768 2390 145 53 3724 6571В этом случае talosctl подключается к apid на узле cluster.altlinux.space, который затем перенаправляет запрос в API machined.
Если нужно получить информацию о памяти другого узла кластера:
$ talosctl -e cluster.altlinux.space -n node02 memory
NODE TOTAL USED FREE SHARED BUFFERS CACHE AVAILABLE
node02 7938 1768 2390 145 53 3724 6571В этом случае apid на узле cluster.altlinux.space получает запрос и пересылает его экземпляру apid на узле node02, который уже обращается к локальному API machined.
Можно запросить данные сразу у нескольких узлов, добавив несколько параметров -n или перечислив узлы через запятую:
$ talosctl -e cluster.altlinux.space -n node01 -n node02 -n node03 memory
NODE TOTAL USED FREE SHARED BUFFERS CACHE AVAILABLE
node01 7938 871 4071 137 49 2945 7042
node02 257844 14408 190796 18138 49 52589 227492
node03 257844 1830 255186 125 49 777 254556В этом случае apid на cluster.altlinux.space пересылает запросы узлам node01, node02 и node03, а их локальные экземпляры apid обращаются к своим экземплярам machined.
containerd
containerd обеспечивает среду выполнения контейнеров для запуска рабочих нагрузок в ALT Orchestra и Kubernetes.
Сервисы ALT Orchestra размещаются в пространстве имён (namespace) system, тогда как сервисы Kubernetes работают в пространстве имён k8s.io.
machined
Одной из ключевых идей ALT Orchestra является минимализм.
В ALT Orchestra роль процесса init выполняет компонент machined.
Целью было создать специализированный init, выполняющий одну задачу — запуск Kubernetes. Поэтому machined является достаточно статичным компонентом и не позволяет запускать произвольные пользовательские сервисы.
Доступны только те сервисы, которые необходимы для работы Kubernetes и управления узлом:
containerdetcdkubeletnetworkdtrustdudevd
Процесс machined отвечает за:
- применение конфигурации машины;
- обработку API-запросов;
- управление ресурсами;
- управление контроллерами системы.
kernel
Ядро Linux, входящее в состав ALT Orchestra, настроено в соответствии с рекомендациями проекта Kernel Self Protection Project (KSPP).
Цель KSPP — повысить защищённость ядра Linux путём включения дополнительных механизмов безопасности и усиления существующих защит.
trustd
Безопасность является одним из главных приоритетов ALT Orchestra.
Для работы кластера Kubernetes требуется определённый уровень доверия между узлами. Например, при начальной настройке высокодоступного control plane необходимо безопасно распространять чувствительные данные инфраструктуры открытых ключей (PKI).
Для решения этой задачи был создан компонент trustd.
Основанный на концепции Root of Trust («корень доверия»), trustd представляет собой простой демон, отвечающий за установление доверительных отношений внутри системы.
После установления доверия узел может выполнять различные доверенные операции. Например, принимать от другого узла запрос на запись файла на локальный диск.
В будущем функциональность trustd будет расширяться для поддержки новых возможностей ALT Orchestra.
udevd
udevd обрабатывает уведомления ядра о появлении и удалении устройств и создаёт необходимые записи и символьные ссылки в каталоге /dev.
Именно этот компонент обеспечивает корректное обнаружение дисков, сетевых интерфейсов и других аппаратных устройств операционной системой.