Talos Linux: минималистичная ОС, созданная только для Kubernetes

Зачем нужна специальная ОС для Kubernetes

Компания «КонтейнерОпс» — 12 bare-metal серверов, Kubernetes на Ubuntu 22.04. Инцидент: через уязвимость в pod злоумышленник получил shell на ноде, escalated до root через CVE в ядре, установил криптомайнер. Расследование показало: на ноде было 847 установленных пакетов. Kubernetes использовал 23 из них.

Talos Linux — дистрибутив, спроектированный исключительно для запуска Kubernetes:

  • Нет SSH — управление только через API (talosctl)
  • Нет shell — нет bash, sh, login
  • Нет пакетного менеджера — нет apt, yum, apk
  • Неизменяемая root FS — squashfs, read-only
  • Mutual TLS — все коммуникации шифрованы
  • ~80 МБ — весь образ ОС
ПараметрUbuntu 22.04Talos Linux
Размер образа~3 GB~80 MB
Установленных пакетов800+0 (монолит)
Поверхность атакиШирокаяМинимальная
SSH доступДаНет
Время обновления ноды10-30 мин2-3 мин
КонфигурацияФайлы + systemdЕдиный YAML через API

Установка кластера: 3 control-plane + 3 worker

Минимальные требования: 2 CPU, 4 GB RAM, 20 GB диск на ноду. Для production — 4 CPU, 8 GB RAM, 100 GB SSD.

# Установка talosctl
curl -sL https://talos.dev/install | sh
talosctl version --client
# Client: v1.8.0

# Генерация конфигурации кластера
talosctl gen config k8s-prod https://10.0.1.100:6443 \
  --with-secrets secrets.yaml \
  --output-dir _out \
  --install-disk /dev/sda \
  --config-patch @patches/all-nodes.yaml

# Файлы в _out/:
# controlplane.yaml — конфигурация для CP нод
# worker.yaml — конфигурация для worker нод
# talosconfig — credentials для talosctl

Patch-файл для всех нод:

# patches/all-nodes.yaml
machine:
  network:
    nameservers:
      - 1.1.1.1
      - 8.8.8.8
  time:
    servers:
      - ntp.ru
  kubelet:
    extraArgs:
      rotate-server-certificates: true
  sysctls:
    net.core.somaxconn: "32768"
    vm.max_map_count: "262144"
cluster:
  network:
    cni:
      name: none  # Установим Cilium отдельно
  proxy:
    disabled: true  # kube-proxy не нужен с Cilium
# Применяем конфигурацию на ноды (PXE или ISO загрузка)
talosctl apply-config --insecure -n 10.0.1.101 --file _out/controlplane.yaml
talosctl apply-config --insecure -n 10.0.1.102 --file _out/controlplane.yaml
talosctl apply-config --insecure -n 10.0.1.103 --file _out/controlplane.yaml
talosctl apply-config --insecure -n 10.0.1.111 --file _out/worker.yaml
talosctl apply-config --insecure -n 10.0.1.112 --file _out/worker.yaml
talosctl apply-config --insecure -n 10.0.1.113 --file _out/worker.yaml

# Bootstrap первую CP ноду
talosctl bootstrap -n 10.0.1.101

# Получить kubeconfig
talosctl kubeconfig -n 10.0.1.101
kubectl get nodes

Управление кластером без SSH

Первый вопрос каждого сисадмина: «Как отлаживать без SSH?». Talosctl покрывает все сценарии:

# Логи сервисов
talosctl logs kubelet -n 10.0.1.101
talosctl logs etcd -n 10.0.1.101 --tail 100

# Системная информация
talosctl memory -n 10.0.1.101
talosctl cpu -n 10.0.1.101
talosctl disks -n 10.0.1.101
talosctl mounts -n 10.0.1.101

# Сетевая диагностика
talosctl netstat -n 10.0.1.101
talosctl interfaces -n 10.0.1.101
talosctl routes -n 10.0.1.101

# Список запущенных процессов
talosctl processes -n 10.0.1.101

# dmesg
talosctl dmesg -n 10.0.1.101

# Чтение файлов (read-only)
talosctl read /etc/os-release -n 10.0.1.101

