База знаний
Подключиться Консультация
Получить консультацию Подключиться
Облачные сервисы
Виртуальный рабочий стол
Передовые сервисы по предоставлению сотрудникам безопасного удалённого доступа к мощным виртуальным десктопам и корпоративным ресурсам клиента с любого устройства, из любой точки мира.
Корпоративные сервисы
Удобные сервисы для обмена документами или файлами между сотрудниками компании в том числе за пределами организации, а также настройка ИТ‑инфраструктуры «под ключ» для Вашего бизнеса от экспертов облака МТС. Благодаря этим сервисам сотрудники экономят рабочее время на выполнение ежедневным рутинных задач, тем самым повышается их эффективность.
Сетевые сервисы
Мы обеспечиваем комплекс решений по построению и оптимизации сетевой инфраструктуры. Это позволит вам быстро и эффективно реализовать необходимую связность между различными сервисами с определенными параметрами качества.
Хранение и резервирование данных
Надежно и стабильно с МТС Cloud. Мы обеспечиваем хранение любых видов и объемов данных. Это позволит вам быстро и эффективно работать с данными и приложениями.
Аренда оборудования
Сервисы собственной разработки, которые помогут повысить эффективность работы ИТ‑подразделений.
Проектные решения
Партнерские сервисы
Стать партнером
Поддержка
База Знаний #CloudMTS
База знаний #CloudMTS / Containerum Kubernetes / Резервное копирование с помощью Velero и объектного хранилища #CloudMTS

Резервное копирование с помощью Velero и объектного хранилища #CloudMTS

Данная статья описывает как создать резервную копию кластера Kubernetes (также K8s) с помощью Velero, а затем развернуть её на текущем или новом кластере.

Инструмент Velero

Velero позволяет подготовить кластер Kubernetes к обновлению и восстановить его в случае сбоя. При помощи Velero возможно:

  • создавать сжатые резервные копии объектов и ресурсов кластера Kubernetes в объектном хранилище по требованию и по расписанию
  • восстанавливать копии из хранилища резервных копий

Инструмент возможно использовать в сценариях:

  • восстановления кластера после сбоев
  • тиражирования кластера с сохранением пользовательских настроек
  • миграции кластеров Kubernetes
  • резервного копирования и восстановления томов Persistent Volumes

Прежде чем начать работать с Velero необходимо произвести установку:

  • сервера на кластер Kubernetes; сервер Velero производит операцию резервного копирования данных и взаимодействует с Объектным хранилищем #CloudMTS
  • клиента на локальный компьютер администратора кластера Kubernetes; клиент Velero понадобится для настройки сервера Velero на кластере kubernetes

Работа с Velero

Шаг 1. Установка клиента Velero


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

Описания и инструкции, размещаемые на данном ресурсе, носят исключительно информационный характер и не могут рассматриваться в качестве гарантий, заверений, рекомендаций или документа, порождающего какие-либо обязательства МТС. Конкретные условия использования сервисов определяются договорами с клиентом. МТС не несет ответственности за содержание публикуемых инструкций и результаты их применения клиентом. Актуальность отдельных положений публикуемых описаний и инструкций необходимо уточнять у аккаунт-менеджера или службы технической поддержки hub-support@cloud.mts.ru