Введение
В этом руководстве вы узнаете, как развернуть TrilioVault для Kubernetes (или TVK) на вашем кластере DOKS, создавать резервные копии и восстанавливаться из резервной копии в случае проблем. Вы можете создавать резервные копии всего кластера или выбирать резервные копии на основе пространства имен или меток.
Преимущества использования Trilio:
- Создавайте полные (или дифференциальные) резервные копии кластера и восстанавливайтесь в случае потери данных.
- Переносите данные с одного кластера на другой.
- Поддерживаются резервные копии релизов Helm.
- Запускайте предварительные и пост-хуки для операций резервного копирования и восстановления.
- Веб-консоль управления, которая позволяет подробно проверить состояние ваших операций по резервному копированию/восстановлению.
- Задавайте политики удержания для ваших резервных копий.
- Жизненный цикл приложения (то есть, TVK сам) можно управлять с помощью специального оператора TrilioVault`.
- Интеграция с Velero.
- Вы можете создавать резервные копии и восстанавливать приложения, основанные на операторе.
Дополнительную информацию можно найти в официальной документации TVK CRDs.
Содержание
- Предварительные условия
- Шаг 1 – Установка TrilioVault для Kubernetes
- Шаг 2 – Создание цели TrilioVault для хранения резервных копий
- Шаг 3 – Знакомство с веб-консолью управления TVK
- Шаг 4 – Пример резервного копирования и восстановления с пространством имен
- Шаг 5 – Пример резервного копирования и восстановления всего кластера
- Шаг 6 – Запланированные резервные копии
- Шаг 7 – Политика хранения резервных копий
- Заключение
Предварительные условия
Для завершения этого учебного пособия вам понадобятся следующие инструменты:
- A DO Spaces Bucket and access keys. Save the access and secret keys in a safe place for later use.
- A Git client to clone the Starter Kit repository.
- Helm, для управления выпусками и обновлениями TrilioVault Operator.
- Doctl для взаимодействия с API DigitalOcean.
- Kubectl для взаимодействия с Kubernetes.
Чтобы TrilioVault работал корректно и выполнял резервное копирование ваших PVC, DOKS должен быть настроен для поддержки интерфейса хранилища контейнеров (или CSI в кратком виде). По умолчанию он поставляется с уже установленным и настроенным драйвером. Вы можете проверить с помощью следующей команды:
Вывод должен выглядеть примерно так:dobs.csi.digitalocean.com.
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
do-block-storage (default) dobs.csi.digitalocean.com Delete Immediate true 10d
Для успешной установки TrilioVault также необходимо наличие Определения Пользовательского Ресурса (CRD) volumeSnapshot
. Вы можете проверить с помощью следующей команды:
Вывод должен выглядеть примерно так. Если CRD VolumeSnapshot
не установлен, обратитесь к Установка CRD VolumeSnapshot.
volumesnapshotclasses.snapshot.storage.k8s.io 2022-02-01T06:01:14Z
volumesnapshotcontents.snapshot.storage.k8s.io 2022-02-01T06:01:14Z
volumesnapshots.snapshot.storage.k8s.io 2022-02-01T06:01:15Z
Также убедитесь, что CRD поддерживает обе версии API v1beta1
и v1
. Вы можете запустить следующую команду, чтобы проверить версию API:
В конце YAML-файла CRD должен быть список storedVersions
, содержащий значения v1beta1
и v1
(если не установлен, обратитесь к Установка CRD VolumeSnapshot):
...
- lastTransitionTime: "2022-01-20T07:58:06Z"
message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
reason: ApprovedAnnotation
status: "True"
type: KubernetesAPIApprovalPolicyConformant
storedVersions:
- v1beta1
- v1
Шаг 1 – Установка TrilioVault для Kubernetes
В этом шаге вы узнаете, как развернуть TrilioVault для DOKS и управлять установками TVK с помощью Helm. Резервные копии данных будут храниться в созданном ранее в разделе Предварительные требования ведре DO Spaces.
Приложение TrilioVault можно установить несколькими способами:
- Через оператор TrilioVault. Вы определяете CRD
TrilioVaultManager
, который сообщает операторуTrilioVault
, как обрабатывать установку, постконфигурационные шаги и будущие обновления компонентов приложения Trilio. - Через чарт triliovault-operator, полностью управляемый с помощью Helm, (рассмотрено в этом руководстве).
Установка TrilioVault с использованием Helm
В руководстве по Starter Kit используется тип установки “Кластер” для приложения TVK (значение Helm applicationScope
установлено на “Кластер”). Все примеры из этого руководства зависят от этого типа установки для правильной работы.
Сначала клонируйте репозиторий Git Starter Kit и перейдите в каталог вашей локальной копии:
Затем добавьте репозиторий TrilioVault Helm и перечислите доступные чарты:
Вывод выглядит примерно следующим образом:
NAME CHART VERSION APP VERSION DESCRIPTION
triliovault-operator/k8s-triliovault-operator 2.9.2 2.9.2 K8s-TrilioVault-Operator is an operator designe...
Диаграмма интереса представляет собой triliovault-operator/k8s-triliovault-operator
, который установит TrilioVault для Kubernetes на кластере вместе с TrilioVault-Manager. Вы можете запустить helm show values triliovault-operator/k8s-triliovault-operator
и экспортировать в файл, чтобы увидеть все доступные опции.
Затем откройте и проверьте файл значений TrilioVault Helm, предоставленный в репозитории Starter kit, используя редактор на ваш выбор (желательно с поддержкой YAML линта).
Наконец, установите TrilioVault для Kubernetes, используя Helm:
–create-namespace \
Вышеприведенная команда устанавливает как TrilioVault Operator, так и TriloVault Manager (TVM) Custom Resource, используя параметры, предоставленные в файле triliovault-values.yaml
. Версия TVK теперь управляется полем tag
в файле 05-setup-backup-restore/assets/manifests/triliovault-values.yaml
, поэтому команда helm всегда содержит последнюю версию TVK.
- Вы можете обновить следующие поля в
values.yaml
: installTVK.applicationScope
для установки TVK, ограниченного областью, напримерCluster
илиNamespaced
installTVK.ingressConfig.host
для имени хоста TVK UI, напримерtvk-doks.com
installTVK.ComponentConfiguration.ingressController.service.type
для типа службы, предназначенной для доступа к TVK UI, например NodePort
или LoadBalancer
Теперь проверьте развертывание TVK:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
triliovault-manager-tvk tvk 1 2022-06-08 08:30:08.490304959 +0000 UTC deployed k8s-triliovault-2.9.2 2.9.2
triliovault-operator tvk 1 2022-06-08 11:32:55.755395 +0300 EEST deployed k8s-triliovault-operator-2.9.2 2.9.2
Выходные данные выглядят примерно так (Статус
столбец должен отображать развернут
):
Затем убедитесь, что TrilioVault запущен и работает:
NAME READY UP-TO-DATE AVAILABLE AGE
k8s-triliovault-admission-webhook 1/1 1 1 83s
k8s-triliovault-control-plane 1/1 1 1 83s
k8s-triliovault-exporter 1/1 1 1 83s
k8s-triliovault-ingress-nginx-controller 1/1 1 1 83s
k8s-triliovault-web 1/1 1 1 83s
k8s-triliovault-web-backend 1/1 1 1 83s
triliovault-operator-k8s-triliovault-operator 1/1 1 1 4m22s
Вывод выглядит примерно следующим образом. Все развернутые поды должны находиться в состоянии Готово
.
Если вывод выглядит так, вы успешно установили TVK. Затем вы узнаете, как проверить тип и действительность лицензии, а также как ее продлить.
Лицензирование приложения TrilioVault
- По умолчанию при установке TVK через Helm не устанавливается пробная лицензия. Вы всегда можете перейти на веб-сайт Trilio и сгенерировать новую лицензию для вашего кластера, которая соответствует вашим потребностям (например, вы можете выбрать базовый тип лицензии, который позволяет вам бесконечно запускать TrilioVault, если емкость вашего кластера не превышает 10 узлов). Пробная лицензия позволяет запускать TVK в течение одного месяца на неограниченном количестве узлов кластера.
- TrilioVault бесплатен для кластеров Kubernetes с до 100000 узлов для пользователей DigitalOcean. Они могут следовать следующим шагам для создания специальной лицензии, доступной только для клиентов DO.
Примеры стартового набора зависят от типа лицензии Кластер для правильной работы.
Создание и проверка лицензирования приложения TVK
Запустите следующую команду, чтобы создать новую лицензию для вашего кластера (она управляется с помощью CRD лицензии):
Вышеуказанная команда создаст задание job.batch/tvk-license-digitalocean
, которое запустит под tvk-license-digitalocean-828rx
для извлечения лицензии из сервера лицензий Trilio и установки ее на кластер DOKS. После завершения задания оно будет удалено через 60 секунд.
Если вы загружаете бесплатную лицензию с веб-сайта Trilio, примените ее с помощью этой команды:
Пожалуйста, выполните следующую команду, чтобы убедиться, что лицензия установлена и находится в состоянии Active
на вашем кластере.
NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES
test-license-1 Active Cluster License Activated successfully. 1 FreeTrial 100000 2023-02-25T00:00:00Z 1
Вывод выглядит примерно следующим образом. Обратите внимание на STATUS
, который должен быть Active
, а также на тип лицензии в столбце EDITION
и EXPIRATION TIME
.
Лицензия управляется с помощью специального CRD, называемого объектом License
. Вы можете осмотреть его, выполнив следующую команду:
Вывод выглядит примерно следующим образом. Обратите внимание на поля Message
и Capacity
, а также на Edition
.
Вышеуказанный вывод также сообщит вам, когда истечет срок действия лицензии в поле Время истечения срока действия
, а также Область применения
(в этом случае Cluster
). Вы можете выбрать лицензию для всего кластера или лицензию на основе пространства имен.
Обновление лицензии на приложение TVK
Чтобы продлить лицензию, вам нужно запросить новую на веб-сайте Trilio, перейдя на страницу лицензирования, чтобы заменить старую. После заполнения формы вы должны получить манифест YAML лицензии, который можно применить к вашему кластеру с помощью kubectl
. Приведенные ниже команды предполагают, что TVK установлен в пространстве имен tvk
по умолчанию (пожалуйста, замените необходимые места с <>
):
# Получите информацию о конкретной лицензии из пространства имен `tvk`
На следующем шаге вы узнаете, как определить бэкэнд хранения для TrilioVault для хранения резервных копий, называемый целью.
Шаг 2 – Создание цели TrilioVault для хранения резервных копий
A typical Target
definition looks like:
TrilioVault сначала должен знать, где хранить ваши резервные копии. TrilioVault обращается к хранилищу, используя термин target
, и его управление осуществляется с помощью специального CRD с именем Target
. Поддерживаются следующие типы целей: S3
и NFS
. Для DigitalOcean и целей стартового комплекта имеет смысл полагаться на тип хранилища S3
, потому что он дешев и масштабируем. Чтобы получить дополнительный уровень защиты, вы можете создать несколько типов целей (как для S3
, так и для NFS
), чтобы ваши данные оставались в безопасности в нескольких местах, тем самым обеспечивая резервирование резервных копий.
- В этой конфигурации,
spec.type
: Тип цели для хранения резервных копий (S3 – объектное хранилище).spec.vendor
: Хостинг цели сторонним поставщиком хранилища (для DigitalOcean Spaces вам нужно использоватьOther
вместоAWS
).spec.enableBrowsing
: Включение просмотра для цели.spec.objectStoreCredentials
: Определяет необходимые учетные данные (черезcredentialSecret
) для доступа к хранилищуS3
, а также другие параметры, такие как регион и имя бакета.
spec.thresholdCapacity
: Максимальная пороговая емкость для хранения данных резервных копий.
# значение должно быть закодировано в base64
Обратите внимание, что имя секрета – trilio-s3-target
, и на него ссылается поле spec.objectStoreCredentials.credentialSecret
CRD Цели, ранее объясненное. Secret
может находиться в том же namespace
, где установлен TrilioVault (по умолчанию tvk), или в другом выбранном вами пространстве имен. Просто убедитесь, что вы правильно ссылаетесь на пространство имен. С другой стороны, пожалуйста, убедитесь, что вы защитили пространство имен, где хранятся секреты TrilioVault, через RBAC по соображениям безопасности.
Шаги по созданию Цели для TrilioVault:
Сначала измените каталог, где был клонирован репозиторий Starter Kit на вашем локальном компьютере:
Затем создайте секрет Kubernetes, содержащий учетные данные вашего целевого ведра S3 (замените заполнители <>
соответствующим образом):
–from-literal=accessKey=“<ВАШ_КЛЮЧ_ДОСТУПА_К_DO_SPACES_ЗДЕСЬ>” \
–from-literal=secretKey=“<ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_DO_SPACES_ЗДЕСЬ>”
Затем откройте и проверьте целевой файл манифеста, предоставленный в репозитории Starter Kit, используя выбранный вами редактор (желательно с поддержкой YAML lint).
Теперь, замените заполнители <>
соответственно для вашего ведра DO Spaces Trilio, такие как bucketName
, region
, url
и credentialSecret
.
Наконец, сохраните файл манифеста и создайте объект Target с помощью kubectl
:
NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED
trilio-s3-target ObjectStore 10Gi Other Available
Далее, TrilioVault создаст рабочую задачу с именем trilio-s3-target-validator
, ответственную за проверку вашего ведра S3 (например, доступность, разрешения и т. д.). Если задача завершится успешно, ведро считается здоровым или доступным, и ресурс задачи trilio-s3-target-validator
удаляется после этого. Если что-то пойдет не так, задача валидатора цели S3 останется запущенной, чтобы вы могли проверить журналы и найти возможную проблему.
Теперь, пожалуйста, продолжите и проверьте, является ли ресурс Target, созданный ранее, здоровым:
# Вывод выглядит примерно так:
...
INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
Traceback (most recent call last):
File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
mount_s3_datastore(metadata_list, base_path)
File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
wait_until_mount(base_path)
File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
base_path))
Exception: /triliodata is not a mountpoint. We can't proceed further.
...
#trilio-s3-target-validator-tio99a-6lz4q 1/1 Запущен 0 104с
# Теперь получите данные журналов
Результат будет следующим исключением:
Затем вы обнаружите веб-консоль TVK, которая является полезным дополнением для управления операциями резервного копирования и восстановления, среди многих других.
Шаг 3 – Знакомство с веб-консолью управления TVK
Хотя вы можете управлять операциями резервного копирования и восстановления полностью из командной строки с помощью kubectl
и CRD, TVK предоставляет веб-консоль управления для выполнения тех же операций через графический интерфейс. Управление консолью упрощает обычные задачи с помощью операций щелчка мыши, обеспечивает лучшую визуализацию и проверку объектов кластера TVK, а также создание планов восстановления после катастрофы (или DRP).
Установка на основе Helm, рассмотренная в Шаг 1 – Установка TrilioVault для Kubernetes, уже позаботилась о установке необходимых компонентов для веб-консоли управления.
Получение доступа к веб-консоли управления TVK
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8s-triliovault-admission-webhook ClusterIP 10.245.202.17 <none> 443/TCP 13m
k8s-triliovault-ingress-nginx-controller NodePort 10.245.192.140 <none> 80:32448/TCP,443:32588/TCP 13m
k8s-triliovault-ingress-nginx-controller-admission ClusterIP 10.3.20.89 <none> 443/TCP 13m
k8s-triliovault-web ClusterIP 10.245.214.13 <none> 80/TCP 13m
k8s-triliovault-web-backend ClusterIP 10.245.10.221 <none> 80/TCP 13m
triliovault-operator-k8s-triliovault-operator-webhook-service ClusterIP 10.245.186.59 <none> 443/TCP 16m
Чтобы иметь возможность получить доступ к консоли и изучить предлагаемые функции, вам необходимо перенаправить порт службы контроллера входящего трафика для TVK.
Вывод будет похож на следующий. Найдите строку k8s-triliovault-ingress-nginx-controller
и обратите внимание, что она прослушивает порт 80
в столбце PORT(S)
.
127.0.0.1 tvk-doks.com
TVK использует контроллер входящего трафика Nginx для маршрутизации трафика к службам веб-консоли управления. Маршрутизация осуществляется на основе хоста, и имя хоста tvk-doks.com
определено в файле значений Helm из Начального комплекта:
# Имя хоста для доступа к веб-консоли через контроллер входящего трафика TVK ingress nginx
Наконец, экспортируйте файл kubeconfig
для вашего кластера DOKS. Этот шаг необходим, чтобы веб-консоль могла аутентифицировать вас.
# Перечислите доступные кластеры
# Сохраните конфигурацию кластера в формате YAML
Если у вас есть только один кластер, выполните следующую команду:
После выполнения этих шагов вы сможете получить доступ к консоли в веб-браузере, перейдя по адресу: http://tvk-doks.com:8080. Когда будет запрошен файл kubeconfig
, выберите тот, который вы создали в предыдущей команде выше.
Пожалуйста, сохраните созданный файл kubeconfig
в безопасном месте, так как он содержит чувствительные данные.
- Изучение пользовательского интерфейса веб-консоли TVK
- Исследуйте каждый раздел слева, например:
- Управление кластером: Здесь показан список основных и других кластеров с экземплярами TVK, добавленных в основной кластер OVH с использованием функции управления несколькими кластерами.
- Резервное копирование и восстановление: Это основная панель управления, которая предоставляет общий обзор всего кластера, таких как обнаруженные пространства имен, приложения, список планов резервного копирования, цели, хуки, политики и т. д.
Мониторинг: Здесь есть два варианта – Мониторинг TrilioVault и Мониторинг Velero, если у пользователя настроен Velero на их кластере OVH.
Аварийное восстановление: Позволяет управлять и выполнять операции по аварийному восстановлению.
Аварийное восстановление: Позволяет управлять и выполнять операции по аварийному восстановлению.
Вы также можете увидеть ранее созданную цель S3, перейдя в Резервное копирование и восстановление -> Цели -> <Пространство_имен> из выпадающего списка вверху.
Далее вы можете просматривать цель и перечислять доступные резервные копии, нажав на кнопку Действия справа, а затем выбрав опцию Запустить браузер из всплывающего меню. Для работы этой функции цель должна иметь флаг enableBrowsing
, установленный в true
.
Для получения дополнительной информации и доступных функций ознакомьтесь с официальной документацией Пользовательский интерфейс веб-консоли управления TVK.
Затем вы узнаете, как выполнять операции по резервному копированию и восстановлению для конкретных случаев использования.
Шаг 4 – Пример резервного копирования и восстановления с пространствами имен
На этом этапе вы узнаете, как создать одноразовую резервную копию для всего пространства имен (ambassador
в данном случае) из вашего кластера DOKS и затем восстановить ее, убедившись, что все ресурсы воссозданы. TVK имеет функцию, позволяющую выполнять резервное копирование на более высоком уровне, чем пространства имен.
- Создание резервной копии релиза Helm Ambassador
- Для выполнения резервного копирования для отдельного приложения на уровне пространства имен (или релиза Helm) требуется BackupPlan, за которым следует Backup CRD. BackupPlan – это определение ‘что’, ‘где’, ‘куда’ и ‘как’ процесса резервного копирования, но само по себе не выполняет фактическое резервное копирование. CRD Backup отвечает за запуск фактического процесса резервного копирования в соответствии с характеристиками BackupPlan.
- В этой конфигурации,
A typical Backup CRD looks like below:
spec.backupConfig.target.name
: Сообщает TVK, какое имя цели использовать для сохранения резервных копий.
spec.backupConfig.target.namespace
: Сообщает TVK, в каком пространстве имен была создана цель.spec.backupComponents
: Определяет список ресурсов для резервного копирования.
В этой конфигурации,
spec.type
: Указывает тип резервного копирования.
spec.backupPlan
: Указывает BackupPlan, который должен использовать это резервное копирование.
Шаги для запуска единоразового резервного копирования Helm-релиза Ambassador:
Сначала убедитесь, что Ambassador Edge Stack развернут в вашем кластере, следуя инструкциям из учебника Ambassador Ingress.
Затем перейдите в каталог, куда был клонирован репозиторий Starter Kit на вашем локальном компьютере:
Затем откройте и проверьте файлы манифестов Ambassador BackupPlan и Backup, предоставленные в репозитории Starter Kit, с помощью редактора по вашему выбору (желательно с поддержкой YAML-линтера).
NAME TARGET ... STATUS
ambassador-helm-release-backup-plan trilio-s3-target ... Available
Наконец, создайте ресурсы BackupPlan и Backup с помощью kubectl
.
Теперь проверьте статус BackupPlan (нацелившись на Helm-релиз ambassador
) с помощью kubectl
:
NAME BACKUPPLAN BACKUP TYPE STATUS ...
ambassador-helm-release-full-backup ambassador-helm-release-backup-plan Full InProgress ...
Вывод будет похож на следующий. Обратите внимание на значение столбца STATUS
, которое должно быть установлено на Available
.
Затем проверьте статус объекта Backup с помощью kubectl
:
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE
ambassador-helm-release-full-backup ambassador-helm-release-backup-plan Full Available ... 100
Вывод будет похож на следующий. Обратите внимание на значение столбца STATUS
, которое должно быть установлено на InProgress
, а также на значение BACKUP TYPE
, установленное на Full
.
После того как все компоненты релиза посла Helm загрузятся в целевую точку S3
, вы должны получить следующие результаты:
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/
2021-11-25 07:04 311 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup-namespace.json.manifest.00000004
2021-11-25 07:04 302 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backup.json.manifest.00000004
2021-11-25 07:04 305 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/backupplan.json.manifest.00000004
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/
2021-11-25 07:04 28 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/
2021-11-25 07:04 330 s3://trilio-starter-kit/6c68af15-5392-45bb-a70b-b26a93605bd9/5ebfffb5-442a-455c-b0de-1db98e18b425/custom/metadata-snapshot/metadata.json.manifest.00000002
...
# Вывод будет похож на следующий (обратите внимание, что `STATUS` изменится на `Available`, а `PERCENTAGE` будет равно `100`)
Если вывод выглядит так, то резервное копирование релиза посла ambassador
выполнено успешно. Теперь вы можете просмотреть, как TrilioVault хранит метаданные Kubernetes, выполнив перечисление содержимого бакета TrilioVault S3. Например, вы можете использовать s3cmd:
ambassador-helm-release-full-backup-metamover-mg9gl0--1-2d6wx 1/1 Running 0 4m32s
Вывод будет похож на следующий. Обратите внимание, что перечисление содержит JSON-манифесты и UID, представляющие объекты Kubernetes.
В случае если резервное копирование не станет доступным, вы можете проверить журналы из Pod metamover
, чтобы найти проблему:
...
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding: [edge-stack]","time":"2022-06-14T06:20:56Z"}
{"component":"meta-mover","file":"pkg/metamover/snapshot/parser/commons.go:1366","func":"github.com/trilioData/k8s-triliovault/pkg/metamover/snapshot/parser.(*Component).ParseForDataComponents","level":"info","msg":"Parsing data components of resource rbac.authorization.k8s.io/v1, Kind=RoleBinding: [edge-stack-agent-config]","time":"2022-06-14T06:20:56Z"}
...
Вывод будет похож на следующий:
Теперь получите данные журналов:
Вывод будет похож на следующий.
Наконец, вы можете проверить, что резервная копия также доступна в веб-консоли, перейдя в Управление ресурсами -> Посол -> Планы резервного копирования. Обратите внимание, что он находится в состоянии Available
и что релиз посла Helm был резервирован в подвижке Детали компонента.
Удаление релиза посла и ресурсов посла Helm
Теперь продолжайте и имитируйте катастрофу путем намеренного удаления релиза Helm ambassador
:
Затем проверьте, что ресурсы пространства имен были удалены (список должен быть пустым):
- Наконец, убедитесь, что конечная точка бэкэнд-сервисов
echo
иquote
находится в состоянииDOWN
. Пожалуйста, обратитесь к Создание бэкэнд-сервисов Ambassador Edge Stack относительно бэкэнд-приложений, используемых в руководстве по Starter Kit. Вы можете использоватьcurl
для тестирования (или можете использовать веб-браузер): - Восстановление резервной копии релиза Ambassador Helm
- Важно
Если восстанавливаете то же самое пространство имен, убедитесь, что исходные компоненты приложения были удалены. Особенно PVC приложения удален.
Если восстановление происходит в другой кластер (сценарий миграции), убедитесь, что TrilioVault для Kubernetes также работает в удаленном пространстве имен/кластере. Для восстановления в новый кластер (где CR резервного копирования не существует), source.type
должен быть установлен в location
. Пожалуйста, обратитесь к разделу Определение ресурсов настраиваемого восстановления, чтобы посмотреть пример восстановления по местоположению.
- При удалении пространства имен
ambassador
также будет удален ресурс балансировщика нагрузки, связанный с сервисом ambassador. Поэтому при восстановлении сервисаambassador
балансировщик нагрузки будет воссоздан DigitalOcean. Проблема заключается в том, что вы получите НОВЫЙ IP адрес для вашего балансировщика нагрузки, поэтому вам нужно будет настроитьA записи
, чтобы направить трафик на ваши домены, размещенные на кластере. - Для восстановления конкретной резервной копии необходимо создать CRD
Restore
. Типичный CRD для восстановления выглядит следующим образом: - В этой конфигурации,
spec.source.type
: Указывает тип резервной копии для восстановления.
spec.source.backup
: Содержит ссылку на объект резервной копии, из которого нужно восстанавливаться.
spec.skipIfAlreadyExists
: Указывает, следует ли пропустить восстановление ресурса, если он уже существует в восстановленном пространстве имен.
Восстановление позволяет восстановить последнее успешное резервное копирование для приложения. Оно используется для восстановления одного пространства имен или Helm-релиза, защищенного резервным копированием CRD. Резервное копирование CRD идентифицируется по имени ambassador-helm-release-full-backup
.
Сначала просмотрите пример CRD восстановления из репозитория Starter Kit Git:
NAME STATUS DATA SIZE START TIME END TIME PERCENTAGE COMPLETED DURATION
ambassador-helm-release-restore Completed 0 2021-11-25T15:06:52Z 2021-11-25T15:07:35Z 100 43.524191306s
Затем создайте ресурс восстановления с помощью kubectl
:
Наконец, просмотрите статус объекта восстановления:
Вывод будет похож на следующий. Обратите внимание на столбец STATUS
, установленный в Completed
, а также на PERCENTAGE COMPLETED
, установленный в 100
.
Если вывод выглядит так, то процесс восстановления релиза Helm ambassador
завершен успешно.
NAME READY STATUS RESTARTS AGE
pod/ambassador-5bdc64f9f6-42wzr 1/1 Running 0 9m58s
pod/ambassador-5bdc64f9f6-nrkzd 1/1 Running 0 9m58s
pod/ambassador-agent-bcdd8ccc8-ktmcv 1/1 Running 0 9m58s
pod/ambassador-redis-64b7c668b9-69drs 1/1 Running 0 9m58s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ambassador LoadBalancer 10.245.173.90 157.245.23.93 80:30304/TCP,443:30577/TCP 9m59s
service/ambassador-admin ClusterIP 10.245.217.211 <none> 8877/TCP,8005/TCP 9m59s
service/ambassador-redis ClusterIP 10.245.77.142 <none> 6379/TCP 9m59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ambassador 2/2 2 2 9m59s
deployment.apps/ambassador-agent 1/1 1 1 9m59s
deployment.apps/ambassador-redis 1/1 1 1 9m59s
NAME DESIRED CURRENT READY AGE
replicaset.apps/ambassador-5bdc64f9f6 2 2 2 9m59s
replicaset.apps/ambassador-agent-bcdd8ccc8 1 1 1 9m59s
replicaset.apps/ambassador-redis-64b7c668b9 1 1 1 9m59s
Проверка целостности приложений после восстановления
Проверьте, что все ресурсы пространства имен ambassador
на месте и работают:
NAME HOSTNAME STATE PHASE COMPLETED PHASE PENDING AGE
echo-host echo.starter-kit.online Ready 11m
quote-host quote.starter-kit.online Ready 11m
Вывод будет похож на:
Получите хосты ambassador:
NAME SOURCE HOST SOURCE PREFIX DEST SERVICE STATE REASON
ambassador-devportal /documentation/ 127.0.0.1:8500
ambassador-devportal-api /openapi/ 127.0.0.1:8500
ambassador-devportal-assets /documentation/(assets|styles)/(.*)(.css) 127.0.0.1:8500
ambassador-devportal-demo /docs/ 127.0.0.1:8500
echo-backend echo.starter-kit.online /echo/ echo.backend
quote-backend quote.starter-kit.online /quote/ quote.backend
Вывод будет похож на следующий. Столбец STATE
должен быть Ready
, а столбец HOSTNAME
должен указывать на полностью определенное имя хоста.
Получите сопоставления ambassador:
Выходные данные выглядят примерно так. Обратите внимание на echo-backend
, который сопоставлен с хостом echo.starter-kit.online
и префиксом источника /echo/
, то же самое для quote-backend
.
Теперь вам необходимо обновить записи DNS A
, потому что ресурс балансировщика нагрузки DigitalOcean был воссоздан, и ему был назначен новый внешний IP-адрес.
Наконец, проверьте, отвечают ли бэкэнд-приложения на HTTP-запросы. Пожалуйста, обратитесь к Создание бэкэнд-сервисов Ambassador Edge Stack относительно используемых в учебнике Starter Kit бэкэнд-приложений.
Следующий шаг связан с резервным копированием и восстановлением всего кластера.
Шаг 5 – Пример резервного копирования и восстановления всего кластера
A typical ClusterBackupPlan
manifest targeting multiple namespaces looks like this:
На этом шаге вы симулируете сценарий восстановления после катастрофы. Весь кластер DOKS будет удален, а затем важные приложения восстановлены из предыдущей резервной копии.
Создание резервной копии кластера DOKS
Основная идея здесь заключается в выполнении резервного копирования кластера DOKS путем включения всех важных пространств имен, которые содержат ваши основные приложения и конфигурации.
Обратите внимание, что пространства имен, связанные с кластером DOKS, такие как kube-system
, не включены в список. Обычно они не требуются, если только нет особых случаев, когда требуется сохранить некоторые настройки на этом уровне.
Сначала измените каталог, в котором был клонирован репозиторий Starter Kit на вашем локальном компьютере:
Затем откройте и проверьте файлы манифестов ClusterBackupPlan
и ClusterBackup
, предоставленные в репозитории Starter Kit, с использованием редактора по вашему выбору (желательно с поддержкой проверки YAML).
NAME TARGET ... STATUS
starter-kit-cluster-backup-plan trilio-s3-target ... Available
Наконец, создайте ресурсы ClusterBackupPlan
и ClusterBackup
с помощью kubectl
:
Теперь проверьте статус ClusterBackupPlan
с помощью kubectl
:
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE COMPLETE
starter-kit-cluster-backup starter-kit-cluster-backup-plan Full Available ... 100
Вывод будет похож на следующий. Обратите внимание на значение столбца STATUS
, которое должно быть установлено в Available
.
Затем проверьте статус ClusterBackup
с помощью kubectl
:
Вывод будет похож на следующий. Обратите внимание на значение столбца STATUS
, которое должно быть установлено в Available
, а также на значение PERCENTAGE COMPLETE
, установленное на 100
.
Если вывод выглядит как выше, то все ваши важные пространства имен приложений были успешно скопированы.
Полное резервное копирование кластера может занять некоторое время в зависимости от того, сколько пространств имен и связанных ресурсов включено в процесс.
Вы также можете открыть главную панель инструментов веб-консоли и проверить резервную копию мультипространства имен (обратите внимание, как все важные пространства имен, которые были сохранены, выделены зеленым цветом, в структуре сота):
Повторное создание кластера DOKS и восстановление приложений
Важным аспектом, который следует иметь в виду, является то, что каждый раз, когда вы уничтожаете кластер DOKS, а затем восстанавливаете его, создается новый балансировщик нагрузки с новым внешним IP-адресом, когда TVK восстанавливает ваш контроллер входа. Поэтому, пожалуйста, убедитесь в обновлении ваших записей DNS DigitalOcean A
соответственно.
Теперь удалите весь кластер DOKS (убедитесь в замене заполнителей <>
соответствующим образом):
Затем повторно создайте кластер, как описано в Настройка Kubernetes DigitalOcean.
Чтобы выполнить операцию восстановления, вам необходимо установить приложение TVK, как описано в Шаг 1 – Установка TrilioVault для Kubernetes. Важно использовать тот же номер версии Helm Chart.
После успешного завершения установки настройте целевую ТВК, как описано в Шаг 2 – Создание целевого объекта TrilioVault для хранения резервных копий и укажите тот же ведро S3
, где находятся ваши резервные данные. Также убедитесь, что просмотр целей
включен.
Затем проверьте и активируйте новую лицензию, как описано в разделе Лицензирование приложения TrilioVault.
Для доступа к веб-интерфейсу консоли пользователя обратитесь к разделу Получение доступа к веб-консоли управления TVK.
Затем перейдите в Управление ресурсами -> Пространство имен TVK -> Цели (в случае Starter Kit пространство имен TVK – tvk
):
Далее просмотрите цель и перечислите доступные резервные копии, нажав на кнопку Действия. Затем выберите опцию Запуск браузера из всплывающего меню. Для этого работы цель должна иметь флаг enableBrowsing
, установленный в true
.
Теперь щелкните по элементу starter-kit-cluster-backup-plan в списке, а затем щелкните и разверните элемент starter-kit-cluster-backup из правого подоконника:
Для запуска процесса восстановления нажмите кнопку Восстановление.
Проверка состояния приложений кластера DOKS
Сначала убедитесь, что все ресурсы кластера Kubernetes проверены.
Затем убедитесь, что ваши записи DNS A обновлены, чтобы указывать на внешний IP-адрес вашего нового балансировщика нагрузки.
Наконец, бэкенд-приложения должны также реагировать на HTTP-запросы. Обратитесь к Создание бэкенд-сервисов Ambassador Edge Stack относительно используемых в учебнике Starter Kit бэкенд-приложений.
На следующем этапе вы узнаете, как выполнять запланированные (или автоматические) резервные копии для приложений вашего кластера DOKS.
Автоматическое создание резервных копий в соответствии с расписанием – это действительно полезная функция. Она позволяет перемотать время и восстановить систему к предыдущему рабочему состоянию, если что-то пойдет не так. В этом разделе представлен пример автоматического резервного копирования по расписанию каждые 5 минут (выбрано пространство имен kube-system
).
Сначала вам нужно создать CRD Policy
типа Schedule
, который определяет расписание резервного копирования в формате cron (таком же, как Linux
cron). Политики расписания могут использоваться как для CRD BackupPlan
, так и для CRD ClusterBackupPlan
. Типичный CRD политики расписания выглядит следующим образом (определяет расписание каждые 5 минут
):
# запуск каждые 5 минут
Затем вы можете применить политику расписания к CRD ClusterBackupPlan
, например, как показано ниже:
Вы можете заметить, что это базовый CRD ClusterBackupPlan
, ссылающийся на ранее определенный CRD Policy
через поле spec.backupConfig.schedulePolicy
. Вы можете создавать отдельные политики для полных или инкрементальных резервных копий, поэтому спецификация может содержать fullBackupPolicy
или incrementalBackupPolicy
.
Теперь, пожалуйста, создайте расписание Policy
, используя образец манифеста, предоставленный в руководстве по Starter Kit.
NAME POLICY DEFAULT
scheduled-backup-every-5min Schedule false
Перейдите в каталог, куда был клонирован репозиторий Starter Kit на вашем локальном компьютере.
Наконец, создайте ресурсы для запланированных резервных копий в пространстве имен kube-system
:
# Сначала создайте план резервного копирования для пространства имен kube-system
NAME TARGET ... FULL BACKUP POLICY STATUS
kube-system-ns-backup-plan-5min-schedule trilio-s3-target ... scheduled-backup-every-5min Available
# Создайте и запустите запланированную резервную копию для пространства имен kube-system
Проверьте состояние запланированного резервного копирования для kube-system
:
NAME BACKUPPLAN BACKUP TYPE STATUS ...
kube-system-ns-full-backup-scheduled kube-system-ns-backup-plan-5min-schedule Full Available ...
Вывод выглядит аналогично следующему. Обратите внимание на значение FULL BACKUP POLICY
, установленное на ресурс политики резервного копирования, созданный ранее, scheduled-backup-every-5min
, а также на значение STATUS
, которое должно быть Available
.
Проверьте состояние запланированного резервного копирования для kube-system
:
Вывод выглядит аналогично следующему. Обратите внимание на значение BACKUPPLAN
, установленное на ресурс резервного плана, созданный ранее, а также на значение STATUS
, которое должно быть Available
.
Теперь вы можете убедиться, что резервные копии выполняются с регулярным интервалом (5 минут), запросив ресурс резервного копирования кластера и проверив столбец START TIME
(kubectl get clusterbackup -n tvk
). Он должен отражать 5-минутный интервал, как показано на картинке ниже:
На следующем этапе вы узнаете, как настроить политику удержания резервных копий.
Шаг 7 – Политика удержания резервных копий
Политика удержания позволяет определить количество резервных копий для сохранения и частоту удаления резервных копий в соответствии с требованиями соответствия. CRD политики удержания предоставляет простую спецификацию YAML для определения количества резервных копий для сохранения в терминах дней, недель, месяцев, лет, последних и т. д.
- Использование политик хранения
- Политики хранения могут использоваться для CRD
BackupPlan
илиClusterBackupPlan
. Типичный манифестPolicy
для типаRetention
выглядит следующим образом: - Вышеописанная политика хранения переводится как:
- Каждую неделю сохранять одну резервную копию в среду.
Каждый месяц сохранять одну резервную копию 15-го числа.
A typical ClusterBackupPlan
example configuration that has a retention set looks like:
Каждый год сохранять одну резервную копию в марте.
В общем, должно быть 2 самые последние доступные резервные копии.
Базовый процесс создания ресурса политики хранения проходит таким же образом, как и для запланированных резервных копий. Вам нужно определить CRD BackupPlan
или ClusterBackupPlan
, чтобы ссылаться на политику хранения, а затем иметь объект Backup
или ClusterBackup
, чтобы запустить процесс.
Обратите внимание, что для ссылки на соответствующую политику используется поле retentionPolicy
. Конечно, вы можете иметь план резервного копирования, в котором установлены оба типа политик, чтобы выполнять запланированные резервные копии, а также управлять стратегиями хранения.
Использование политик очистки
Вам нужен способ утилизации всех тех объектов, которые больше не используются. Для этого вам необходимо ввести CRD Cleanup Policy
:
Вышеуказанная политика очистки должна быть определена в пространстве имен установки TVK. Затем для вас автоматически создается крон-задание, которое запускается каждые 30 минут и удаляет неудачные резервные копии на основе значения, указанного для backupdays
в поле spec.
Вывод
- В этом руководстве вы узнали, как выполнять резервное копирование как единовременно, так и по расписанию, а также восстанавливать все.
- Все основные задачи и операции, объясненные в этом руководстве, призваны дать вам базовое представление и понимание того, что способен делать TrilioVault для Kubernetes.
- Узнать больше
Резервное копирование и восстановление данных DOKS с использованием Velero