Поиск по сайту:

Как сделать резервную копию и восстановить кластер Kubernetes с помощью TrilioVault для Kubernetes


Автор выбрал программу Write for DOnations.

Введение

TrilioVault для Kubernetes (TVK) — это облачное решение, которое защищает метаданные и данные вашего приложения, сохраняя резервные копии по запросу в независимом репозитории хранилища.

Есть несколько преимуществ использования Trilio. С Trilio вы можете делать полные или инкрементные резервные копии вашего кластера и восстанавливать их в случае потери данных. Вы можете мигрировать из одного кластера в другой и запускать пре- и пост-хуки для операций резервного копирования и восстановления. Вы также можете запланировать резервное копирование и определить политики хранения для ваших резервных копий. Наконец, вы также можете использовать веб-консоль управления для подробной проверки состояния операций резервного копирования и восстановления (наряду со многими другими функциями).

В этой статье приведены инструкции по защите локального развертывания кластера Kubernetes или службы DigitalOcean Kubernetes с помощью TVK, включая приложения с отслеживанием состояния или без него, развернутые в кластере. В этом руководстве вы развернете TVK в своем кластере Kubernetes, создадите резервную копию кластера и выполните восстановление из резервной копии.

Предпосылки

Для выполнения этого урока вам потребуется следующее:

  • Учетная запись DigitalOcean. Если у вас его нет, зарегистрируйте новый аккаунт.
  • Кластер DigitalOcean Kubernetes с несколькими пространствами имен. Вы можете создать кластер, следуя нашей документации по созданию кластеров.
  • Как установить и настроить doctl.
  • Kubectl для взаимодействия с Kubernetes. Инструкции по установке и настройке см. в документации по продукту Kubernetes для инструментов установки.
  • Корзина DigitalOcean Spaces или любая корзина хранения объектов, совместимая с S3, с ключами доступа. Чтобы использовать корзину DigitalOcean Spaces, следуйте нашим руководствам по управлению административным доступом с помощью ключей доступа. Сохраните ключи access и secret в надежном месте для последующего использования. Вы также можете использовать экспорт NFS для хранения резервной копии.
  • Как установить программное обеспечение в кластерах Kubernetes с помощью диспетчера пакетов Helm 3.
  • Лицензия TrilioVault, сохраненная в виде файла yaml. В этом руководстве используется установка с областью действия Cluster, которую вам может потребоваться выбрать при получении лицензии. Для пользователей DigitalOcean установка TVK бесплатна в течение пяти лет. Если вы не используете кластер DigitalOcean Kubernetes, вам необходимо зарегистрироваться на веб-сайте Trilio, чтобы запросить лицензию TVK. Доступны бесплатные пробные версии и бесплатная базовая версия.

Шаг 1 — Настройка кластера Kubernetes

На этом шаге вы проверите конфигурацию своего кластера Kubernetes, чтобы убедиться, что TrilioVault работает правильно.

Чтобы TrilioVault работал правильно и выполнял резервное копирование PersistentVolumeClaim (PVC), кластер Kubernetes необходимо настроить для поддержки интерфейса Container Storage (CSI). По умолчанию управляемая служба DigitalOcean Kubernetes поставляется с уже установленным и настроенным драйвером CSI. Вы можете проверить это с помощью следующей команды:

  1. kubectl get storageclass

Вывод должен выглядеть примерно так:

Output
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE do-block-storage (default) dobs.csi.linux-console.net Delete Immediate true 1d

Как видите, поставщиком является dobs.csi.linux-console.net.

Для успешной установки TrilioVault также требуется volumeSnapshot Custom Resource Definition (CRD). Вы можете проверить это с помощью следующей команды:

  1. kubectl get crd | grep volumesnapshot

Если volumeSnapshot уже установлен, вывод будет выглядеть примерно так:

Output
volumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |

Если volumeSnapshot еще не установлен, обратитесь к документации по установке CRD VolumeSnapshot.

Наконец, убедитесь, что CRD поддерживает версию API v1, которую вы можете проверить, выполнив следующую команду:

  1. kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

В конце вывода CRD yaml вы должны увидеть список storedVersions, содержащий значения v1:

Output
... - 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: - v1

Если он не установлен, обратитесь к документации по установке CRD VolumeSnapshot.

На этом шаге вы подтвердили, что ваша конфигурация Kubernetes подготовлена для установки TrilioVault, что вы сделаете на следующем шаге.

Шаг 2 — Установка TrilioVault для Kubernetes

На этом этапе вы развернете TrilioVault для локального кластера Kubernetes и будете управлять установками TVK через Helm. Данные резервного копирования будут храниться в корзине, совместимой с S3, которую вы создали как часть предварительных требований.

Приложение TrilioVault можно установить в схему оператора triliovault.

В этом руководстве используется тип установки Cluster для приложения tvk. При таком типе установки TVK может защитить все приложения в пространствах имен. (Напротив, при установке с областью действия Namespace TVK может защищать только приложения, развернутые в этом пространстве имен.)

Чтобы установить TrilioVault для Kubernetes, вам потребуется лицензия, которую вы запросили в рамках предварительных требований. При получении лицензии TVK вам может потребоваться выбрать установку в кластере.

Установка TrilioVault с помощью Helm

Чтобы установить TrilioVault через Helm, сначала добавьте репозиторий TrilioVault Helm и выведите список доступных диаграмм с помощью следующей команды:

  1. helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
  2. helm repo update triliovault-operator
  3. helm search repo triliovault-operator

Вывод выглядит примерно так:

Output
NAME CHART VERSION APP VERSION DESCRIPTION triliovault-operator/k8s-triliovault-operator 2.10.3 2.10.3 K8s-TrilioVault-Operator is an operator designe...

Наконец, установите TrilioVault для Kubernetes с помощью helm:

  1. helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  2. --namespace tvk \
  3. --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
  4. --create-namespace

Эта команда устанавливает triliovault-operator и пользовательский ресурс TriloVault Manager (TVM) с использованием параметров по умолчанию, указанных в файле значений TrilioVault Helm, triliovault-values.yaml. .

  • Оператор TVK: у TVK есть оператор на базе Helm, которым управляет CRD под названием TrilioVault Manager. Оператор ТВК заботится о жизненном цикле приложения и об автовосстановлении в случае выхода из строя одного из компонентов приложения.
  • TVK Manager: Приложение TVK содержит несколько CRD и их контроллеры. У него есть собственный сервер веб-перехватчиков, который управляет проверкой и изменением его экземпляров CRD. Контроллеры согласовывают события, генерируемые операциями, выполняемыми на пользовательских ресурсах.

В этом руководстве используются значения по умолчанию из файла значений TrilioVault Helm (triliovault-values.yaml), в том числе следующие:

  • installTVK.applicationScope: областью установки TVK может быть кластер или пространство имен. Этот параметр защищает приложения либо в «кластере», либо в «пространстве имен», и лицензия TVK также создается на основе области установки. В этом руководстве используется установка с областью действия Cluster.
  • installTVK.ingressConfig.host: доменное имя для имени хоста пользовательского интерфейса TVK, которым является demo-tutorial.tvk-doks.com. Пользователи будут получать доступ к консоли управления TVK через это доменное имя.
  • installTVK.ComponentConfiguration.ingressController.service.type: тип службы для доступа к пользовательскому интерфейсу TVK, например NodePort или LoadBalancer.< /li>

Примечание. Чтобы увидеть все доступные параметры, вы можете просмотреть файл значений TrilioVault Helm. Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией TVK для параметров конфигурации.

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

  1. helm ls -n tvk

Эта команда выведет список репозиториев helm, которые вы добавили:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION triliovault-manager-tvk tvk 1 2022-08-18 08:19:50.409742366 +0000 UTC deployed k8s-triliovault-2.10.3 2.10.3 triliovault-operator tvk 1 2022-08-18 08:15:51.618651231 +0000 UTC deployed k8s-triliovault-operator-2.10.3 2.10.3

В столбце STATUS должно быть указано deployed.

Затем убедитесь, что TrilioVault запущен и работает. Выполните следующую команду, которая покажет состояние установки tvk:

  1. kubectl get deployments -n tvk

Эта команда отобразит развертывания в пространстве имен tvk.

Вывод будет выглядеть примерно так:

Output
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

Столбец ГОТОВО показывает, сколько развертываний доступно по шаблону готово/желательно. Все модули развертывания находятся в состоянии READY, что означает, что tvk был успешно установлен. Далее вы проверите тип и действительность вашей лицензии TrilioVault.

Проверка лицензии приложения TrilioVault

В рамках предварительных требований вы запросили лицензию TrilioVault для типа установки с областью действия Cluster и сохранили ее в виде файла yaml. В этом разделе вы примените свою лицензию TrilioVault, подтвердите ее статус и проверите ее поля.

В рамках предварительных условий вы загрузили бесплатную лицензию с веб-сайта Trilio и сохранили ее в виде файла yaml. Теперь примените его с помощью следующей команды:

  1. kubectl apply -f your_license_filename.yaml -n tvk

Затем проверьте, установлена ли лицензия и находится ли она в состоянии Active в вашем кластере:

  1. kubectl get license -n tvk

Вывод выглядит примерно так:

Output
NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES your_license Active Cluster License Activated successfully. 1 Basic 100 2023-04-25T00:00:00Z 1

Проверьте STATUS, который должен быть Active. Вы также можете проверить тип своей лицензии в столбце EDITION и срок действия лицензии в столбце СРОК ДЕЙСТВИЯ.

Управление лицензией осуществляется с помощью специального CRD, называемого объектом License. Вы можете проверить его, выполнив приведенную ниже команду, заменив выделенную часть названием вашей лицензии, как показано в предыдущем выводе:

  1. kubectl describe license your_license -n tvk

Вывод выглядит примерно так:

Output
Name: your_license Namespace: tvk Labels: <none> Annotations: generation: 4 triliovault.trilio.io/creator: trilio.user@trilio.io triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe triliovault.trilio.io/updater: [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-04-21T09:50:40.530365762Z"},{"username":"0c9f7f19-c4... API Version: triliovault.trilio.io/v1 Kind: License Metadata: Creation Timestamp: 2022-04-06T08:07:16Z ... Status: Condition: Message: Cluster License Activated successfully. Status: Active Timestamp: 2022-04-06T08:07:17Z Current CPU Count: 6 Max CP Us: 6 Message: Cluster License Activated successfully. Properties: Active: true Capacity: 100 Company: TRILIO-KUBERNETES-LICENSE-GEN-BASIC Creation Timestamp: 2022-04-21T00:00:00Z Edition: Basic Expiration Timestamp: 2027-04-25T00:00:00Z Kube UID: 1350188a-9289-49ba-9086-553e8cd7cabe License ID: TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e Maintenance Expiry Timestamp: 2027-04-25T00:00:00Z Number Of Users: -1 Purchase Timestamp: 2022-04-21T00:00:00Z Scope: Cluster ...

Проверьте поля Message и Capacity, а также Edition.

Приведенный выше вывод также сообщит вам, когда истекает срок действия лицензии, в поле Временная метка срока действия, а также в поле Область (на основе кластера). в этом случае). Дополнительные сведения можно найти на странице документации по лицензированию TrilioVault для Kubernetes.

На этом шаге вы применили лицензию TVK и подтвердили ее статус. Далее вы познакомитесь с веб-консолью TVK, которая поможет вам управлять целевыми объектами, резервными копиями, восстановлением и многим другим.

Шаг 3 — Доступ к консоли управления TVK

На этом шаге вы получите доступ к консоли управления TVK, где сможете создавать цели и управлять такими операциями, как резервное копирование и восстановление, через графический интерфейс. Хотя вы можете управлять операциями из CLI с помощью kubectl и CRD, консоль управления TVK упрощает общие задачи с помощью операций «укажи и щелкни» и обеспечивает лучшую визуализацию и проверку TVK. объекты кластера.

В предыдущем разделе о службе контроллера входящего трафика для TVK.

Начните с экспорта файла kubeconfig для вашего кластера Kubernetes. Этот шаг необходим, чтобы веб-консоль могла аутентифицировать вас.

Если вы используете службу DigitalOcean Kubernetes, вы можете выполнить следующие действия, чтобы экспортировать файл kubeconfig.

Список доступных кластеров:

  1. doctl k8s cluster list

Сохраните конфигурацию кластера в YAML, заменив выделенные значения на имя кластера:

  1. doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml

Примечание. Если у вас есть только один кластер, можно использовать следующую команду:

  1. DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
  2. doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

Обязательно сохраните сгенерированный файл kubeconfig в безопасности, так как он содержит конфиденциальные данные, такие как токен и сведения о пользователе, которые используются для доступа к вашему кластеру. Храните файл в закрытом месте и рассмотрите возможность использования приложения для управления паролями или зашифрованного формата.

Теперь, когда у вас есть файл kubeconfig для аутентификации, вы настроите переадресацию портов для доступа к консоли управления.

Сначала определите службу ingress-nginx-controller из пространства имен tvk. Вы можете сделать это, выполнив следующую команду, чтобы получить список служб в пространстве имен tvk:

  1. kubectl get svc -n tvk

Вывод выглядит примерно так:

Output
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

Найдите строку k8s-triliovault-ingress-nginx-controller и обратите внимание, что она прослушивает порт 80 в столбце PORT(s). .

Входную службу TrilioVault можно настроить с помощью NodePort или LoadBalancer, которые вы увидите в столбце TYPE. Если установлено значение NodePort, вам нужно убедиться, что домен доступен. Если вы используете NodePort для доступа к консоли управления TVK, входная служба TrilioVault не сможет напрямую подключиться к внешней сети без разрешения доменного имени, используемого для доступа к консоли TVK. Чтобы решить эту проблему, вы добавите запись IP-адреса и доменного имени в файл etc/hosts, чтобы преобразовать доменное имя в IP-адрес.

Для этого откройте файл /etc/hosts для редактирования и добавьте следующую запись:

127.0.0.1 demo-tutorial.tvk-doks.com

demo-tutorial.tvk-doks.com — доменное имя, установленное для службы TrilioVault ingress Controller. Вы будете использовать этот домен для доступа к консоли управления TVK.

Сохраните и закройте файл.

Затем создайте переадресацию портов для службы входного контроллера TVK:

  1. kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &

Теперь вы можете получить доступ к консоли в веб-браузере, перейдя по адресу: http://demo-tutorial.tvk-doks.com:8080. При запросе файла kubeconfig выберите тот, который вы создали в этом разделе.

Примечание. TVK использует файл kubeconfig для создания токена для аутентификации. Он не хранит информацию о пользователе, представленную в файле kubeconfig.

На этом шаге вы настраиваете доступ к консоли управления TVK. Для получения дополнительной информации о доступных функциях консоли ознакомьтесь с официальной документацией по веб-консоли управления TVK.

На следующем шаге вы определите серверную часть хранилища TrilioVault, которая называется target.

Шаг 4 — Создание цели TrilioVault для хранения резервных копий

TrilioVault необходимо знать, где хранить ваши резервные копии, что называется target. Поддерживаются следующие типы целей: S3 и NFS. В этом руководстве используется тип хранилища S3. Более подробная информация доступна в разделе Backup Target в документации TVK.

Чтобы получить доступ к хранилищу S3, каждая цель должна знать учетные данные корзины, которые хранятся в secret. На этом шаге вы создадите цель TrilioVault для резервных копий и секрет для хранения учетных данных вашей корзины.

Для начала вы создадите секрет Kubernetes, содержащий учетные данные вашей целевой корзины S3. Используя nano или ваш любимый текстовый редактор, создайте файл с именем trilio-s3-target-secret и добавьте следующий код, заменив выделенные значения вашими цифровыми пространствами DigitalOcean. ключ доступа и секретный ключ:

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target-secret
  namespace: tvk
type: Opaque
stringData:
  accessKey: your_bucket_access_key
  secretKey: your_bucket_secret_key

Секретное имяtrilio-s3-target-secret. На это будет ссылка в поле spec.objectStoreCredentials.credentialSecret манифеста target, который вы создадите следующим. secret может находиться в том же пространстве имен, где был установлен TrilioVault (по умолчанию tvk), или в другом пространстве имен твой выбор. (Просто убедитесь, что используемое пространство имен указано правильно.)

Сохраните и закройте файл.

Чтобы применить этот манифест и создать секрет, выполните следующую команду:

  1. kubectl apply -f trilio-s3-target-secret.yaml -n tvk

Примечание. В качестве альтернативы вы можете создать секрет, выполнив следующую команду, заменив значения заполнителей вашим ключом доступа к корзине DigtalOcean и секретным ключом:

  1. kubectl create secret generic trilio-s3-target-secret \
  2. --namespace=tvk \
  3. --from-literal=accessKey="your_bucket_access_key" \
  4. --from-literal=secretKey="your_bucket_secret_key"

Ваш вывод будет выглядеть так:

Output
secret/trilio-s3-target-secret created

Далее вы создадите манифест для цели. Создайте новый файл с именем trilio-s3-target.yaml и добавьте следующий блок кода. Замените выделенные значения для bucketName, region и url информацией о вашей корзине DigitalOcean, которую вы можете найти на панели управления своей корзиной.

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: your_bucket_name
    region: your_bucket_region           # e.g.: nyc1 or us-east-1
    url: https://nyc1.digitaloceanspaces.com      # update the region to match your bucket
    credentialSecret:
      name: trilio-s3-target-secret
      namespace: tvk
  thresholdCapacity: 10Gi

