Резервное копирование в Kubernetes

Создание резервной копии

Внимание!

  • Продукт будет остановлен на время создания резервной копии. Не используйте утилиту sudo для создания резервных копий.
  • Приведенный скрипт не распространяется на внешние БД (в случае их настройки и использования). Для внешних БД необходимо настроить резервное копирование отдельным шагом (штатными средствами PostgreSQL, Minio и т.д.)
  1. Перед выполнением скрипта на создание резервной копии перейдите в директорию, где будут храниться резервные копии, папки scripts/ и jobs/:
    cd my-testit-directory
    ls
    # Здесь должны присутствовать папки scripts/ и jobs/
    
  2. Определите namespace (пространство имен), в котором запущено приложение Test IT:
    kubectl get ns
    # Здесь будут отображены доступные пространства имен
    
  3. Убедитесь, что версии Postgres и Minio/mc: совпадают с версиями, запущенными в пакете Test IT:
    # testit_backend/values.yaml
    postgres:
      image:
        name: <...>
        tag: 14.8-bookworm
    
    # /jobs/postgres/restore/job.yaml, /jobs/postgres/backup/job.yaml
    spec:
      template:
        spec:
          containers:
          - name: <...>
            image: postgres:14.8-bookworm
    #######################################################
    # testit_backend/values.yaml
    minio:
      image:
        name: <...>
        tag: RELEASE.2023-05-04T21-44-30Z
    
  4. Создайте резервную копию с помощью набора команд, заменив <namespace> на нужное вам пространство имен:
    # Задайте переменные для доступа на PostgreSQL и Minio:
    # Значения для переменных располагаются в testit_backend/values.yaml:general:config или testit_backend/values-override.yaml:general:config
    export POSTGRES_HOST="postgres"
    export POSTGRES_PORT="5432"
    export POSTGRES_USER="postgres"
    export POSTGRES_PASSWORD="password"
    export AWS_CONNECTION_STRING="http://minio:9000"
    export AWS_ACCESS_KEY="myMinioAccessKey"
    export AWS_SECRET_KEY="myMinioSecretKey"
    chmod +x scripts/k8s_backup.sh
    ./scripts/k8s_backup.sh <namespace>
    # Пример: ./scripts/k8s_backup.sh my-testit-namespace
    

Система будет запущена после окончания процесса. В рабочей директории будет создана папка backups, содержащая папки с датами резервного копирования, внутри которых расположены архивы с резервными копиями. Формат отображения дат:

backups/
  {день}_{месяц}_{год}/
      {сервис1}_backup.tar
      {сервис2}_backup.tar
      ...
# Например:
backups/
  18_07_2023/
      postgres_backup.tar
      minio_backup.tar
      ...

Восстановление из резервной копии

Внимание!

  • Продукт будет остановлен на время восстановления из резервной копии.
  • В директории со скриптами (в папке scripts/) должна находиться папка jobs/, в которой указаны ресурсы K8s, необходимые для восстановления из резервной копии.
  • При переносе продукта на другой сервер рекомендуется предварительно установить Test IT на новый сервер с настройками по умолчанию, затем восстановить данные системы из резервной копии. Для наилучшей совместимости на новом сервере рекомендуется устанавливать Test IT той же версии, которая содержится в резервной копии, переносимой из исходного сервера.
  1. Перед выполнением скрипта на восстановление из резервной копии перейдите в директорию, где хранятся резервные копии, и выберите дату создания резервной копии для восстановления. Например:
    # Перейдите в директорию
    cd my-testit-directory
    ls
    # Здесь должны присутствовать папки backups/, scripts/ и jobs/
    # Проверьте содержимое папки с резервными копиями:
    ls backups/
    # Здесь будут выведены папки с датами резервного копирования, например:
    19_07_2023/ 20_07_2023/ 21_07_2023/
    
  2. Определите namespace (пространство имен), в котором запущено Test IT:
    kubectl get ns
    # Здесь будут отображены доступные пространства имен
    
  3. Восстановите систему из резервной копии с помощью набора команд:
    # Задайте переменные для доступа на PostgreSQL и Minio:
    # Значения для переменных располагаются в testit_backend/values.yaml:general:config или testit_backend/values-override.yaml:general:config
    export POSTGRES_HOST="postgres"
    export POSTGRES_PORT="5432"
    export POSTGRES_USER="postgres"
    export POSTGRES_PASSWORD="password"
    export AWS_CONNECTION_STRING="http://minio:9000"
    export AWS_ACCESS_KEY="myMinioAccessKey"
    export AWS_SECRET_KEY="myMinioSecretKey"
    chmod +x scripts/k8s_restore.sh
    ./scripts/k8s_restore.sh <namespace> <backup_date>
    # Пример: ./scripts/k8s_restore.sh my-testit-namespace 18_07_2023
    

Система будет запущена после окончания процесса.

Обновлено: