Установка Talos Linux на Raspberry Pi 5

Попытка установить Talos Linux на Raspberry Pi 5 из официальных образов может оказаться непростой задачей — стандартные образы не всегда работают из коробки. К счастью, сообщество подготовило готовые образы с необходимыми настройками и драйверами.

Подготовка образа

Скачивание готового образа

Скачайте готовый образ Talos для Raspberry Pi 5 из репозитория:

github.com/talos-rpi5/talos-builder/releases

Запись образа на носитель

Образ можно записать на любой доступный носитель — NVMe или SD-карту:

sudo dd if=metal-arm64.raw of=/dev/disk4 bs=4M status=progress conv=fsync

Важно: Замените /dev/disk4 на ваш целевой диск. Убедитесь, что выбрали правильный диск, чтобы не перезаписать важные данные.

Первоначальная настройка

Поиск узла в сети

После вставки носителя в Raspberry Pi, найдите узел в сети с помощью nmap:

nmap -Pn -n -p 50000 172.20.3.0/24 -vv | grep 'Discovered'

Talos слушает на порту 50000 для первоначальной настройки. Замените диапазон IP-адресов на ваш сетевой сегмент.

Генерация конфигурации кластера

Создайте конфигурацию кластера:

talosctl gen config \
    k8s-talos-0 https://10.15.0.60:6443 \
    --with-secrets secrets.yaml

export TALOSCONFIG=$PWD/talosconfig

Команда создаст необходимый набор файлов:

  • controlplane.yaml — конфигурация для control plane нод
  • worker.yaml — конфигурация для worker нод
  • talosconfig — конфигурация клиента talosctl

Примечание: Замените https://10.15.0.60:6443 на адрес вашего API-сервера и укажите путь к файлу с секретами, если используете.

Проверка доступных дисков

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

talosctl -n 172.20.3.103 get disks --insecure

Развертывание кластера

Применение конфигурации к control plane

Примените конфигурацию к узлу control plane:

talosctl apply-config \
    --insecure \
    --nodes 172.20.3.156 \
    --file controlplane.yaml \
    --talosconfig talosconfig

Инициализация кластера (bootstrap)

Выполните bootstrap для инициализации кластера:

talosctl bootstrap \
    --nodes 10.15.0.60 \
    --talosconfig talosconfig \
    -e api.k8s.int.local

Важно: FQDN должен быть в DNS. В моем случае A-запись указывает на HAProxy, который балансирует нагрузку между control plane нодами. Если у вас один мастер, можно использовать IP-адрес напрямую.

После успешного bootstrap добавьте worker ноды, применив к ним worker.yaml аналогичным образом.

Настройка кластера

Проверка дисков после настройки

После настройки кластера проверьте доступные диски на worker нодах:

talosctl get disks -n 10.15.0.61 -e api.k8s.int.local --talosconfig talosconfig

Добавление меток к worker нодам

Добавьте метки к worker нодам для организации кластера:

kubectl label nodes talos-5of-c9u node-role.kubernetes.io/worker= role=storage-node
kubectl label nodes talos-ktt-uus node-role.kubernetes.io/worker= role=storage-node
kubectl label nodes talos-v4a-9mb node-role.kubernetes.io/worker= role=storage-node

Примечание: Замените имена нод на ваши.

Настройка Pod Security Policy

Для работы некоторых приложений (например, ingress-nginx и rook-ceph) необходимо разрешить привилегированные поды:

kubectl label namespace ingress-nginx pod-security.kubernetes.io/enforce=privileged --overwrite
kubectl label namespace rook-ceph pod-security.kubernetes.io/enforce=privileged --overwrite

Установка дополнительных пакетов

Talos — иммутабельная система без shell. Для установки дополнительных утилит (например, lvm2 для работы Rook) используйте debug-контейнер:

kubectl -n kube-system debug -it --profile sysadmin --image=alpine node/talos-m8n-ttm

Внутри контейнера установите необходимые утилиты:

apk add util-linux
apk add lvm2

Примечание: Замените talos-m8n-ttm на имя вашей ноды. Эти изменения не сохранятся после перезагрузки, так как Talos — иммутабельная система. Для постоянной установки пакетов рассмотрите использование расширений Talos или кастомных образов.

Заключение

После выполнения этих шагов у вас должен быть рабочий Kubernetes кластер на базе Talos Linux, развернутый на Raspberry Pi 5. Установка и настройка Rook для распределенного хранилища будет описана в отдельной статье.