89. Аварийное восстановление

Обновлено: 2024-03-12
6 мин

Аварийное восстановление

Мы уже упоминали о том, что различные скрипты сбоев требуют различных требований к восстановлению. Когда речь идет о скриптах пожара, наводнения и крови, мы можем рассматривать их как аварийные ситуации, в которых нам может потребоваться, чтобы наши рабочие нагрузки были запущены в совершенно другом месте как можно быстрее или, по крайней мере, с почти нулевым временем восстановления (RTO).

Этого можно достичь только в масштабе, если автоматизировать репликацию всего стека приложений в резервную среду.

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

Продолжая тему, мы сосредоточимся на том, как этого можно достичь с помощью Kasten K10, используя наш кластер minikube, который мы развернули и настроили несколько занятий назад.

Затем мы создадим еще один кластер minikube с установленным Kasten K10 в качестве резервного кластера, который теоретически может находиться в любом месте.

Kasten K10 также имеет встроенную функциональность для обеспечения того, что если что-то случится с кластером Kubernetes, на котором он работает, данные каталога будут реплицированы и доступны на новом K10 Disaster Recovery.

Добавление объектного хранилища в K10

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

Я очистил ведро S3, которое мы создали для демонстрации Kanister на прошлом занятии.

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

kubectl --namespace kasten-io port-forward service/gateway 8080:8000.

Приборная панель Kasten будет доступна по адресу: http://127.0.0.1:8080/k10/#/

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

TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1)
TOKEN=$(kubectl get secret --namespace kasten-io $TOKEN_NAME -o jsonpath="{.data.token}" | base64 --decode)

echo "Token value: "
echo $TOKEN

Теперь мы берем этот токен и вводим его в браузер, после чего вам будет предложено ввести email и название компании.

Затем мы получаем доступ к приборной панели Kasten K10.

Теперь, когда мы вернулись в приборную панель Kasten K10, мы можем добавить наш профиль местоположения, выберите “Настройки” в верхней части страницы и “Новый профиль”.

На изображении ниже видно, что у нас есть выбор, где будет находиться этот профиль местоположения, мы выбираем Amazon S3, и добавляем наши учетные данные доступа, регион и имя ведра.

Если мы прокрутим окно создания нового профиля вниз, то увидим, что у нас также есть возможность включить неизменяемое резервное копирование, которое использует API блокировки объектов S3. В данном демо мы не будем использовать эту возможность.

Нажмите “Сохранить профиль”, и теперь вы можете увидеть наш только что созданный или добавленный профиль местоположения, как показано ниже.

Создание политики для защиты приложения Pac-Man в объектном хранилище

В предыдущем сеансе мы создали только специальный снимок нашего приложения Pac-Man, поэтому нам нужно создать политику резервного копирования, которая будет отправлять резервные копии нашего приложения в наше недавно созданное объектное хранилище.

Если вы вернетесь на приборную панель и выберете карточку Policy, вы увидите окно, как показано ниже. Выберите “Создать новую политику”.

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

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

Далее выбираем приложение по имени или по меткам, я собираюсь выбрать по имени и все ресурсы.

В разделе Advanced settings мы не будем использовать ничего из этого, но, основываясь на нашем вчерашнем walkthrough of Kanister, мы можем использовать Kanister как часть Kasten K10 для создания согласованных с приложением копий наших данных.

Наконец, выберите “Создать политику”, и теперь вы увидите политику в нашем окне политики.

В нижней части созданной политики появится “Show import details”, нам нужна эта строка, чтобы иметь возможность импортировать в наш резервный кластер. Скопируйте ее в безопасное место.

Прежде чем двигаться дальше, нам нужно выбрать “run once”, чтобы получить резервную копию, отправленную нашему ведру объектного хранилища.

Ниже, на скриншоте просто показано успешное резервное копирование и экспорт наших данных.

Создание нового кластера MiniKube и развертывание K10

Затем нам нужно развернуть второй кластер Kubernetes, и где это может быть любая поддерживаемая версия Kubernetes, включая OpenShift, в целях обучения мы будем использовать очень бесплатную версию MiniKube с другим названием.

Используя minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p standby --kubernetes-version=1.21.2 мы можем создать наш новый кластер.

Затем мы можем развернуть Kasten K10 в этом кластере, используя:

helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace.

Это займет некоторое время, но тем временем мы можем использовать kubectl get pods -n kasten-io -w, чтобы наблюдать за прогрессом перехода наших pods в статус запущенных.

Стоит отметить, что поскольку мы используем MiniKube, наше приложение будет запущено, когда мы запустим политику импорта, наш класс хранилища будет таким же на этом резервном кластере. Однако то, что мы рассмотрим на последнем занятии, касается мобильности и трансформации.

Когда капсулы запущены, мы можем выполнить шаги, которые мы проделали в предыдущих шагах на другом кластере.

Перенесите порт вперед для доступа к приборной панели K10, откройте новый терминал и выполните следующую команду

kubectl --namespace kasten-io port-forward service/gateway 8080:8000.

Приборная панель Kasten будет доступна по адресу: http://127.0.0.1:8080/k10/#/

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

TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1)
TOKEN=$(kubectl get secret --namespace kasten-io $TOKEN_NAME -o jsonpath="{.data.token}" | base64 --decode)

echo "Token value: "
echo $TOKEN

Теперь мы берем этот токен и вводим его в браузер, после чего вам будет предложено ввести email и название компании.

Затем мы получаем доступ к приборной панели Kasten K10.

Импортируем Pac-Man в новый кластер MiniKube

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

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

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

Создайте политику импорта в соответствии с приведенным ниже изображением. После завершения мы можем создать политику. Здесь есть опция восстановления после импорта, и некоторые люди могут захотеть воспользоваться этой опцией, которая будет восстановлена в нашем резервном кластере по завершении. У нас также есть возможность изменить конфигурацию приложения при восстановлении, и это то, что я описал в Day 90.

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

Ниже вы можете видеть успешное выполнение задания политики импорта.

Если мы теперь вернемся на приборную панель и зайдем в карточку Applications, мы можем выбрать выпадающий список, где вы видите ниже “Removed”, здесь вы увидите наше приложение. Выберите “Восстановить

Здесь мы видим доступные нам точки восстановления; это было задание резервного копирования, которое мы выполнили на первичном кластере для нашего приложения Pac-Man.

Я не буду менять никаких настроек по умолчанию, так как хочу рассмотреть это более подробно на следующем занятии.

Когда вы нажмете кнопку “Восстановить”, появится запрос на подтверждение.

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

Затем мы можем перенаправить порт (в реальной жизни/производственной среде вам не понадобится этот шаг для доступа к приложению, вы будете использовать ingress)

Далее мы рассмотрим мобильность и трансформацию приложений.

Ресурсы