- PVSM.RU - https://www.pvsm.ru -

На днях американский инженер Andrew Rynhard представил [1] интересный проект: компактный дистрибутив Linux, предназначенный специально для запуска Kubernetes-кластеров. Он получил название из древнегреческой мифологии — Talos [2].
Проект появился под вдохновением от твита Kelsey Hightower'а [3] ещё 2015 года, в котором он говорил, что нам осталось лишь дождаться появления условной KubeOS (после чего жизнь облачных окружений станет окончательно замечательной):

К слову, с появлением Talos эта история получила продолжение [4]: некто ответил на исторический твит, что такая система уже появилась, и автор Talos заявил, что будет рад, если Kelsey посмотрит на проект. Реакции последнего, впрочем, (пока) не последовало.
Судя по всему [5], разработкой Talos занимался один человек (представляющий себя в рамках целой компании — Autonomy [6]) — ушло у него на это более года. И вот теперь, когда статус минимальной готовности достигнут, автор ожидает, что к нему присоединятся другие представители Kubernetes/cloud native-сообщества. Итак, в чём же суть проекта?
Talos позиционируется как современный Linux-дистрибутив, созданный специально (и исключительно!) для Kubernetes. Для достижения поставленной цели в его реализации придерживаются следующих подходов:
Повсеместный минимализм — один из краеугольных камней архитектуры Talos. Одним из ярких примеров здесь является используемая служба инициализации [7], которая (вопреки современным тенденциям в этой области) следует философии UNIX, что «каждая программа делает одну вещь, но хорошо»:
Мы хотели сделать init ориентированным на единственную задачу — запуск Kubernetes. В нём попросту нет механизмов для каких-либо других действий.
Разработчики пошли дальше и лишили свою операционную систему привычного системным администраторам пользовательского доступа к хосту: в Talos нет ни командных оболочек, ни SSH-демона, ни даже возможности запускать собственные процессы на хосте. И действительно: зачем всё это, если вам нужно запускать Kubernetes и только? Практически все процессы в Talos работают в рамках контейнеров.
Однако, поскольку мир не так уж идеален (чтобы ОС полностью функционировала «сама»), инструменты для эксплуатации ОС всё же есть:
Так и реализован набор базовых возможностей по эксплуатации: перезагрузка служб и узлов кластера, получение логов ядра (dmesg) и из контейнеров, вставка данных в конфигурационные файлы узлов и т.п.
Все перечисленные компоненты (init, osd, osctl…), как и некоторые другие [10] в составе дистрибутива, написаны на языке Go. К слову, весь исходный код распространяется на условиях Open Source-лицензии Mozilla Public License 2.0.
Описанный выше минималистский подход (всё необходимое только для запуска Kubernetes) + принцип выдачи лишь минимальных привилегий уже сами по себе снижают потенциальную поверхность атаки. Кроме того, в Talos:
Дополнительный плюс, вытекающий из минимализма и фокусировки на immutable, — предсказуемость системы в поведении (т.к. снижается число факторов, влияющих на окружение).
Авторы обещают базировать Talos на предпоследнем upstream-релизе Kubernetes (впрочем, прямо сейчас поддерживается [13] K8s 1.13.3) и последнем доступном LTS-релизе ядра Linux (сейчас используется 4.19.10).
Основными составляющими дистрибутива (помимо ядра и «фирменных» утилит) являются:
init и других своих инструментов;Примеры деплоя Talos для случаев использования AWS, KVM и Xen приведены в документации проекта [15]. Для быстрой иллюстрации того, как это выглядит, вот алгоритм инсталляции с виртуальными машинами Linux KVM:
1. Установка узла мастера на хост:
docker run --rm --privileged --volume /dev:/dev
autonomy/talos:latest image -b /dev/sdb -f -p bare-metal
-u http://${IP}:8080/master.yaml
2. Создание ВМ:
virt-install -n master --description "Kubernetes master node."
--os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host
--vcpus=2 --ram=4096 --disk path=/dev/sdb
--network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1
--graphics none --boot hd --rng /dev/random
3. Аналогичные действия для создания рабочего узла:
docker run --rm --privileged --volume /dev:/dev
autonomy/talos:latest image -b /dev/sdc -f -p bare-metal
-u http://${IP}:8080/worker.yaml
virt-install -n master --description "Kubernetes worker node."
--os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host
--vcpus=2 --ram=4096 --disk path=/dev/sdc
--network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2
--graphics none --boot hd --rng /dev/random
Настройка взаимодействия между osd и osctl по большому счёту сводится к генерации ключей для их аутентификации (уже упомянутый mTLS) и описана здесь [16].
Дальнейшая работа с ними сводится к командам вроде osctl reboot, osctl stats и osctl logs. Демонстрация вывода контейнеров в пространстве имён k8s.io:
$ osctl ps -k
NAMESPACE ID IMAGE PID STATUS
k8s.io 0ca1… sha256:da86… 2341 RUNNING
k8s.io 356f… sha256:da86… 2342 RUNNING
…
k8s.io e42e… sha256:4ff8… 2508 RUNNING
k8s.io kubelet k8s.gcr.io/… 2068 RUNNING
Процесс конфигурации Kubernetes-кластера с Talos — доступен здесь [17] (mater-узлы) и здесь [18] (workers).
Проект находится в стадии альфа-версии (последний релиз — v0.1.0-alpha.18 [19]) и, конечно, на данном этапе выглядит больше как занятный эксперимент, чем что-либо по-настоящему близкое к production.
Однако всплеск интереса к Talos после его недавнего анонса (уже 600+ звёзд на GitHub) и призыв единственного автора к совместному творчеству могут послужить отличным стимулом для его развития.