# Перезагрузка / выключение
talosctl reboot -n 10.0.1.101
talosctl shutdown -n 10.0.1.101
Совет: Для интерактивной отладки контейнеров используйте kubectl debug — он запустит ephemeral-контейнер с отладочными инструментами внутри pod, без доступа к хост-системе.
# Отладка pod через ephemeral container
kubectl debug -it pod/nginx-abc123 --image=nicolaka/netshoot --target=nginx

# Отладка проблем на ноде через debug pod
kubectl debug node/worker-01 -it --image=ubuntu:22.04

Обновление кластера: rolling upgrade за 15 минут

Обновление Talos Linux — замена образа ОС целиком. Не patch, а полная замена, как прошивка firmware. Это безопаснее и быстрее, чем apt upgrade на сотнях пакетов.

# Обновление всех нод до новой версии
talosctl upgrade -n 10.0.1.101 \
  --image ghcr.io/siderolabs/installer:v1.8.1

# Для всех нод последовательно (через скрипт)
for node in 10.0.1.101 10.0.1.102 10.0.1.103 \
             10.0.1.111 10.0.1.112 10.0.1.113; do
  echo "Upgrading $node..."
  talosctl upgrade -n $node \
    --image ghcr.io/siderolabs/installer:v1.8.1 \
    --wait
  echo "$node done, waiting 30s..."
  sleep 30
done

Что происходит при обновлении ноды:

  1. Скачивается новый образ ОС (~80 МБ)
  2. Записывается на неактивный раздел (A/B схема)
  3. Worker cordon + drain (pod-ы мигрируют)
  4. Перезагрузка с нового раздела — 30-60 секунд
  5. Если новая версия не загрузилась — автоматический откат на предыдущий раздел

«КонтейнерОпс» обновляет кластер из 12 нод за 15 минут по скрипту vs 2 часа ручной работы с Ubuntu + kubeadm.

Безопасность и compliance

Результаты аудита безопасности «КонтейнерОпс» после миграции на Talos:

Вектор атакиUbuntuTalos Linux
SSH brute-forceВозможенНевозможен (нет SSH)
Escape из контейнера → shellДаёт полный доступShell отсутствует
Установка малвари на нодуВозможна (writable FS)Невозможна (read-only FS)
CVE в системных пакетах800+ пакетовМонолитный образ
Man-in-the-middle на APIБез mTLSmTLS по умолчанию
Важно: Talos Linux — не серебряная пуля. Если ваши workloads не в Kubernetes (bare-metal приложения, legacy-сервисы), Talos не подходит. Он для одной задачи — запуск Kubernetes, и делает это лучше всех.

Часто задаваемые вопросы

Да, Talos Linux — полностью open-source проект (Mozilla Public License 2.0). Sidero Labs предлагает платную поддержку и Omni — managed control plane, но сам Talos бесплатен для любого использования.

Поэтапно: добавьте Talos-ноды как worker в существующий кластер, мигрируйте pod-ы через drain/cordon, затем замените control plane. Данные в PersistentVolumes сохраняются. Полная миграция кластера из 10 нод занимает 1-2 дня.

Нет. Talos Linux спроектирован исключительно для Kubernetes. Нет пакетного менеджера, нет возможности установить произвольные сервисы. Если нужен bare-metal сервис — используйте отдельный сервер с обычным дистрибутивом.

Talos поддерживает local-path-provisioner, Rook/Ceph, Longhorn и любые CSI-драйверы. Данные хранятся на отдельных дисках/разделах, не на root FS. При обновлении ОС данные не затрагиваются — меняется только системный раздел.

Да, через system extensions. NVIDIA GPU, Intel QAT, Thunderbolt — подключаются как расширения при сборке образа. Команда: talosctl gen config с --system-extension для добавления драйверов в образ ОС.

Нужна помощь с внедрением?

Настроим, оптимизируем и возьмём на поддержку вашу инфраструктуру. 15+ лет опыта, 8 серверов Dell Xeon в дата-центре МТС.

📞 Связаться с нами

Комментарии 0

Оставить комментарий

3 + 7 =