Рубрики
Uncategorized

Учебник: Kubernetes — родная резервная копия и восстановление со ступой

Введение, имеющее надлежащий план восстановления резервного копирования имеет жизненно важное значение для операции любой организации. Хо Теги с Куберовщиками, дежоптом, докер.

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

В этом посте мы собираемся познакомить вас с Kubernetes-Native Tool для приема резервных копий ваших дисков, помогая с важнейшим планом восстановления. Stash — это оператор Restic, который ускоряет задачу резервного копирования и восстановления вашей инфраструктуры Kubernetes . Вы можете узнать больше о операторов Framework через Этот блог пост Отказ

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

  • Развертывание
  • Daemonset.
  • Реплизет
  • РепликацияController
  • Состояние государства

В самом сердце Stask это кубернаны контроллер который использует Пользовательское определение ресурсов (CRD) Чтобы указать цели и поведение резервной копии и восстановления процесса восстановления в родном порядке Kubernetes. Упрощенная архитектура Stash показана ниже:

Использование Helm 3.

Stash может быть установлен через Хелм используя Диаграмма от Appscode Charts Repository Отказ Чтобы установить диаграмму с именем выпуска Stash-оператор :

$ helm repo add appscode https://charts.appscode.com/stable/
$ helm repo update
$ helm search repo appscode/stash --version v0.9.0-rc.6
NAME            CHART          VERSION      APP VERSION DESCRIPTION
appscode/stash  v0.9.0-rc.6    v0.9.0-rc.6  Stash by AppsCode - Backup your Kubernetes Volumes

$ helm install stash-operator appscode/stash \
  --version v0.9.0-rc.6 \
  --namespace kube-system

Если вы предпочитаете не использовать HELM, вы можете генерировать YAML с таблицы Stash и развернуть использование kubectl :

$ helm repo add appscode https://charts.appscode.com/stable/
$ helm repo update
$ helm search repo appscode/stash --version v0.9.0-rc.6
NAME            CHART VERSION APP VERSION DESCRIPTION
appscode/stash  v0.9.0-rc.6    v0.9.0-rc.6  Stash by AppsCode - Backup your Kubernetes Volumes

$ helm template stash-operator appscode/stash \
  --version v0.9.0-rc.6 \
  --namespace kube-system \
  --no-hooks | kubectl apply -f -

Установка на гке кластере

Если вы устанавливаете Stash в кластере GKE, вам понадобится разрешения администратора кластера для установки оператора Stash. Запустите следующую команду, чтобы предоставить разрешение администратора в кластер.

$ kubectl create clusterrolebinding "cluster-admin-$(whoami)" \
  --clusterrole=cluster-admin \
  --user="$(gcloud config get-value core/account)"

Кроме того, если ваш кластер GKE является Частный кластер , вам нужно будет либо добавить дополнительное правило брандмауэра, которое позволяет Master Ussies Access Port 8443/TCP на рабочих узлах или измените существующее правило, которое позволяет доступом к портам 443/TCP. и 10250/TCP Также разрешить доступ к порту 8443/TCP. . Процедура добавления или изменения правил брандмауэра описана в официальной документации GKE для частных кластеров, упомянутых выше.

Проверьте установку

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

$ kubectl get pods --all-namespaces -l app=stash --watch

NAMESPACE     NAME                              READY     STATUS    RESTARTS   AGE
kube-system   stash-operator-859d6bdb56-m9br5   2/2       Running   2          5s

После того, как работа оператора работает, вы можете отменить вышеуказанную команду, набрав Ctrl + C Отказ

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

$ kubectl get crd -l app=stash

NAME                                 AGE
recoveries.stash.appscode.com        5s
repositories.stash.appscode.com      5s
restics.stash.appscode.com           5s

С этим вы готовы принять первое резервное копирование с помощью Stash.

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

$ kubectl create ns demo
namespace/demo created

Подготовьте резервную плату

Мы собираемся использовать GCS Backend хранить резервные копии данных. Вы можете использовать любую поддержанную Backend, которую вы предпочитаете. Вам просто нужно настроить секрет хранения и Спецификация Раздел Backuppblueprint соответствовать вашей бэкэнде. Посетить здесь Чтобы узнать, какие бэкэнды поддерживаются Stash и как их настроить.

Для GCS Backend, если ведро не существует, stash потребностей Объект хранения Admin Разрешения ролей для создания ведра. Для получения более подробной информации, пожалуйста, проверьте следующее Руководство Отказ

Создать секрет хранения :

Сначала давайте создадим секрет хранения для Backend GCS,

$ echo -n 'changeit' > RESTIC_PASSWORD
$ echo -n '' > GOOGLE_PROJECT_ID
$ mv downloaded-sa-json.key > GOOGLE_SERVICE_ACCOUNT_JSON_KEY
$ kubectl create secret generic -n demo gcs-secret \
    --from-file=./RESTIC_PASSWORD \
    --from-file=./GOOGLE_PROJECT_ID \
    --from-file=./GOOGLE_SERVICE_ACCOUNT_JSON_KEY
secret/gcs-secret created

Создать backuppbblueprint:

Далее мы должны создать Backuppblueprint CRD с планом для Репозиторий и Backuppigonfiguration объект.

Ниже ямл Backuppblueprint Объект, который мы собираемся создавать:

apiVersion: stash.appscode.com/v1beta1
kind: BackupBlueprint
metadata:
  name: postgres-backup-blueprint
spec:
  # ============== Blueprint for Repository ==========================
  backend:
    gcs:
      bucket: appscode-qa
      prefix: stash-backup/${TARGET_NAMESPACE}/${TARGET_APP_RESOURCE}/${TARGET_NAME}
    storageSecretName: gcs-secret
  # ============== Blueprint for BackupConfiguration =================
  task:
    name: postgres-backup-${TARGET_APP_VERSION}
  schedule: "*/5 * * * *"
  retentionPolicy:
    name: 'keep-last-5'
    keepLast: 5
    prune: true

Обратите внимание, что мы использовали несколько переменных (формат: $ {<имя переменной>} ) в spec.backend.gcs.prefix поле. Stash заменит эти переменные значениями из соответствующей цели. Чтобы узнать, какие переменные вы можете использовать в префикс Поле, пожалуйста, посетите здесь Отказ

Давайте создадим Backuppblueprint что мы показали выше.

$ kubectl apply -f https://github.com/stashed/docs/raw/v0.9.0-rc.6/docs/examples/guides/latest/auto-backup/database/backupblueprint.yaml
backupblueprint.stash.appscode.com/postgres-backup-blueprint created

С помощью этого автоматическая резервная копия настроен для базы данных PostgreSQL. Мы просто должны добавить аннотацию к AppBinding целевой базы данных.

Требуемая аннотация для автоматической резервной базы данных:

Вы должны добавить следующую аннотацию к AppBinding CRD целевой базы данных для обеспечения резервного копирования для него:

stash.appscode.com/backup-blueprint: 

Эта аннотация определяет имя Backuppblueprint объект, где плакат для Репозиторий и Backuppigonfiguration был определен.

Подготовьте базы данных

Далее мы собираемся развернуть два образца PostgreSQL баз данных двух разных версий с использованием Kubedb. Мы собираемся резервное копирование этих двух баз данных с помощью автоматического резервного копирования.

Развернуть первый PostgreSQL образец:

Ниже ямл первого Postgres CRD:

apiVersion: kubedb.com/v1alpha1
kind: Postgres
metadata:
  name: sample-postgres-1
  namespace: demo
spec:
  version: "11.2"
  storageType: Durable
  storage:
    storageClassName: "standard"
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
  terminationPolicy: Delete

Давайте создадим Postgres Мы показали выше:

$ kubectl apply -f https://github.com/stashed/docs/raw/v0.9.0-rc.6/docs/examples/guides/latest/auto-backup/database/sample-postgres-1.yaml
postgres.kubedb.com/sample-postgres-1 created

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

Убедитесь, что AppBinding Был создан для этого образца PostgreSQL:

$ kubectl get appbinding -n demo
NAME                AGE
sample-postgres-1   47s

Если вы просматриваете YAML этого AppBinding Вы увидите, что он проводит услугу и секретную информацию. Stash использует эту информацию для подключения к базе данных.

