Как сделать резервную копию и восстановить кластер 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
. Вы можете проверить это с помощью следующей команды:
- kubectl get storageclass
Вывод должен выглядеть примерно так:
OutputNAME 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). Вы можете проверить это с помощью следующей команды:
- kubectl get crd | grep volumesnapshot
Если volumeSnapshot
уже установлен, вывод будет выглядеть примерно так:
Outputvolumesnapshotclasses.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
, которую вы можете проверить, выполнив следующую команду:
- 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 и выведите список доступных диаграмм с помощью следующей команды:
- helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
- helm repo update triliovault-operator
- helm search repo triliovault-operator
Вывод выглядит примерно так:
OutputNAME 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
:
- helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
- --namespace tvk \
- --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
- --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
:
- helm ls -n tvk
Эта команда выведет список репозиториев helm
, которые вы добавили:
OutputNAME 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
:
- kubectl get deployments -n tvk
Эта команда отобразит развертывания в пространстве имен tvk
.
Вывод будет выглядеть примерно так:
OutputNAME 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
. Теперь примените его с помощью следующей команды:
- kubectl apply -f your_license_filename.yaml -n tvk
Затем проверьте, установлена ли лицензия и находится ли она в состоянии Active
в вашем кластере:
- kubectl get license -n tvk
Вывод выглядит примерно так:
OutputNAME 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
. Вы можете проверить его, выполнив приведенную ниже команду, заменив выделенную часть названием вашей лицензии, как показано в предыдущем выводе:
- kubectl describe license your_license -n tvk
Вывод выглядит примерно так:
OutputName: 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
.
Список доступных кластеров:
- doctl k8s cluster list
Сохраните конфигурацию кластера в YAML, заменив выделенные значения на имя кластера:
- doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml
Примечание. Если у вас есть только один кластер, можно использовать следующую команду:
- DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
- doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml
Обязательно сохраните сгенерированный файл kubeconfig
в безопасности, так как он содержит конфиденциальные данные, такие как токен и сведения о пользователе, которые используются для доступа к вашему кластеру. Храните файл в закрытом месте и рассмотрите возможность использования приложения для управления паролями или зашифрованного формата.
Теперь, когда у вас есть файл kubeconfig
для аутентификации, вы настроите переадресацию портов для доступа к консоли управления.
Сначала определите службу ingress-nginx-controller
из пространства имен tvk
. Вы можете сделать это, выполнив следующую команду, чтобы получить список служб в пространстве имен tvk
:
- kubectl get svc -n tvk
Вывод выглядит примерно так:
OutputNAME 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:
- 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
), или в другом пространстве имен твой выбор. (Просто убедитесь, что используемое пространство имен указано правильно.)
Сохраните и закройте файл.
Чтобы применить этот манифест и создать секрет, выполните следующую команду:
- kubectl apply -f trilio-s3-target-secret.yaml -n tvk
Примечание. В качестве альтернативы вы можете создать секрет, выполнив следующую команду, заменив значения заполнителей вашим ключом доступа к корзине DigtalOcean и секретным ключом:
- kubectl create secret generic trilio-s3-target-secret \
- --namespace=tvk \
- --from-literal=accessKey="your_bucket_access_key" \
- --from-literal=secretKey="your_bucket_secret_key"
Ваш вывод будет выглядеть так:
Outputsecret/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
:
- kubectl apply -f trilio-s3-target.yaml -n tvk
Ваш вывод будет выглядеть так:
Outputtarget.triliovault.trilio.io/trilio-s3-target created
TrilioVault
создаст рабочее задание
с именем trilio-s3-target-validator
, которое отвечает за проверку вашей корзины S3 (например, доступность, разрешения , и так далее). Если задание завершается успешно, корзина считается работоспособной или доступной, а ресурс задания trilio-s3-target-validator
впоследствии удаляется.
Теперь проверьте, является ли созданный ранее ресурс target
работоспособным
, выполнив следующую команду и передав имя цели:
- kubectl get target trilio-s3-target -n tvk
Вывод будет выглядеть примерно так:
OutputNAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED
trilio-s3-target ObjectStore 10Gi Other Available true
Значение столбца STATUS
равно Available
, что означает, что цель находится в работоспособном состоянии.
Вы также можете проверить статус цели с помощью консоли управления TVK. После входа в систему выберите «Резервное копирование и восстановление», а затем нажмите «Цели» для просмотра.
Если статус отображается как Доступный, вы успешно настроили целевой объект S3.
Однако, если в конфигурации есть проблема, статус будет отображаться как «Недоступно». В таких случаях целевое задание проверки S3 остается запущенным и работающим, чтобы вы могли проверить журналы и найти возможную проблему. Если целевой объект не может стать работоспособным, вы можете проверить журналы из модуля trilio-s3-target-validator
, чтобы найти проблему.
Чтобы проверить журналы, вы начнете с поиска целевого валидатора:
- kubectl get pods -n tvk | grep trilio-s3-target-validator
Вывод будет похож на этот, но с уникальным идентификатором:
Outputtrilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s
Используя целевой валидатор из предыдущего вывода, извлеките журналы данных с помощью следующей команды:
- 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
:
- kubectl apply -f k8s-cluster-backup-plan.yaml
Ваш вывод будет выглядеть так:
Outputclusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created
Теперь проверьте статус ClusterBackupPlan
с помощью kubectl
:
- kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk
Вывод выглядит примерно так:
OutputNAME 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
:
- kubectl apply -f k8s-cluster-backup.yaml
При применении манифеста ClusterBackup
будет запущен процесс резервного копирования.
Ваш вывод будет выглядеть следующим образом:
Outputclusterbackup.triliovault.trilio.io/k8s-cluster-backup created
Теперь проверьте состояние ClusterBackup
с помощью kubectl
:
- kubectl get clusterbackup k8s-cluster-backup -n tvk
Вывод выглядит примерно так:
OutputNAME 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
. На главной панели выберите «Резервное копирование и восстановление», а затем «Пространства имен». В правом верхнем углу вы можете переключаться между представлением списка и сотовой структурой:
В сотовом представлении выделены все важные пространства имен, которые были частью резервной копии.
В этом разделе вы создали резервную копию кластера. В следующих разделах вы удалите пространства имен, а затем восстановите их из резервной копии.
Удаление пространств имен
Теперь, когда у вас есть резервная копия кластера, вы удалите свои пространства имен, чтобы впоследствии восстановить их из резервной копии. Чтобы удалить ваши пространства имен, выполните следующие команды, при необходимости заменив выделенные пространства имен.
- kubectl delete ns wordpress
- kubectl delete ns mysqldb
- kubectl delete ns etcd
Ваш вывод будет выглядеть так:
Outputnamespace "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
В этом разделе вы убедитесь, что операция восстановления прошла успешно и что приложения доступны после восстановления. Для начала выполните следующие команды, чтобы получить все объекты, связанные с приложением, из перечисленных пространств имен:
- kubectl get all --namespace wordpress
- kubectl get all --namespace mysqldb
- kubectl get all --namespace etcd
Ваш вывод будет выглядеть следующим образом для каждого приложения:
OutputNAME 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
:
- kubectl apply -f scheduled-backup-every-5min.yaml
Ваш вывод будет выглядеть так:
Outputpolicy.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, ознакомьтесь с дополнительными руководствами.