Резервное копирование Kubernetes-приложений в TrueNAS SCALE: полное руководство для встроенных и пользовательских контейнеров | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Резервное копирование Kubernetes-приложений в TrueNAS SCALE: полное руководство для встроенных и пользовательских контейнеров

30 апреля 2026 9 мин. чтения
Содержание статьи

Надежное резервное копирование приложений в TrueNAS SCALE требует понимания их архитектуры. Встроенный механизм работает не для всех контейнеров. Эта статья дает четкие инструкции по настройке бекапов для двух категорий: "спаренных" приложений из каталога TrueNAS и пользовательских развертываний. Вы получите пошаговые руководства, рабочие скрипты и стратегии восстановления.

Мы разберем архитектурные различия, объясним, почему стандартный интерфейс часто не подходит для кастомных контейнеров, и предложим три практических метода для их защиты. Инструкция основана на проверенной практике и поможет выстроить отказоустойчивую систему резервного копирования, минимизируя риски потери данных.

Архитектура приложений в TrueNAS SCALE: почему единого решения для бекапа нет

TrueNAS SCALE использует разные модели управления для разных типов приложений. Понимание этого различия критично для выбора правильной стратегии резервного копирования. Попытка применить единый подход ко всем контейнерам ведет к пробелам в защите данных.

«Спаренные» приложения: встроенный контроль и автоматическое резервное копирование

"Спаренные" приложения - это контейнеры, развернутые через официальный каталог TrueNAS SCALE (Apps). Система полностью управляет их жизненным циклом. Конфигурация таких приложений хранится во внутреннем Dataset TrueNAS, обычно в пуле ix-applications. Данные приложения могут находиться там же или в отдельных томах (Persistent Volume Claims), созданных системой.

Для этих приложений в интерфейсе TrueNAS SCALE доступна кнопка «Back Up». Она позволяет создать полный снимок конфигурации приложения, включая настройки развертывания в Kubernetes (Helm-релиз) и привязанные тома данных. Этот файл с расширением .ix-app является самодостаточным для восстановления.

Пользовательские контейнеры: независимые развертывания и их уязвимость

Пользовательские приложения - это контейнеры, развернутые вручную через kubectl apply, Helm-чарты из сторонних репозиториев или другие инструменты оркестрации. TrueNAS SCALE не управляет ими напрямую. Их Helm-чарты и конфигурационные файлы (values.yaml) хранятся там, где их разместил администратор - на локальном хосте, в Git-репозитории.

Данные таких приложений обычно находятся в Persistent Volume Claims (PVC), которые могут быть привязаны к отдельным Dataset в TrueNAS. Ключевая проблема: эти приложения не отображаются в интерфейсе TrueNAS SCALE в разделе «Приложения» и для них недоступен встроенный механизм бекапа. Их резервное копирование требует ручного подхода.

Настройка автоматического резервного копирования для встроенных («спаренных») приложений

Процесс резервного копирования для приложений из каталога TrueNAS максимально автоматизирован. Следуйте этой пошаговой инструкции для настройки.

Пошаговая инструкция: создание и настройка задачи резервного копирования

  1. В веб-интерфейсе TrueNAS SCALE перейдите в раздел «Приложения».
  2. Найдите в списке установленных приложений нужное и нажмите на его имя.
  3. На странице приложения найдите и нажмите кнопку «Back Up».
  4. В открывшейся форме укажите имя бекапа и описание (опционально).
  5. В поле «Storage Location» выберите целевое хранилище для файла резервной копии (.ix-app). Это может быть локальный Dataset в TrueNAS или NFS Share на удаленном сервере.
  6. Настройте расписание (Schedule) и политику удержания (Retention Policy).
  7. Нажмите «Save». Задача будет создана и начнет выполняться по расписанию.

Выбор хранилища: Dataset или NFS Share - плюсы и минусы

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

  • Локальный Dataset: Файл бекапа сохраняется в пределах того же сервера TrueNAS. Это обеспечивает высокую скорость записи и чтения. Недостаток: при физическом отказе основного пула хранения или всего сервера резервная копия будет потеряна вместе с основными данными.
  • NFS Share: Файл бекапа копируется на сетевую папку, размещенную на другом сервере. Это обеспечивает географическое разделение и защиту от сбоя одного узла. Недостатки: зависимость от сетевой доступности и, как правило, меньшая скорость по сравнению с локальным диском. Для настройки NFS вы можете обратиться к руководству по настройке сетевого доступа в TrueNAS.

Рекомендация: для критически важных данных используйте NFS Share на отдельном сервере или интегрируйте бекапы в общую стратегию репликации данных TrueNAS.

Настройка расписания и политики хранения: автоматизация и очистка

Автоматизация предотвращает человеческий фактор. В TrueNAS SCALE расписание настраивается в формате, аналогичном Cron.

  • Пример расписания: 0 2 * * * означает ежедневное выполнение задачи в 02:00 ночи.
  • Политика удержания (Retention Policy): определяет, сколько версий резервных копий хранить. Например, значение «10» означает, что система будет автоматически удалять самые старые бекапы, сохраняя 10 последних. Это аналог команды find /path -mtime +N -delete, используемой в скриптах.

Настройка политики удержания обязательна для предотвращения переполнения дискового пространства.

Стратегии резервного копирования для пользовательских контейнеров и Helm-приложений

Для приложений, развернутых в обход каталога TrueNAS, требуется ручной подход. Представленные методы охватывают разные уровни защиты: от конфигурации до полного состояния данных.

Метод 1: Ручной экспорт и сохранение Helm-чартов

Этот метод сохраняет «рецепт» развертывания приложения, что критично для его воссоздания.

  1. Получите список установленных Helm-релизов в нужном namespace Kubernetes:
    helm list -n <your_namespace>
  2. Экспортируйте конфигурационные значения (values) релиза в YAML-файл:
    helm get values <release_name> -n <your_namespace> > <release_name>_values_backup.yaml
  3. Если у вас есть исходный чарт, сохраните его директорию. Если нет, можно попытаться получить информацию о чарте из релиза.
  4. Упакуйте все файлы (values.yaml, директорию чарта, заметки) в архив с датой:
    tar -czf helm-backup-$(date +%Y%m%d).tar.gz <release_name>_values_backup.yaml ./chart-directory/

Храните эти архивы на надежном носителе, например, в том же NFS Share, что и бекапы системных приложений, или в объектном хранилище.

Метод 2: Создание дампов данных напрямую из контейнера

Этот метод подходит для резервного копирования данных приложений, например, баз данных, когда прямой доступ к тому (PVC) затруднен.

Пример для контейнера с PostgreSQL:

# Определите Pod вашего приложения
POD_NAME=$(kubectl get pods -n <namespace> -l app=postgres -o jsonpath='{.items[0].metadata.name}')

# Выполните команду создания дампа внутри контейнера и сохраните вывод локально
kubectl exec -n <namespace> $POD_NAME -- pg_dump -U <username> <database_name> > /mnt/pool/backups/db_dump_$(date +%Y%m%d).sql

Этот подход можно автоматизировать, создав Kubernetes CronJob, который будет запускать подобный скрипт по расписанию и сохранять дамп в общий том, доступный хосту TrueNAS.

Метод 3: Полноценное резервное копирование Persistent Volume Claims (PVC)

Самый надежный метод для stateful-приложений, требующий остановки или приостановки работы сервиса для обеспечения консистентности данных.

  1. Масштабируйте Deployment или StatefulSet приложения до 0 реплик, чтобы остановить запись данных:
    kubectl scale deployment/<deployment_name> -n <namespace> --replicas=0
  2. Определите путь, по которому смонтирован PVC на узле TrueNAS, или смонтируйте его временно в служебный Pod.
  3. Используйте утилиту rsync или tar для копирования всей файловой структуры тома в целевое хранилище на хосте TrueNAS:
    tar -czf /mnt/pool/backups/pvc_full_$(date +%Y%m%d).tar.gz -C /path/to/mounted/pvc .
  4. Верните количество реплик приложения к исходному значению.

Предупреждение: этот метод создает нагрузку на дисковую подсистему и требует downtime приложения. Планируйте его выполнение в maintenance-окно.

Автоматизация и интеграция: собираем систему бекапов в единое целое

Отдельные скрипты эффективны, но объединение их в систему повышает надежность. Цель - создать централизованный пайплайн резервного копирования.

Пример рабочего скрипта для автоматизации на хосте TrueNAS

Приведенный ниже bash-скрипт можно разместить на хосте TrueNAS SCALE и запускать по расписанию через cron. Он демонстрирует логику объединения задач.

#!/bin/bash
# Конфигурация
BACKUP_DIR="/mnt/pool/backups/apps"
NFS_MOUNT="/mnt/nfs_backup"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d)

# 1. Резервное копирование встроенного приложения (например, Nextcloud) через CLI (если доступно)
# Предполагается, что 'midclt' или аналогичная утилита может запустить задачу бекапа.
# Это пример, конкретная команда зависит от версии TrueNAS API.
echo "[$DATE] Starting TrueNAS app backup..."
# midclt call app.backup <app_id> '{"name": "auto_backup_$DATE"}' 2>/dev/null || echo "App backup failed or not configured"

# 2. Резервное копирование данных пользовательской БД (Метод 2)
echo "[$DATE] Starting database dump..."
kubectl exec -n postgres postgres-pod -- pg_dump -U admin mydb > "$BACKUP_DIR/db_dump_$DATE.sql" 2>&1