$ kubectl get appbinding -n demo sample-postgres-1 -o yaml
apiVersion: appcatalog.appscode.com/v1alpha1
kind: AppBinding
metadata:
  name: sample-postgres-1
  namespace: demo
  ...
spec:
  clientConfig:
    service:
      name: sample-postgres-1
      path: /
      port: 5432
      query: sslmode=disable
      scheme: postgresql
  secret:
    name: sample-postgres-1-auth
  secretTransforms:
  - renameKey:
      from: POSTGRES_USER
      to: username
  - renameKey:
      from: POSTGRES_PASSWORD
      to: password
  type: kubedb.com/postgres
  version: "11.2"

Развертывание второго PostgreSQL образец:

Ниже ямл второго Postgres объект:

apiVersion: kubedb.com/v1alpha1
kind: Postgres
metadata:
  name: sample-postgres-2
  namespace: demo
spec:
  version: "10.6-v2"
  storageType: Durable
  storage:
    storageClassName: "standard"
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
  terminationPolicy: Delete

Давайте создадим Postgres Мы показали выше.

$ kubectl apply -f https://github.com/stashed/docs/raw/v0.9.0-rc.6/docs/examples/guides/latest/auto-backup/database/sample-postgres-2.yaml
postgres.kubedb.com/sample-postgres-2 created

Убедитесь, что AppBinding Был создан для этой базы данных PostgreSQL:

$ kubectl get appbinding -n demo
NAME                AGE
sample-postgres-1   2m49s
sample-postgres-2   10s

Здесь мы можем видеть AppBinding Образец-postgrees-2 был создан для нашего второго образец PostgreSQL.

Далее мы собираемся добавить автоматическое резервное копирование специфической аннотации к AppBinding нашей желаемой базы данных. Шташ часы для AppBinding CRD. Как только он найдет AppBinding С Auto-Backup Annotation это создаст Репозиторий и а Backuppigonfiguration CRD согласно соответствующей Backuppblueprint Отказ Затем остальная часть процесса резервного копирования будет продолжаться как обычная резервная копия базы данных, как описано здесь.

Backup First PostgreSQL образец

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

Добавить аннотации :

Сначала добавьте специфическую аннотацию Auto-Backup в AppBinding Образец-postgrees-1 :

$ kubectl annotate appbinding sample-postgres-1 -n demo --overwrite \
  stash.appscode.com/backup-blueprint=postgres-backup-blueprint

Убедитесь, что аннотация была успешно добавлена:

$ kubectl get appbinding -n demo sample-postgres-1 -o yaml

apiVersion: appcatalog.appscode.com/v1alpha1
kind: AppBinding
metadata:
  annotations:
    stash.appscode.com/backup-blueprint: postgres-backup-blueprint
  name: sample-postgres-1
  namespace: demo
  ...
spec:
  clientConfig:
    service:
      name: sample-postgres-1
      path: /
      port: 5432
      query: sslmode=disable
      scheme: postgresql
  secret:
    name: sample-postgres-1-auth
  secretTransforms:
  - renameKey:
      from: POSTGRES_USER
      to: username
  - renameKey:
      from: POSTGRES_PASSWORD
      to: password
  type: kubedb.com/postgres
  version: "11.2"

После этого Stash создаст Репозиторий и а Backuppigonfiguration CRD согласно черту.

Убедитесь, что репозиторий:

Убедитесь, что Репозиторий Был успешно создан следующей командой:

$ kubectl get repository -n demo
NAME                         INTEGRITY   SIZE   SNAPSHOT-COUNT   LAST-SUCCESSFUL-BACKUP   AGE
postgres-sample-postgres-1                                                                2m23s

Если мы просматриваем YAML этого Репозиторий мы собираемся увидеть, что переменные $ {Target_namespace} , $ {Target_app_resource} и $ {Target_name} был заменен демонстрация , Postgres и Образец-postgrees-1 соответственно.

$ kubectl get repository -n demo postgres-sample-postgres-1 -o yaml
apiVersion: stash.appscode.com/v1beta1
kind: Repository
metadata:
  creationTimestamp: "2019-08-01T13:54:48Z"
  finalizers:
  - stash
  generation: 1
  name: postgres-sample-postgres-1
  namespace: demo
  resourceVersion: "50171"
  selfLink: /apis/stash.appscode.com/v1beta1/namespaces/demo/repositories/postgres-sample-postgres-1
  uid: ed49dde4-b463-11e9-a6a0-080027aded7e