Вот объяснение приведенной выше конфигурации:

  • spec.type: тип целевого хранилища резервных копий (S3 — ObjectStore).
  • spec.vendor: сторонний поставщик хранилища, на котором размещена цель (для DigitalOcean Spaces вам потребуется использовать Other).
  • spec.enableBrowsing: включить просмотр для цели.
  • spec.objectStoreCredentials: определяет необходимые учетные данные (через credentialSecret) для доступа к хранилищу S3, а также другие параметры, такие как область корзины. и имя.
  • spec.thresholdCapacity: максимальная пороговая емкость для хранения данных резервного копирования.

Обратите внимание, что имя credentialSecret соответствует секрету, который вы только что создали.

Сохраните и закройте файл манифеста.

Теперь создайте объект target с помощью kubectl:

  1. kubectl apply -f trilio-s3-target.yaml -n tvk

Ваш вывод будет выглядеть так:

Output
target.triliovault.trilio.io/trilio-s3-target created

TrilioVault создаст рабочее задание с именем trilio-s3-target-validator, которое отвечает за проверку вашей корзины S3 (например, доступность, разрешения , и так далее). Если задание завершается успешно, корзина считается работоспособной или доступной, а ресурс задания trilio-s3-target-validator впоследствии удаляется.

Теперь проверьте, является ли созданный ранее ресурс target работоспособным, выполнив следующую команду и передав имя цели:

  1. kubectl get target trilio-s3-target -n tvk

Вывод будет выглядеть примерно так:

Output
NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED trilio-s3-target ObjectStore 10Gi Other Available true

Значение столбца STATUS равно Available, что означает, что цель находится в работоспособном состоянии.

Вы также можете проверить статус цели с помощью консоли управления TVK. После входа в систему выберите «Резервное копирование и восстановление», а затем нажмите «Цели» для просмотра.

Если статус отображается как Доступный, вы успешно настроили целевой объект S3.

Однако, если в конфигурации есть проблема, статус будет отображаться как «Недоступно». В таких случаях целевое задание проверки S3 остается запущенным и работающим, чтобы вы могли проверить журналы и найти возможную проблему. Если целевой объект не может стать работоспособным, вы можете проверить журналы из модуля trilio-s3-target-validator, чтобы найти проблему.

Чтобы проверить журналы, вы начнете с поиска целевого валидатора:

  1. kubectl get pods -n tvk | grep trilio-s3-target-validator

Вывод будет похож на этот, но с уникальным идентификатором:

Output
trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s

Используя целевой валидатор из предыдущего вывода, извлеките журналы данных с помощью следующей команды:

  1. kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

Вывод будет выглядеть примерно так (обратите внимание на исключение в качестве примера):

Output
... 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. ...

Для получения дополнительной справки по отладке или при возникновении проблем при создании цели обратитесь в службу поддержки.

На этом шаге вы настроили цель TrilioVault и создали секрет для предоставления учетных данных вашей корзины. Далее вы будете выполнять операции резервного копирования и восстановления, охватывая таким образом сценарий аварийного восстановления.

Шаг 5 — Резервное копирование и восстановление кластера Kubernetes

На этом шаге вы создадите резервную копию своего кластера Kubernetes. Затем вы удалите пространства имен и воспользуетесь резервной копией для восстановления всех важных приложений в этих пространствах имен. Вы выполните операцию восстановления кластера через location из target. Тот же процесс применяется, когда вам нужно выполнить миграцию кластера.

Основная идея состоит в том, чтобы выполнить полное резервное копирование кластера, включив в него все важные пространства имен, в которых хранятся основные приложения и конфигурации. Это не полное резервное копирование и восстановление кластера, а скорее операция резервного копирования и восстановления мультипространства имен. На практике это все, что нужно, потому что в Kubernetes все имеет пространство имен.

Создание резервной копии кластера Kubernetes

В этом разделе вы создадите резервную копию с несколькими пространствами имен, используя CRD ClusterBackupPlan, который нацелен на все важные пространства имен из вашего кластера Kubernetes.

Чтобы начать операцию резервного копирования кластера, вы создадите ClusterBackupPlan, определяющий набор ресурсов для резервного копирования. Спецификация включает расписание резервного копирования, цель резервного копирования и ресурсы для резервного копирования. Ресурсы могут быть определены в виде выпуска Helm, операторов или просто ресурсов Kubernetes API.

С помощью текстового редактора создайте файл манифеста ClusterBackupPlan с именем k8s-cluster-backup-plan.yaml. Добавьте следующий блок кода, который является типичным манифестом для таргетинга на несколько пространств имен:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

Убедитесь, что в кластере присутствуют пространства имен, перечисленные в backupComponents.

Вы можете заметить, что kube-system (или другие пространства имен, связанные с кластером Kubernetes) не включены в backupComponents. Обычно они не требуются, за исключением особых случаев, требующих сохранения некоторых настроек на этом уровне.

Сохраните и закройте файл.

Теперь создайте ресурс ClusterBackupPlan с помощью kubectl:

  1. kubectl apply -f k8s-cluster-backup-plan.yaml

Ваш вывод будет выглядеть так:

Output
clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created

Теперь проверьте статус ClusterBackupPlan с помощью kubectl:

  1. kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk

Вывод выглядит примерно так:

Output
NAME TARGET ... STATUS k8s-cluster-backup-plan trilio-s3-target ... Available

Проверьте значение столбца STATUS, для которого должно быть установлено значение Available.

Вы также можете увидеть статус ClusterBackupPlan с помощью консоли управления TVK. После входа в систему выберите «Резервное копирование и восстановление», а затем выберите «Планы резервного копирования» для просмотра.

На данный момент вы создали ClusterBackupPlan. Затем вы создадите ClusterBackup, который представляет собой конфигурацию, указывающую на фактический ClusterBackupPlan в spec.clusterBackupPlan.name. ClusterBackupPlan всегда остается неизменным; вы можете создать несколько резервных копий, обновив их в нескольких файлах манифеста ClusterBackup.

Теперь создайте файл манифеста ClusterBackup с именем k8s-cluster-backup.yaml. Добавьте следующий блок кода:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
  name: k8s-cluster-backup
  namespace: tvk
spec:
  type: Full
  clusterBackupPlan:
    name: k8s-cluster-backup-plan
    namespace: tvk

Сохраните и закройте файл.

Наконец, создайте ресурсы ClusterBackup, используя kubectl:

  1. kubectl apply -f k8s-cluster-backup.yaml

При применении манифеста ClusterBackup будет запущен процесс резервного копирования.

Ваш вывод будет выглядеть следующим образом:

Output
clusterbackup.triliovault.trilio.io/k8s-cluster-backup created

Теперь проверьте состояние ClusterBackup с помощью kubectl:

  1. kubectl get clusterbackup k8s-cluster-backup -n tvk

Вывод выглядит примерно так:

Output
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE COMPLETE k8s-cluster-backup k8s-cluster-backup-plan Full Available ... 100

Проверьте значение столбца STATUS, которое должно быть установлено на Доступно, а также значение PERCENTAGE COMPLETE равно 100. .

Вы также можете увидеть статус резервного копирования кластера с помощью Консоли управления TVK. На главной панели выберите «Мониторинг», а затем «Мониторинг TrilioVault» на левой панели.

Для завершения полного резервного копирования кластера потребуется некоторое время, в зависимости от того, сколько пространств имен, связанных ресурсов и данных, присутствующих в PVC, задействовано в процессе. Если выходные данные выглядят так, как показано выше, значит резервное копирование всех важных пространств имен приложений, включенных в план резервного копирования, выполнено успешно.

Вы также можете открыть главную панель веб-консоли и проверить резервную копию multi-namespace. На главной панели выберите «Резервное копирование и восстановление», а затем «Пространства имен». В правом верхнем углу вы можете переключаться между представлением списка и сотовой структурой:

В сотовом представлении выделены все важные пространства имен, которые были частью резервной копии.

В этом разделе вы создали резервную копию кластера. В следующих разделах вы удалите пространства имен, а затем восстановите их из резервной копии.

Удаление пространств имен

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

  1. kubectl delete ns wordpress
  2. kubectl delete ns mysqldb
  3. kubectl delete ns etcd

Ваш вывод будет выглядеть так:

Output
namespace "wordpress" deleted namespace "mysqldb" deleted namespace "etcd" deleted

Теперь, когда ваши пространства имен удалены, вы восстановите резервную копию.

Восстановление резервной копии с помощью консоли управления

В этом разделе вы будете использовать веб-консоль TVK для восстановления всех важных приложений из резервной копии. Процесс восстановления проверит target, где хранится резервная копия. TVK подключится к целевому репозиторию, чтобы извлечь файлы резервных копий с помощью модулей datamover и metamover. TVK создаст приложение Kubernetes, извлеченное из хранилища резервных копий.

Чтобы начать операцию восстановления, вам сначала нужно снова создать целевой манифест. Поскольку существующие пространства имен были удалены, целевые пользовательские ресурсы, созданные в этих пространствах имен, также были удалены. Это означает, что в кластере нет целевого пользовательского ресурса.

