Резервное копирование в Kubernetes с помощью Velero

    Команда Simple-Server
    03.06.2026
    13 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Предварительные требования

    Для создания резервных копий кластера Kubernetes нам потребуется следующее:

    • Установленный и работающий кластер Kubernetes. Это может быть собственный кластер, развернутый, например, по этой инструкции, либо кластер Kubernetes в облаке Simple-Server.
    • Объектное хранилище для хранения файлов резервных копий. Мы будем использовать объектное хранилище S3 от Simple-Server.
    • Отдельный сервер/виртуальная машина, рабочий/домашний компьютер с любой установленной операционной системой, с которой будет осуществляться управление кластером при помощи утилиты kubectl и производиться установка Velero. Мы будем использовать дистрибутив Ubuntu версии 24.04
    • Установленная утилита kubectl.
    • Установленный пакетный менеджер helm для Kubernetes.

    Если вы используете Kubernetes Simple-Server, файл kubeconfig для подключения к кластеру можно найти на странице кластера на вкладке «Дашборд» → «Скачать»:

    S3 — это объектное хранилище для надежного хранения больших данных. Так как для утилиты Velero необходимо обязательное присутствие объектного хранилища, то создадим его в разделе «Хранилище S3» в панели управления Simple-Server.

    Нажимаем на кнопку «Создать»:

    В рамках данной статьи мы выберем минимальный объем — 10 ГБ места. В реальности вам необходимо выбирать тот размер хранилища, который будет соответствовать вашим потребностям. Тип хранилища делаем публичным. Также при необходимости можно изменить имя для бакета:

    Velero представляет собой клиент-серверную утилиту с открытым исходным кодом для создания резервных копий и восстановления ресурсов кластера Kubernetes. Velero работает с объектами Kubernetes (например, с такими объектами, как Pod, Deployment, Service и т.д.) и сохраняет их в виде снимков. Также она может сохранять данные из объектов типа Persistent Volume (PV).

    Основные функции Velero заключаются в следующем:

    1. Создание резервных копий : Сохранение состояния кластера Kubernetes (включая манифесты и Persistent Volume).

    2. Восстановление данных : Восстановление всего кластера или только отдельных ресурсов из резервной копии.

    3. Миграция данных : Перемещение ресурсов между кластерами Kubernetes.

    Создание резервных копий : Сохранение состояния кластера Kubernetes (включая манифесты и Persistent Volume).

    Восстановление данных : Восстановление всего кластера или только отдельных ресурсов из резервной копии.

    Миграция данных : Перемещение ресурсов между кластерами Kubernetes.

    Архитектура Velero состоит из трех следующих ключевых компонентов:

    • Velero Server (разворачивается внутри кластера Kubernetes)

    Velero Server (разворачивается внутри кластера Kubernetes)

    Серверная часть Velero представляет собой контроллер, работающий как объект Deployment внутри кластера Kubernetes. Отвечает за выполнение задач резервного копирования и восстановления.

    • CLI(разворачивается вне кластера)

    CLI(разворачивается вне кластера)

    Клиентская часть Velero, представленная в виде интерфейса командной строки для управления Velero. Посылает команды серверу Velero.

    • Плагины для провайдеров облачного хранилища

    Используются для взаимодействия с хранилищами данных (например, Amazon S3, Google Cloud Storage, Azure Blob Storage).

    Прежде чем приступать к установке Velero, нам необходимо установить утилиту kubectl для подключения и управления кластером Kubernetes. Это можно сделать по нашей инструкции.

    Стоит отметить, что при использовании kubectl версия утилиты должна совпадать с версией кластера. Используемая основная (мажорная) версия kubectl не должна отличаться от той, которая используется в кластере. Например, если используется версия кластера под номером 1.31, то можно использовать версии с 1.30 до 1.32 Для скачивания определенной версии kubectl ее необходимо указать в URL-адресе, например:

    curl -LO https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl

    После установки необходимо проверить, что утилита была корректно установлена, путем вывода ее версии:

    Если в ответ была возвращена версия утилиты, то kubectl успешно установлена.

    Helm — это инструмент для управления пакетами Kubernetes. Он используется для упрощения установки, обновления и управления приложениями в кластере Kubernetes. Helm позволяет организовать сложные конфигурации Kubernetes в виде легко управляемых пакетов, называемых чартами (charts). Установка Helm описана в отдельной статье.

    После того как установка была завершена, проверим версию программы, чтобы убедиться в корректности установки:

    Подготовка файла kubeconfig

    Для подключения к кластеру нам необходим kubeconfig — специальный файл в формате .yaml, в котором содержатся данные для подключения к кластеру. При использования облачного кластера Kubernetes от Simple-Server, kubeconfig можно скачать из панели управления.

    Далее необходимо экспортировать переменную KUBECONFIG, в значение которой прописыватся полный путь до файла kubeconfig.

    В терминале необходимо выполнить следующую команду:

    export KUBECONFIG=/root/Daring_Linnet_config.yaml

    После того как переменная была экспортирована, можно проверить подключение к кластеру. Для этого можно вывести список всех доступных нод кластера:

    Если в ответ команда вернула список нод, то подключение к кластеру успешно установлено.

    Установка клиентской части

    Как уже было упомянуто ранее, Velero состоит из клиентской (CLI) части и серверной. Для начала установим клиентскую часть, которая представляет собой интерфейс командной строки.

    1. Скачиваем .tar-архив с клиентской частью Velero и разархивируем его. Мы будем использовать версию 1.15.1:
    curl -L https://github.com/vmware-tanzu/velero/releases/download/v1.15.1/velero-v1.15.1-linux-amd64.tar.gz | tar -xz
    1. На выходе будет создана директория velero-v1.15.1-linux-amd64 (где v1.15.1 — это используемая версия). Переместим директорию в /usr/local/bin:
    mv velero-v1.15.1-linux-amd64/velero /usr/local/bin/
    1. Проверим работоспособность клиентской утилиты путем вывода ее версии:

    Как можно увидеть на скриншоте выше, утилита успешно отобразила ранее установленную версию. На этом установка клиентской части завершена. Далее мы перейдем к установке серверной части.

    Установка серверной части

    Одним из способов установки серверной части Velero является helm-чарт. Чтобы установить Velero при помощи helm-чарта, необходимо выполнить следующие шаги:

    1. Заранее создаем новый namespace (пространство имен) с именем velero:
    kubectl create namespace velero
    1. Создаем новый файл с объектом Kubernetes типа секрет (secret).

    В качестве секрета будут хранится значения переменных aws_access_key_id и aws_secret_access_key. S3 Access Key и S3 Secret Access Key — это пара уникальных ключей, которые используются для аутентификации и авторизации доступа к хранилищу S3. Эти ключи позволяют программам, скриптам и другим приложениям взаимодействовать с S3-ресурсами через AWS API, CLI или SDK.

    • S3 Access Key — публичный идентификатор ключа. Используется для идентификации пользователя или приложения, совершающего запрос.
    • S3 Secret Access Key — секретный ключ, который используется вместе с Access Key для создания цифровой подписи запросов. Держится в секрете, так как знание этого ключа позволяет злоумышленнику получить доступ к вашим S3-ресурсам.

    Чтобы узнать значения S3 Access Key и S3 Secret Access Key, необходимо перейти в раздел «Хранилище S3» в панели управления Simple-Server и открыть нужное хранилище. В меню справа будет отображаться вся необходимая информация, включая S3 Access Key и S3 Secret Access Key:

    Копируем данные значения.

    Создаем новый файл с именем velero-credentials-secret.yaml:

    nano velero-credentials-secret.yaml apiVersion: v1 kind: Secret metadata: name: cloud-credentials namespace: velero type: Opaque stringData: cloud: | [default] aws_access_key_id = UOY3beX5A3bV9Ly aws_secret_access_key = F3x78pH1d5BOu4BfVv
    1. Создаем секрет в Kubernetes:
    kubectl apply -f velero-credentials-secret.yaml
    1. Далее добавляем официальный helm-репозиторий vmware-tanzu, где хранится Velero:
    helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts

    И обновляем списки репозиториев:

    При выводе списка репозиториев будет отображаться ранее добавленный репозиторий vmware-tanzu:

    1. Команда установки Velero будет следующей:
    helm install velero vmware-tanzu/velero \ --namespace velero \ --set credentials.existingSecret=cloud-credentials \ --set 'configuration.backupStorageLocation[0].name=default' \ --set 'configuration.backupStorageLocation[0].provider=aws' \ --set 'configuration.backupStorageLocation[0].bucket=f60e2023-bucket-for-velero' \ --set 'configuration.backupStorageLocation[0].config.region=ru-1' \ --set 'configuration.backupStorageLocation[0].config.s3ForcePathStyle=true' \ --set 'configuration.backupStorageLocation[0].config.s3Url=https://s3.twcstorage.ru' \ --set 'configuration.volumeSnapshotLocation[0].name=default' \ --set 'configuration.volumeSnapshotLocation[0].provider=aws' \ --set 'configuration.volumeSnapshotLocation[0].config.region=ru-1' \ --set 'initContainers[0].name=velero-plugin-for-aws' \ --set 'initContainers[0].image=velero/velero-plugin-for-aws:v1.7.0' \ --set 'initContainers[0].volumeMounts[0].mountPath=/target' \ --set 'initContainers[0].volumeMounts[0].name=plugins'

    В параметре configuration.backupStorageLocation[0].bucket необходимо указать имя хранилища которое, можно получить из панели управления бакетом в параметре «Название бакета»:

    Запускаем команду установки:

    При отсутствии ошибок будет выведено сообщение о том, что Velero был развернут в кластере, и для отслеживания его состояния можно воспользоваться командой:

    kubectl get deployment/velero -n velero

    Файл deployment’а успешно запущен. Об этом говорят статусы READY и UP-TO-DATE.

    Также можно проверить статус пода с Velero:

    kubectl get pods -n velero

    Под также успешно запущен.

    При необходимости можно также проверить логи пода, где velero-7bb8d5c5f-jwg5c — это имя пода Velero:

    kubectl logs velero-7bb8d5c5f-jwg5c -n velero

    На этом установка Velero полностью завершена.

    Резервное копирование при помощи Velero

    Переходим к процессу резервного копирования. Для тестирования создадим новый namespace и в нем несколько объектов Kubernetes.

    1. Создаем namespace с именем test-velero:
    kubectl create ns test-velero
    1. Создаем файл типа deployment, в котором укажем запуск двух контейнеров с веб-сервером Nginx. Также в этом же файле создадим сервис с типом LoadBalancer. Содержимое файла будет следующим:
    apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dev namespace: test-velero labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:1.17.6 name: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-test-service namespace: test-velero spec: ports: - port: 80 targetPort: 80 selector: app: nginx type: LoadBalancer
    1. Применяем файл и создаем объекты:
    kubectl apply -f nginx-dev.yaml

    Проверяем статус созданных объектов:

    kubectl get all -n test-velero
    1. Для всех созданных объектов в namespace test-velero будет создана резервная копия. С помощью команды ниже мы создадим копию с именем nginx-test-backup:
    velero backup create nginx-test-backup --include-namespaces test-velero

    Если резервная копия была успешно создана, то в ответ пользователь увидит следующую фразу:

    Backup request "nginx-test-backup" submitted successfully. Run `velero backup describe nginx-test-backup` or `velero backup logs nginx-test-backup` for more details.

    Убедимся, что резервная копия действительно была создана успешно. Для этого воспользуемся командой velero backup describe:

    velero backup describe nginx-test-backup

    Как можно увидеть на скриншоте выше, резервная копия была успешно создана, о чем говорит статус Completed.

    1. Получить список всех резервных копий в хранилище можно при помощи команды velero backup get:

    Для каждой созданной резервной копии отображается ее статус (STATUS), количество ошибок (ERRORS), количество предупреждений (WARNINGS), дата и время создания резервной копии (CREATED) и срок жизни резервной копии (EXPIRES).

    1. Теперь проверим процедуру восстановления из резервной копии. Для этого удаляем ранее созданный namespace со всеми присутствующими в нем объектами:
    kubectl delete namespace test-velero

    Далее выполняем команду восстановления velero restore create --from-backup, указав в качестве аргумента имя ранее созданной резервной копии (nginx-test-backup):

    velero restore create --from-backup nginx-test-backup

    Проверим статус восстановления при помощи команды velero restore describe, передав в качестве значения имя восстановленной копии, которую можно узнать из вывода команды velero restore create:

    velero restore describe nginx-test-backup-20250114155656

    Резервная копия была успешно восстановлена, о чем говорит ее статус — Completed.

    Для просмотра файлов резервной копии можно воспользоваться разделом «Объекты» в веб-интерфейсе объектного хранилища:

    Также Velero создает отдельные директории для резервных копий:

    Внутри каждой директории можно увидеть соответствующие объекты, например:

    Полезные команды для резервного копирования

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

    • Создание автоматической резервной копии для всех объектов в пространствах имен default и my-namespace каждый день в 02:00 часа:
    velero schedule create daily-backup --schedule="0 2 * * *" --include-namespaces default,my-namespace
    • Создать резервную копию только для объектов типа deployment в пространстве имен default:
    velero backup create my-backup2 --include-resources deployments --include-namespaces default
    • Сделать резервную копию всего кластера, включая объекты, которые развернуты вне пространств имен (cluster-scoped resources). К таким объектам, в частности, относят ClusterRole, ClusterRoleBinding, CustomResourceDefinition (CRD), PersistentVolume, StorageClass.
    velero backup create full-cluster-backup
    • Сделать резервную копию только тех объектов, которые совпадают по селекторам меток (label selector); например, будут сохранены только те объекты, у которых селектор будет app=nginx:
    velero backup create backup-with-label-nginx --selector "app=nginx"
    • Сделать резервную копию только тех объектов, которые не совпадают по селекторам меток (label selector). Например, так можно сохранить только те объекты, у которых селектор не равен app=nginx:
    velero backup create backup-with-no-label-nginx --selector "app=nginx"
    • Исключить из резервной копии пространство имен kube-system и всего его объекты:
    velero backup create backup-exclude-kube-system --exclude-namespaces kube-system
    • Исключить из резервной копии все секреты (secrets):
    velero backup create backup-exclude-secrets --exclude-resources secrets

    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны