Резервное копирование кластера Managed Service for Kubernetes в Object Storage
Данные в кластерах Managed Service for Kubernetes надежно хранятся и реплицируются в инфраструктуре Yandex Cloud. Однако в любой момент вы можете сделать резервные копии данных из групп узлов кластеров Managed Service for Kubernetes и хранить их в Yandex Object Storage или другом хранилище.
Вы можете создавать резервные копии данных из групп узлов кластера Managed Service for Kubernetes с помощью инструмента Velero
При работе с Velero, установленным вручную, вы можете использовать nfs
Из этой статьи вы узнаете, как создать резервную копию группы узлов одного кластера Managed Service for Kubernetes с помощью Velero, сохранить ее в Object Storage, а затем восстановить в группе узлов другого кластера:
- Создайте резервную копию группы узлов Managed Service for Kubernetes.
- Восстановите группу узлов другого кластера Managed Service for Kubernetes из резервной копии.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру
-
Создайте два кластера Managed Service for Kubernetes.
Один кластер Managed Service for Kubernetes будет использован, чтобы создать резервную копию данных для группы узлов, другой — чтобы восстановить данные из копии.
Если вы планируете работать с кластерами в пределах сети Yandex Cloud, выделять кластерам публичный IP-адрес не нужно. Для подключений извне предоставьте кластерам публичный адрес.
-
Создайте по группе узлов в каждом кластере и выделите каждой группе публичный IP-адрес.
-
Настройте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Эти группы безопасности необходимо настроить для каждого кластера и группы узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте сервисный аккаунт с ролью
compute.admin
на каталог для работы с Velero. -
Выдайте сервисному аккаунту права READ и WRITE к бакету в Object Storage. Для этого выполните настройки ACL бакета.
-
Создайте статический ключ доступа для сервисного аккаунта и сохраните его идентификатор и значение. Получить значение ключа снова будет невозможно.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации velero-backup.tf
.В этом файле описаны:
-
Сеть.
-
Два кластера Managed Service for Kubernetes и их группы узлов.
-
Сервисный аккаунт, необходимый для работы кластеров Managed Service for Kubernetes и групп узлов.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Эти группы безопасности будут использоваться обоими кластерами.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Сервисный аккаунт с ролью
compute.admin
для работы с Velero. -
Статический ключ доступа для сервисного аккаунта, предназначенного для работы с Velero.
-
Бакет в Object Storage.
-
-
Укажите в файле
velero-backup.tf
:folder_id
— идентификатор каталога, в котором будут созданы ресурсы.k8s_version
— версию Kubernetes 1.22 или выше.zone_a_v4_cidr_blocks
— CIDR подсети, в которой будут размещены кластеры Managed Service for Kubernetes.sa_name_k8s
— имя сервисного аккаунта кластеров Managed Service for Kubernetes.sa_name_velero
— имя сервисного аккаунта для работы с Velero.storage_sa_id
— идентификатор сервисного аккаунта с рольюstorage.admin
. С помощью него будет создан бакет в Object Storage с разрешениемREAD и WRITE
в ACL для сервисного аккаунтаsa_name_velero
.bucket_name
— имя бакета в Object Storage.
-
Выполните команду
terraform init
в директории с конфигурационным файлом. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
Получите и сохраните идентификатор и значение статического ключа сервисного аккаунта, предназначенного для работы с Velero:
-
Идентификатор ключа:
terraform output -raw access_key
-
Значение ключа:
terraform output -raw secret_key
-
Выполните дополнительные настройки
-
Выберите клиентскую часть Velero
для своей платформы согласно таблице совместимости . -
Скачайте клиентскую часть Velero, распакуйте архив и установите программу. Подробнее об установке программы читайте в документации Velero
. -
Убедитесь, что клиентская часть Velero установлена. Для этого выполните команду:
velero version
Результат:
Client: Version: v1.10.3 Git commit: 18ee078dffd9345df610e0ca9f61b31124e93f50
Резервное копирование
Чтобы выполнить резервное копирование данных группы узлов Managed Service for Kubernetes:
-
Установите kubectl
и настройте его на работу с первым кластером Managed Service for Kubernetes.Если для кластера не предоставлен публичный адрес и
kubectl
настроен через внутренний адрес кластера, выполняйте командыkubectl
на ВМ Yandex Cloud, находящейся в одной сети с кластером. -
Установите приложение Velero:
Yandex Cloud MarketplaceВручнуюУстановите приложение Velero согласно инструкции. В поле Имя бакета Object Storage укажите созданный ранее бакет.
Важно
Если имя пространства имен, где установлено приложение Velero, отличается от
velero
, для всех последующих команд дополнительно используйте параметр--namespace <пространство_имен_приложения_Velero>
.-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Создайте сервисный аккаунт, необходимый для работы Velero.
-
Назначьте ему роль
storage.editor
для доступа к Yandex Object Storage. -
Создайте статический ключ доступа для сервисного аккаунта в формате JSON и сохраните его в файл
sa-key.json
:yc iam access-key create \ --service-account-name=<имя_сервисного_аккаунта> \ --format=json > sa-key.json
-
Создайте файл
credentials
с данными статического ключа доступа, полученными ранее:[default] aws_access_key_id=<идентификатор_ключа> aws_secret_access_key=<секретная_часть_ключа>
-
Установите серверную часть Velero в кластер Managed Service for Kubernetes:
kubectl label volumesnapshotclasses.snapshot.storage.k8s.io yc-csi-snapclass \ velero.io/csi-volumesnapshot-class="true" && \ velero install \ --backup-location-config s3Url=https://storage.yandexcloud.net,region=ru-central1 \ --bucket <имя_бакета> \ --plugins velero/velero-plugin-for-aws:v1.3.0,velero/velero-plugin-for-csi:v0.2.0 \ --provider aws \ --secret-file ./credentials \ --features=EnableCSI \ --use-volume-snapshots=true \ --snapshot-location-config region=ru-central1 \ --use-restic
Где:
--backup-location-config
— параметры хранилища резервных копий. URL-адрес хранилища Object Storage и регион.--bucket
— имя бакета Object Storage для хранения резервных копий, созданного ранее.--plugins
— образы плагина для совместимости с AWS API.--provider
— имя провайдера объектного хранилища.--secret-file
— полный путь к файлу с данными статического ключа доступа.--features
— список активных функциональных возможностей.--snapshot-location-config
— зона доступности, в которой будут размещены снимки дисков.- (опционально)
--use-restic
— включение плагина restic.
Результат:
CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: already exists, proceeding CustomResourceDefinition/backups.velero.io: created ... Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
-
Убедитесь, что под Velero перешел в состояние
Running
:kubectl get pods --namespace velero
-
-
Выполните резервное копирование данных с группы узлов кластера Managed Service for Kubernetes:
velero backup create my-backup
Результат:
Backup request "my-backup" submitted successfully. Run `velero backup describe my-backup` or `velero backup logs my-backup` for more details.
-
Дождитесь завершения резервного копирования. В графе
STATUS
появится значениеCompleted
.velero backup get
Результат:
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR my-backup Completed 0 0 2020-10-19 17:13:25 +0300 MSK 29d default <none>
Восстановление данных их резервной копии
Чтобы восстановить данные группы узлов кластера Managed Service for Kubernetes:
-
Настройте kubectl на работу со вторым кластером Managed Service for Kubernetes.
Если для кластера не предоставлен публичный адрес и
kubectl
настроен через внутренний адрес кластера, выполняйте командыkubectl
на ВМ Yandex Cloud, находящейся в одной сети с кластером. -
Установите приложение Velero:
Yandex Cloud MarketplaceВручнуюУстановите приложение Velero согласно инструкции. В поле Имя бакета Object Storage укажите созданный ранее бакет.
Важно
Если имя пространства имен, где установлено приложение Velero, отличается от
velero
, для всех последующих команд дополнительно используйте параметр--namespace <пространство_имен_приложения_Velero>
.-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Создайте сервисный аккаунт, необходимый для работы Velero.
-
Назначьте ему роль
storage.editor
для доступа к Yandex Object Storage. -
Создайте статический ключ доступа для сервисного аккаунта в формате JSON и сохраните его в файл
sa-key.json
:yc iam access-key create \ --service-account-name=<имя_сервисного_аккаунта> \ --format=json > sa-key.json
-
Создайте файл
credentials
с данными статического ключа доступа, полученными ранее:[default] aws_access_key_id=<идентификатор_ключа> aws_secret_access_key=<секретная_часть_ключа>
-
Установите серверную часть Velero в кластер Managed Service for Kubernetes:
kubectl label volumesnapshotclasses.snapshot.storage.k8s.io yc-csi-snapclass \ velero.io/csi-volumesnapshot-class="true" && \ velero install \ --backup-location-config s3Url=https://storage.yandexcloud.net,region=ru-central1 \ --bucket <имя_бакета> \ --plugins velero/velero-plugin-for-aws:v1.3.0,velero/velero-plugin-for-csi:v0.2.0 \ --provider aws \ --secret-file ./credentials \ --features=EnableCSI \ --use-volume-snapshots=true \ --snapshot-location-config region=ru-central1 \ --use-restic
Где:
--backup-location-config
— параметры хранилища резервных копий. URL-адрес хранилища Object Storage и регион.--bucket
— имя бакета Object Storage для хранения резервных копий, созданного ранее.--plugins
— образы плагина для совместимости с AWS API.--provider
— имя провайдера объектного хранилища.--secret-file
— полный путь к файлу с данными статического ключа доступа.--features
— список активных функциональных возможностей.--snapshot-location-config
— зона доступности, в которой будут размещены снимки дисков.- (опционально)
--use-restic
— включение плагина restic.
Результат:
CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: already exists, proceeding CustomResourceDefinition/backups.velero.io: created ... Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
-
Убедитесь, что под Velero перешел в состояние
Running
:kubectl get pods --namespace velero
-
-
Проверьте, что в новом кластере Managed Service for Kubernetes отображается резервная копия данных:
velero backup get
Результат:
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR my-backup Completed 0 0 2020-10-19 17:13:25 +0300 MSK 29d default <none>
-
Восстановите данные из резервной копии:
velero restore create my-restore \ --exclude-namespaces velero \ --from-backup my-backup
Где:
--exclude-namespaces
— список пространств имен, которые необходимо исключить из процесса восстановления.--from-backup
— имя резервной копии для восстановления.
Результат:
Restore request "my-restore" submitted successfully. Run `velero restore describe my-restore` or `velero restore logs my-restore` for more details.
-
Дождитесь завершения восстановления данных из резервной копии. В графе
STATUS
появится значениеCompleted
.velero get restore
Результат:
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR my-restore my-backup Completed 2020-10-20 14:04:55 +0300 MSK 2020-10-20 14:05:22 +0300 MSK 0 23 2020-10-20 14:04:55 +0300 MSK <none>
Удалите созданные ресурсы
Если созданные ресурсы вам больше не нужны, удалите их:
- Удалите кластеры Managed Service for Kubernetes.
- Если вы зарезервировали для кластеров Managed Service for Kubernetes публичные статические IP-адреса, удалите их.
- Удалите бакет Object Storage.
- Удалите сервисный аккаунт для работы с Velero.
-
В терминале перейдите в директорию с планом инфраструктуры.
-
Удалите конфигурационный файл
velero-backup.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
velero-backup.tf
, будут удалены. -