- Virtual Infrastructure
- Disaster Recovery
- Кроссплатформенная миграция на базе Киберпротект
- Veeam Agent BaaS
- Veeam Cloud Connect
- Объектное хранилище #CloudMTS
- GPU Workspaces
- VDI Desktops
- Cloud CDN / Медиасервисы
- Диск #CloudMTS
- Техническая поддержка и отзывы
- DBaaS for PostgreSQL
- Containerum Kubernetes
- GPU SuperCloud
Резервное копирование с помощью Velero и объектного хранилища #CloudMTS
Данная статья описывает как создать резервную копию кластера Kubernetes (также K8s) с помощью Velero, а затем развернуть её на текущем или новом кластере.
Инструмент Velero
Velero позволяет подготовить кластер Kubernetes к обновлению и восстановить его в случае сбоя. При помощи Velero возможно:
- создавать сжатые резервные копии объектов и ресурсов кластера Kubernetes в объектном хранилище по требованию и по расписанию
- восстанавливать копии из хранилища резервных копий
Инструмент возможно использовать в сценариях:
- восстановления кластера после сбоев
- тиражирования кластера с сохранением пользовательских настроек
- миграции кластеров Kubernetes
- резервного копирования и восстановления томов Persistent Volumes
Прежде чем начать работать с Velero необходимо произвести установку:
- сервера на кластер Kubernetes; сервер Velero производит операцию резервного копирования данных и взаимодействует с Объектным хранилищем #CloudMTS
- клиента на локальный компьютер администратора кластера Kubernetes; клиент Velero понадобится для настройки сервера Velero на кластере kubernetes
Работа с Velero
Шаг 1. Установка клиента Velero
скачайте последнюю версию клиента Velero для своей платформы
распакуйте архив и установите клиент, как описано в документации Velero
- для установки клиента Velero для MacOS выполните:
wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-darwin-amd64.tar.gz tar -zxvf velero-v1.8.1-darwin-amd64.tar.gz sudo cp velero-v1.8.1-darwin-amd64/velero /usr/local/bin |
- чтобы проверить, что установка прошла успешно, выведите справку:
velero --help |
Если в терминале отобразилась справка о Velero, клиент установлен успешно.
Шаг 2. Создание бакета S3 в объектном хранилище #CloudМТС
- на странице Объектного хранилища создайте новое пространство имён (namespace) или используйте существующее
- если требуется создать новое пространство, запишите пароль (
Secret Key
); он понадобится в дальнейшем при настройке сервера Velero
Если вы забыли свой Secret Key,
его можно изменить в интерфейсе сервиса.
- после создания пространства перейдите на его страницу, нажав на его имя, чтобы посмотреть подробную информацию; запишите
Access Key
; он понадобится в дальнейшем при настройке сервера Velero - нажмите на кнопку [Добавить], чтобы создать бакет, укажите имя бакета, затем снова нажмите на кнопку [Добавить]
В примерах на этой странице в качестве названия бакета указано velero.
- создайте файл
s3-creds
с ключами доступа, полученными ранее:
[default] aws_access_key_id=<Access key> aws_secret_access_key=<Secret Key> |
Шаг 3. Установка сервера Velero на кластер
- скачайте файл
kubeconfig
;
Чтобы скачать kubeconfig:
- на странице Containerum Kubernetes нажмите на строку кластера Kubernetes
- в правом верхнем углу нажмите кнопку Скачать kubeconfig
Команды, в которых нужно взаимодействовать с кластерами (шаги 3, 4, 5 и 6), необходимо выполнять из терминала локальной машины, на которой установлен клиент Velero. Чтобы выполнить команду на стороне кластера, необходимо определить путь к файлу kubeconfig. Для этого можно соблюсти одно из следующих условий:
- перенести соответствующий файл kubeconfig в директорию ~/.kube
- задать переменную окружения KUBECONFIG с указанием полного пути к файлу kubeconfig
- применить дополнительный флаг --kubeconfig в командах вызова velero и kubectl с указанием полного пути к файлу kubeconfig
- в терминале выполните команду:
velero install \ --provider aws \ --use-restic \ --default-volumes-to-restic \ --use-volume-snapshots=false \ --plugins velero/velero-plugin-for-aws:v1.4.0 \ --bucket velero \ --secret-file {путь до файла s3-creds} \ --backup-location-config region=msk,s3ForcePathStyle="true",s3Url=https://s3mts.ru |
Параметры
--provider | имя провайдера объектного хранилища |
--use-restic и -- default-volumes-to-restic | включение Restic для резервных копий PV (внешняя ссылка) |
--use-volume-snapshots=false | отключение резервных копий PV с текущим провайдером копирования томов. Для создания резервных копий будет использоваться плагин |
--plugins | плагин для взаимодействия с S3-хранилищем, в котором будут сохраняться резервные копии |
--bucket | имя бакета в S3-хранилище, в котором будут сохраняться резервные копии |
--secret-file | путь к файлу с ключами доступа к S3-хранилища |
--backup-location-config | параметры хранилища резервных копий. В region указывается регион размещения, в s3Url указывается URL-адрес хранилища S3 |
--s3ForcePathStyle=true | использовать ли path-style адресацию вместо адресации виртуальных размещенных бакетов (virtual hosted bucket addressing). Установлено значение "true", так как используется локальная служба хранения |
Velero и его плагины требовательны к вычислительным ресурсам. Рекомендуемая минимальная конфигурация узлов кластера для установки: 2 CPU и 2 Гбайт RAM.
Требования по вычислительным ресурсам плагина Restic пропорциональны объемам Persistent Volumes. Если планируется создавать резервные копии большого объема данных, увеличьте значения параметров limits
и requests
для настройки restic
, как описано в документации Velero.
- проверьте результат выполнения:
CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: already exists, proceeding CustomResourceDefinition/backups.velero.io: created ... Deployment/velero: attempting to create resource Deployment/velero: already exists, proceeding Deployment/velero: created Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status. |
- убедитесь, что под (pod) Velero запущен и находится в состоянии
Running
:
kubectl get pods -n velero |
- проверьте результат выполнения:
NAME READY STATUS RESTARTS AGE restic-gzqr2 1/1 Running 0 3m34s velero-7bc4b5cd46-2mpzx 1/1 Running 0 5m9s |
Шаг 4. Создание резервной копии кластера k8s
На этом шаге выполняется создание резервной копии кластера. В примерах используется сервис, который каждые 5 секунд записывает в файл текущие дату и время.
- сохраните следующий текст спецификации в YAML-файл с именем
backup-test.yaml
и через kubectl примените данную спецификацию; подробнее работа с выделенными томами описана в данной статье
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-pvc annotations: volume.beta.kubernetes.io/storage-class : mts-ssd-fast spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: v1 kind: Pod metadata: name: pod spec: containers: - name : app image: ubuntu command: [ "/bin/sh" ] args: [ "-c" , "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done" ] volumeMounts: - name : persistent-storage mountPath: /data volumes: - name : persistent-storage persistentVolumeClaim: claimName: test-pvc |
kubectl apply -f backup-test.yaml |
- выполните команду, чтобы проверить, что все работает:
kubectl exec -it pod -- cat /data/out.txt |
- проверьте результат выполнения:
... Thu May 12 02:27:23 UTC 2022 Thu May 12 02:27:28 UTC 2022 Thu May 12 02:27:33 UTC 2022 |
- для создания резервной копии выполните:
velero backup create test-backup --exclude-namespaces kube-system,velero |
Данная команда приведена как пример и создаёт резервную копию всего кластера. В реальных задачах рекомендуется гранулярно настраивать объекты резервного копирования, чтобы снизить нагрузку и ускорить создание резервной копии. Для создания гранулярных копий используйте параметры, описанные в разделе Параметры настройки гранулярных копий данной статьи. Рекомендуется настроить расписание резервного копирования, как описано в документации Velero.
Параметры
backup create test-backup | команда для создания резервной копии кластера с именем test-backup |
--exclude-namespaces kube-system , velero | параметр, задающий исключенные из резервной копии пространства имен (в данном случае - системные настройки кластера и сам Velero) |
Параметры настройки гранулярных копий
Чтобы получить детальную информацию о доступных опциях бэкапа, выполните команду:
velero backup create -h |
Отобразится список команд:
$ velero backup create -h |
---|
Flags: -- default -volumes-to-restic optionalBool[= true ] Use restic by default to backup all pod volumes --exclude-namespaces stringArray Namespaces to exclude from the backup. --exclude-resources stringArray Resources to exclude from the backup, formatted as resource.group, such as storageclasses.storage.k8s.io. --from-schedule string Create a backup from the template of an existing schedule. Cannot be used with any other filters. Backup name is optional if used. -h, --help help for create --include-cluster-resources optionalBool[= true ] Include cluster-scoped resources in the backup --include-namespaces stringArray Namespaces to include in the backup (use '*' for all namespaces). ( default *) --include-resources stringArray Resources to include in the backup, formatted as resource.group, such as storageclasses.storage.k8s.io (use '*' for all resources). --label-columns stringArray A comma-separated list of labels to be displayed as columns --labels mapStringString Labels to apply to the backup. --ordered-resources string Mapping Kinds to an ordered list of specific resources of that Kind. Resource names are separated by commas and their names are in format 'namespace/resourcename' . For cluster scope resource, simply use resource name. Key-value pairs in the mapping are separated by semi-colon. Example: 'pods=ns1/pod1,ns1/pod2;persistentvolumeclaims=ns1/pvc4,ns1/pvc8' . Optional. -o, --output string Output display format. For create commands, display the object but do not send it to the server. Valid formats are 'table' , 'json' , and 'yaml' . 'table' is not valid for the install command. -l, --selector labelSelector Only back up resources matching this label selector. ( default <none>) --show-labels Show labels in the last column --snapshot-volumes optionalBool[= true ] Take snapshots of PersistentVolumes as part of the backup. --storage-location string Location in which to store the backup. --ttl duration How long before the backup can be garbage collected. ( default 720h0m0s) --volume-snapshot-locations strings List of locations (at most one per provider) where volume snapshots should be stored. -w, --wait Wait for the operation to complete. |
Шаг 5. Проверка резервной копии кластера k8s
- чтобы убедиться, что резервная копия создана успешно, выполните:
velero backup get |
- проверьте результат выполнения:
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR test-backup Completed 0 0 2022-05-12 10:18:24 +0300 MSK 29d default <none> |
подключитесь к кластеру, в котором будем восстанавливать бэкап
установите Velero по инструкции, как указано в Шаге 3
- убедитесь, что резервная копия доступна в новом кластере:
velero backup get |
- проверьте результат выполнения:
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR test-backup Completed 0 0 2022-05-12 10:18:24 +0300 MSK 29d default <none> |
Шаг 6. Восстановление кластера k8s из резервной копии
чтобы восстановить кластер, выполните команду на новом кластере:
velero restore create --from-backup test-backup --include-namespaces
default
убедитесь, что восстановление прошло успешно:
velero restore get
проверьте результат выполнения:
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
test-backup-20220512122935 test-backup Completed 2022-05-12 12:29:35 +0300 MSK 2022-05-12 12:29:37 +0300 MSK 0 6 2022-05-12 12:29:35 +0300 MSK <none>
проверьте восстановленные данные. Для этого найдите строку с датой создания резервной копии:
kubectl exec -it pod -- cat /data/out.txt | grep "Thu May 12 02:27:23 UTC 2022"
проверьте результат выполнения:
Thu May 12 02:27:23 UTC 2022
Описания и инструкции, размещаемые на данном ресурсе, носят исключительно информационный характер и не могут рассматриваться в качестве гарантий, заверений, рекомендаций или документа, порождающего какие-либо обязательства МТС. Конкретные условия использования сервисов определяются договорами с клиентом. МТС не несет ответственности за содержание публикуемых инструкций и результаты их применения клиентом. Актуальность отдельных положений публикуемых описаний и инструкций необходимо уточнять у аккаунт-менеджера или службы технической поддержки support@cloud.mts.ru