Настройте цель TVK, как описано в разделе Создание цели TrilioVault для хранения резервных копий, и укажите для нее ту же сегмент S3, где находятся данные резервной копии. Убедитесь, что целевой просмотр включен.

Затем перейдите к «Резервное копирование и восстановление», а затем «Цели с пространством имен: все выбрано»:

Чтобы вывести список доступных резервных копий, нажмите кнопку «Действия» справа, а затем выберите параметр «Запустить браузер» в раскрывающемся меню.

Чтобы это работало, у цели должен быть установлен флаг enableBrowsing true.

Выбор Launch Browser откроет целевой браузер:

Теперь щелкните элемент k8s-cluster-backup-plan в списке планов резервного копирования. Справа появится подокно с информацией о резервной копии, включая ее статус.

Щелкните и разверните элемент k8s-cluster-backup в правом подокне:

Чтобы начать процесс восстановления, нажмите кнопку «Восстановить».

Далее вы увидите всплывающее окно с некоторыми параметрами процесса восстановления. Чтобы понять различные варианты процесса восстановления, вы можете найти подробную информацию о каждом флаге в разделе Restore Flags документации TrilioVault.

Введите имя восстановления для создания настраиваемого ресурса восстановления. Указав имя, вы можете сопоставить все важные пространства имен из резервной копии с пространствами имен, где вы хотите восстановить данные. В этом случае выберите Конфигурация пространства имен на панели конфигурации, а затем выберите нужные пространства имен.

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

Через некоторое время, когда прогресс будет завершен, операция восстановления multi-namespace успешно завершена.

В этом разделе вы восстановили резервную копию с помощью Консоли управления. В следующем разделе вы подтвердите, что операция восстановления прошла успешно.

Проверка состояния приложений кластера DOKS

В этом разделе вы убедитесь, что операция восстановления прошла успешно и что приложения доступны после восстановления. Для начала выполните следующие команды, чтобы получить все объекты, связанные с приложением, из перечисленных пространств имен:

  1. kubectl get all --namespace wordpress
  2. kubectl get all --namespace mysqldb
  3. kubectl get all --namespace etcd

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

Output
NAME READY STATUS RESTARTS AGE pod/wordpress-5dcf55f8fc-72h9q 1/1 Running 1 2m21s pod/wordpress-mariadb-0 1/1 Running 1 2m20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/wordpress LoadBalancer 10.120.1.38 34.71.102.21 80:32402/TCP,443:31522/TCP 2m21s service/wordpress-mariadb ClusterIP 10.120.7.213 <none> 3306/TCP 2m21s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wordpress 1/1 1 1 2m21s NAME DESIRED CURRENT READY AGE replicaset.apps/wordpress-5dcf55f8fc 1 1 1 2m21s NAME READY AGE statefulset.apps/wordpress-mariadb 1/1 2m21s

Выходные данные показывают, что контейнер 1/1 развертывания приложения WordPress находится в состоянии READY. Кроме того, модули приложений WordPress и модули WordPress MariaDB имеют контейнеры 1/1 в состоянии RUNNING. Эти статусы подтверждают, что приложение было успешно восстановлено.

На следующем шаге вы научитесь выполнять резервное копирование по расписанию (или автоматически) для приложений кластера DOKS.

Шаг 6 — Планирование резервного копирования

Автоматическое создание резервных копий по расписанию — очень полезная функция. Он позволяет отматывать время назад и восстанавливать систему в прежнее рабочее состояние, если что-то пойдет не так. По умолчанию TrilioVault создает три запланированные политики: ежедневно, еженедельно и ежемесячно.

В консоли TVK вы можете просмотреть политики по умолчанию в разделе «Резервное копирование и восстановление», а затем «Политики планирования»:

Политики планирования можно использовать для CRD BackupPlan или ClusterBackupPlan.

Создайте файл манифеста с именем scheduled-backup-every-5min.yaml и добавьте следующий код, который представляет собой типичный CRD пользовательской политики расписания:

apiVersion: triliovault.trilio.io/v1
kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" # trigger every 5 minutes

Этот манифест создает политику резервного копирования по расписанию с именем scheduled-backup-every-5min в пространстве имен tvk. Он будет использоваться для запуска резервного копирования по расписанию каждые пять минут в зависимости от объектов BackupPlan.

После создания манифеста вы можете использовать его для создания расписания Policy:

  1. kubectl apply -f scheduled-backup-every-5min.yaml

Ваш вывод будет выглядеть так:

Output
policy.triliovault.trilio.io/scheduled-backup-every-5min created