Активность в issues [20] проекта Talos в последние дни
По меньшей мере, в дистрибутиве заложены актуальные для мира cloud native идеи, качественная реализация которых — дело времени.
Читайте также в нашем блоге:
Автор: Дмитрий Шурупов
Источник [25]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/309295
Ссылки в тексте:
[1] представил: https://www.reddit.com/r/kubernetes/comments/aqt0u9/talos_a_modern_linux_distribution_for_kubernetes/
[2] Talos: https://github.com/autonomy/talos
[3] твита Kelsey Hightower'а: https://twitter.com/kelseyhightower/status/650468942410989568
[4] получила продолжение: https://twitter.com/autonomyio/status/1096562962557394945
[5] всему: https://github.com/autonomy/talos/graphs/contributors
[6] Autonomy: https://www.autonomy.io/
[7] служба инициализации: https://talos.autonomy.io/components/init/
[8] osd: https://talos.autonomy.io/components/osd/
[9] osctl: https://talos.autonomy.io/components/osctl/
[10] некоторые другие: https://github.com/autonomy/talos/tree/master/internal/app
[11] KSSP: http://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project
[12] указаниями CIS: https://www.cisecurity.org/benchmark/kubernetes/
[13] поддерживается: https://github.com/andrewrynhard/talos/commit/1219ae7
[14] CRI: https://github.com/containerd/cri
[15] документации проекта: https://talos.autonomy.io/examples/
[16] здесь: https://talos.autonomy.io/configuration/osd/
[17] здесь: https://talos.autonomy.io/configuration/masters/
[18] здесь: https://talos.autonomy.io/configuration/workers/
[19] v0.1.0-alpha.18: https://github.com/autonomy/talos/releases/tag/v0.1.0-alpha.18
[20] issues: https://github.com/autonomy/talos/issues
[21] В AWS представили Firecracker — микровиртуализацию для Linux: https://habr.com/ru/company/flant/blog/431192/
[22] Прошлое, настоящее и будущее Docker и других исполняемых сред контейнеров в Kubernetes: https://habr.com/ru/company/flant/blog/429952/
[23] Red Hat заменяет Docker на Podman: https://habr.com/company/flant/blog/426141/
[24] Linux-дистрибутив from scratch для сборки Docker-образов — наш опыт с dappdeps: https://habr.com/company/flant/blog/352432/
[25] Источник: https://habr.com/ru/post/440810/?utm_source=habrahabr&utm_medium=rss&utm_campaign=440810
Нажмите здесь для печати.