spec:
  backend:
    gcs:
      bucket: appscode-qa
      prefix: stash-backup/demo/postgres/sample-postgres-1
    storageSecretName: gcs-secret

Проверьте backupconfiguration:

Убедитесь, что * Backuppigonfiguration CRD был создан следующей командой:

$ kubectl get backupconfiguration -n demo
NAME                         TASK                   SCHEDULE      PAUSED   AGE
postgres-sample-postgres-1   postgres-backup-11.2   */5 * * * *            3m39s

Обратите внимание на Задача поле. Это обозначает, что эта резервная копия будет выполняться с использованием Postgres-Backup-11.2 задача. Мы указали Postgres-Backup - $ {target_app_version} Как название задачи в Backuppblueprint Отказ Здесь переменная $ {Target_app_version} был заменен версией базы данных.

Давайте проверим YAML этого Backuppigonfiguration Отказ

$ kubectl get backupconfiguration -n demo postgres-sample-postgres-1 -o yaml
apiVersion: stash.appscode.com/v1beta1
kind: BackupConfiguration
metadata:
  creationTimestamp: "2019-08-01T13:54:48Z"
  finalizers:
  - stash.appscode.com
  generation: 1
  name: postgres-sample-postgres-1
  namespace: demo
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: false
    kind: AppBinding
    name: sample-postgres-1
    uid: a799156e-b463-11e9-a6a0-080027aded7e
  resourceVersion: "50170"
  selfLink: /apis/stash.appscode.com/v1beta1/namespaces/demo/backupconfigurations/postgres-sample-postgres-1
  uid: ed4bd257-b463-11e9-a6a0-080027aded7e
spec:
  repository:
    name: postgres-sample-postgres-1
  retentionPolicy:
    keepLast: 5
    name: keep-last-5
    prune: true
  runtimeSettings: {}
  schedule: '*/5 * * * *'
  target:
    ref:
      apiVersion: v1
      kind: AppBinding
      name: sample-postgres-1
  task:
    name: postgres-backup-11.2
  tempDir: {}

Обратите внимание, что spec.target.ref указывает на AppBinding Образец-postgrees-1 Что мы только что аннотировали с аннотацией автоматической резервной копии.

Ждать backupsession:

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

$ watch -n 1 kubectl get backupsession -n demo -l=stash.appscode.com/backup-configuration=postgres-sample-postgres-1

Every 1.0s: kubectl get backupsession -n demo -l=stash.appscode.com/backup-configuration=postgres-sample-postgres-1  workstation: Thu Aug  1 20:35:43 2019

NAME                                    INVOKER-TYPE          INVOKER-NAME                 PHASE       AGE
postgres-sample-postgres-1-1564670101   BackupConfiguration   postgres-sample-postgres-1   Succeeded   42s

Примечание: Backup Cronjob создает Backupsession CRD со следующей этикеткой stash.capsscode.com/backup-configuration= Отказ Мы можем использовать этот ярлык, чтобы посмотреть только Backupsession нашего желаемого Backuppigonfiguration Отказ

Проверьте резервное копирование :

Когда завершена резервная копия, Stash обновит соответствующую Репозиторий Чтобы отразить новейшее состояние резервных данных.

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

$ kubectl get repository -n demo postgres-sample-postgres-1
NAME                         INTEGRITY   SIZE        SNAPSHOT-COUNT   LAST-SUCCESSFUL-BACKUP   AGE
postgres-sample-postgres-1   true        1.324 KiB   1                73s                      6m7s

Если мы перейдем к Stash-Backup/Demo/Postgres/Sample-Postgres-1 Справочник нашего ведра GCS, мы увидим, что снимка хранится там.

Резервное копирование второго образца PostgreSQL

Теперь давайте резервировать наш второй образец PostgreSQL, используя то же самое Backuppblueprint Мы использовали для резервного копирования первого образца PostgreSQL.

Добавить аннотации:

Добавьте автоматическое резервное копирование специфической аннотации для AppBinding Образец-postgrees-2 Отказ

$ kubectl annotate appbinding sample-postgres-2 -n demo --overwrite \
  stash.appscode.com/backup-blueprint=postgres-backup-blueprint

Убедитесь, что репозиторий:

Убедитесь, что Репозиторий Был успешно создан следующей командой:

$ kubectl get repository -n demo
NAME                         INTEGRITY   SIZE        SNAPSHOT-COUNT   LAST-SUCCESSFUL-BACKUP   AGE
postgres-sample-postgres-1   true        1.324 KiB   1                2m3s                     6m57s
postgres-sample-postgres-2                                                                     15s

Здесь, репозиторий Postgres-образцы-postgres-2 был создан для второго образец PostgreSQL.

Если мы просматриваем YAML этого Репозиторий мы увидим, что переменные $ {Target_namespace} , $ {Target_app_resource} и $ {Target_name} были заменены демонстрация , Postgres и Образец-postgrees-2 соответственно.

$ kubectl get repository -n demo postgres-sample-postgres-2 -o yaml
apiVersion: stash.appscode.com/v1beta1
kind: Repository
metadata:
  creationTimestamp: "2019-08-01T14:37:22Z"
  finalizers:
  - stash
  generation: 1
  name: postgres-sample-postgres-2
  namespace: demo
  resourceVersion: "56103"
  selfLink: /apis/stash.appscode.com/v1beta1/namespaces/demo/repositories/postgres-sample-postgres-2
  uid: df58523c-b469-11e9-a6a0-080027aded7e
spec:
  backend:
    gcs:
      bucket: appscode-qa
      prefix: stash-backup/demo/postgres/sample-postgres-2
    storageSecretName: gcs-secret

Проверьте backupconfiguration:

Убедитесь, что Backuppigonfiguration CRD был создан следующей командой:

$ kubectl get backupconfiguration -n demo
NAME                         TASK                   SCHEDULE      PAUSED   AGE
postgres-sample-postgres-1   postgres-backup-11.2   */5 * * * *            7m52s
postgres-sample-postgres-2   postgres-backup-10.6   */5 * * * *            70s

Опять обратите внимание на Задача поле. На этот раз $ {Target_app_version} был заменен на 10,6 Какой вариант базы данных нашего второго образца.

Ждать backupsession:

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

$ watch -n 1 kubectl get backupsession -n demo -l=stash.appscode.com/backup-configuration=postgres-sample-postgres-2
Every 1.0s: kubectl get backupsession -n demo -l=stash.appscode.com/backup-configuration=postgres-sample-postgres-2  workstation: Thu Aug  1 20:55:40 2019

NAME                                    INVOKER-TYPE          INVOKER-NAME                 PHASE       AGE
postgres-sample-postgres-2-1564671303   BackupConfiguration   postgres-sample-postgres-2   Succeeded   37s

Проверьте резервное копирование:

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

$ kubectl get repository -n demo postgres-sample-postgres-2
NAME                         INTEGRITY   SIZE        SNAPSHOT-COUNT   LAST-SUCCESSFUL-BACKUP   AGE
postgres-sample-postgres-2   true        1.324 KiB   1                52s                      19m

Если мы перейдем к Stash-Backup/Demo/Postgres/Sample-Postgres-2 Справочник нашего ведра GCS, мы увидим, что снимка хранится там.

Чтобы очистить ресурсы Kubernetes, созданные этим руководством, запустите:

kubectl delete -n demo pg/sample-postgres-1
kubectl delete -n demo pg/sample-postgres-2

kubectl delete -n demo repository/postgres-sample-postgres-1
kubectl delete -n demo repository/postgres-sample-postgres-2

kubectl delete -n demo backupblueprint/postgres-backup-blueprint

Теперь вы получили глубокое погружение в создание рекуперации и резервного рекуперации Kubernetes-actactor и резервного копирования. Вы можете найти много действительно полезной информации на их документации здесь Отказ Больше содержимого можно найти в appfleet.

Оригинал: «https://dev.to/appfleet/tutorial-kubernetes-native-backup-and-recovery-with-stash-3dbd»