Чтобы применить политику планирования, вы добавите ее в CRD ClusterBackupPlan. Откройте CRD ClusterBackupPlan, созданный на шаге 5, и добавьте выделенные строки:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

CRD ClusterBackupPlan ссылается на CRD Policy, определенный ранее через поле spec.backupConfig.schedulePolicy. Вы можете создать отдельные политики для полного или инкрементного резервного копирования, поэтому fullBackupPolicy или incrementalBackupPolicy можно указать в спец.

Сохраните и закройте файл.

На этом шаге вы запланировали резервное копирование и добавили политику планирования в ClusterBackupPlan. На следующем шаге вы узнаете, как настроить политику хранения резервных копий.

Шаг 7 — Создание политики хранения резервных копий

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

Политика хранения позволяет определить количество сохраняемых резервных копий и частоту удаления резервных копий в соответствии с требованиями соответствия. Политика хранения CRD предоставляет спецификацию YAML для определения количества сохраняемых резервных копий в виде дней, недель, месяцев, лет. , последний и т. д.

У TVK также есть политика хранения по умолчанию, которую вы можете просмотреть в консоли TVK в разделе «Резервное копирование и восстановление», а затем «Политики аренды»:

Политики хранения можно использовать для CRD BackupPlan или ClusterBackupPlan. Создайте новый файл с именем sample-retention-policy.yaml и добавьте следующие строки:

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-retention-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

Это типичный манифест Policy для типа Retention. Вот объяснение приведенной выше конфигурации:

  • spec.type: определяет тип политики: Retention или Schedule.
  • spec.retentionConfig: описывает конфигурацию хранения, например интервал хранения резервных копий и их количество.
  • spec.retentionConfig.latest: максимальное количество сохраняемых последних резервных копий.
  • spec.retentionConfig.weekly: максимальное количество резервных копий, которое должно храниться в неделю.
  • spec.retentionConfig.dayOfWeek: день недели для создания еженедельных резервных копий.
  • spec.retentionConfig.monthly: максимальное количество резервных копий, которое должно храниться в месяц.
  • spec.retentionConfig.dateOfMonth: дата месяца для создания ежемесячных резервных копий.
  • spec.retentionConfig.monthOfYear: месяц резервного копирования, который необходимо сохранять для ежегодного резервного копирования.
  • spec.retentionConfig.yearly: максимальное количество резервных копий, которое должно храниться в течение года.

В политике хранения, настроенной выше, политика резервного копирования будет сохранять одну резервную копию каждую среду на еженедельной основе; одно резервное копирование в 15-й день ежемесячно; и одна резервная копия каждый март на ежегодной основе. В целом будут доступны 2 самые последние резервные копии.

Основной процесс создания ресурса политики хранения такой же, как и для резервного копирования по расписанию. Вам нужен BackupPlan или ClusterBackupPlan CRD, определенный для ссылки на политику хранения, а затем объект Backup или ClusterBackup. для запуска процесса.

Чтобы применить политику хранения, откройте файл CRD ClusterBackupPlan и обновите его, чтобы он выглядел следующим образом:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: sample-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

Манифест использует поле retentionPolicy для ссылки на рассматриваемую политику. У вас может быть план резервного копирования, в котором установлены оба типа политик, чтобы он мог выполнять резервное копирование по расписанию, а также иметь дело со стратегиями хранения.

На этом шаге вы устанавливаете политики хранения для своих резервных копий.

Заключение

В этом руководстве вы установили TrilioVault для Kubernetes и использовали его для резервного копирования и восстановления кластера. Вы также запланировали резервное копирование и настроили политики хранения.

Вы выполнили основные задачи по резервному копированию кластера с помощью TrilioVault для Kubernetes, поэтому теперь у вас есть все необходимое для изучения других тем и материалов со следующим содержимым из документации по продукту TrilioVault:

  • Документация API определения пользовательских ресурсов TVK.
  • Как интегрировать пре-/пост-хуки для операций резервного копирования с примерами для различных баз данных.
  • Управление несколькими кластерами
  • Helm Releases Backup: примеры стратегий резервного копирования Helm.
  • Неизменяемые резервные копии, ограничивающие перезапись резервных копий в целевом хранилище.
  • Шифрование резервных копий, в котором объясняется, как шифровать и защищать конфиденциальные данные в целевом хранилище (хранилище).
  • Восстановить преобразования
  • План аварийного восстановления

Чтобы узнать больше о Kubernetes, ознакомьтесь с дополнительными руководствами.