# 3. Архивирование конфигов Helm (Метод 1)
echo "[$DATE] Archiving Helm charts..."
tar -czf "$BACKUP_DIR/helm_configs_$DATE.tar.gz" -C /root/helm/ .

# 4. Копирование всех сегодняшних бекапов на NFS-хранилище
echo "[$DATE] Copying to NFS..."
cp "$BACKUP_DIR/"*"_$DATE"* "$NFS_MOUNT/" 2>/dev/null

# 5. Очистка старых локальных бекапов (политика удержания)
echo "[$DATE] Cleaning up old backups (older than $RETENTION_DAYS days)..."
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete

# 6. Очистка старых бекапов на NFS
find "$NFS_MOUNT" -type f -mtime +$RETENTION_DAYS -delete

echo "[$DATE] Backup procedure completed."

Настройте выполнение этого скрипта через cron на хосте TrueNAS: 0 3 * * * /path/to/your/backup_script.sh.

Настройка мониторинга и проверка целостности резервных копий

Создание бекапа не гарантирует его работоспособность. Необходим мониторинг.

  • Проверка размера и даты: Добавьте в скрипт проверку, что размер последнего созданного файла бекапа больше 0 байт, а его дата создания соответствует сегодняшнему дню.
  • Тест целостности: Для SQL-дампов можно выполнить проверку синтаксиса (например, head -n 5 backup.sql | grep 'PostgreSQL'). Для архивов - проверить целостность командой tar -tzf backup.tar.gz > /dev/null.
  • Оповещения: Настройте отправку email или сообщения в мессенджер (например, через curl к вебхуку) в случае, если скрипт завершился с ошибкой (не нулевой exit code) или если файл бекапа не был создан. Это можно сделать, добавив проверку кода возврата ($?) после каждой критической команды в скрипте.

Регулярное тестовое восстановление в изолированной среде - лучшая проверка. Запланируйте его проведение раз в квартал.

Восстановление приложений из резервной копии: практические сценарии

Ценность резервной копии определяется успешностью восстановления. Рассмотрим два основных сценария.

Восстановление встроенного приложения через графический интерфейс

Процесс обратен созданию бекапа и выполняется через GUI TrueNAS SCALE.

  1. Перейдите в «Приложения» -> «Discover Apps».
  2. Нажмите кнопку «Install» на карточке приложения, которое нужно восстановить.
  3. Вместо выбора чарта из каталога перейдите на вкладку «Custom App» или найдите опцию «Upload Configuration».
  4. Загрузите файл резервной копии с расширением .ix-app.
  5. Система предзаполнит все поля конфигурации из бекапа. Проверьте их, особенно настройки хранилища (Storage), чтобы пути к Dataset существовали.
  6. Нажмите «Install». TrueNAS развернет приложение в той же конфигурации, что и на момент создания бекапа, включая тома данных, если они были включены в бекап.

Этот метод также полезен для клонирования конфигурации приложения на другом сервере TrueNAS. Подробнее о работе с приложениями читайте в руководстве по установке приложений.

Развертывание пользовательского приложения из архива Helm и данных

Восстановление кастомного приложения - многоэтапный процесс.

  1. Распакуйте архив: Извлеките сохраненный Helm-чарт и файл values.yaml из архива, созданного по Методу 1.
  2. Восстановите конфигурацию: Установите приложение заново, используя восстановленные значения. Если чарт был из стороннего репозитория, добавьте его:
    helm repo add <repo_name> <repo_url>
    Затем установите:
    helm install <release_name> <repo_name>/<chart_name> -n <namespace> -f ./restored_values.yaml
  3. Остановите новое приложение: Масштабируйте его до 0 реплик, чтобы можно было заменить данные.
  4. Восстановите данные:
    - Для дампа БД (Метод 2): Скопируйте файл дампа в контейнер и выполните восстановление, например, kubectl cp backup.sql pod_name:/tmp/ и kubectl exec ... -- psql -U user -d db -f /tmp/backup.sql.
    - Для полной копии PVC (Метод 3): Смонтируйте том приложения на хост и распакуйте в него архив: tar -xzf pvc_full_backup.tar.gz -C /path/to/mounted/pvc.
  5. Запустите приложение: Верните количество реплик к исходному значению.

Процесс сложнее, чем для встроенных приложений, но он обеспечивает полный контроль. Для критически важных систем рассмотрите Air-Gap стратегии, чтобы защитить бекапы от ransomware-атак.

Помните, что резервное копирование - это не разовая задача, а циклический процесс: создание, проверка, восстановление. Интегрируйте полученные методы в регулярные процедуры обслуживания вашей инфраструктуры. Для автоматизации работы с API различных моделей ИИ, которые могут помочь в документировании процессов или анализе логов, можно использовать сервисы вроде AiTunnel, предоставляющие единый интерфейс.

Поделиться:
Сохранить гайд? В закладки браузера