Резервное Копирование И Восстановление Ресурсов Kubernetes С Помощью Утилиты Heptio Ark.

Вероятно, вам приходилось восстанавливать кластер Kubernetes после сбоя.

Была ли у вас хорошая стратегия резервного копирования, которая не требовала от вас работы целыми днями? Да, вы можете создавать резервные копии в кластере etcd, но что, если вышел из строя только часть кластера или вы используете постоянные тома, такие как AWS EBS? В таких случаях проще всего воспользоваться утилитой Гептио Арк .

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

Для меня основным преимуществом Heptio Ark является интеграция с различными облачными провайдерами, такими как AWS, Azure, Google Cloud и т. д. Таким образом, при резервном копировании он делает снимки используемых постоянных томов.

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

Про резервное копирование постоянных томов будет отдельный пост.



Монтаж

Инструкции по установке можно найти здесь: примеры/README.md. В ходе этого процесса будут созданы несколько пользовательских определений ресурсов, правила RBAC (управление доступом на основе ролей), позволяющие Heptio создавать резервные копии, и развертывание.

По умолчанию они находятся в пространстве имен heptio-ark. Важный! После успешной установки вам необходимо настроить heptio-ark, чтобы он сообщал серверу, какого облачного провайдера следует использовать и где хранить резервные копии.

Вот как выглядит эта конфигурация:

  
  
  
  
  
  
  
  
  
  
  
  
   

apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default backupStorageProvider: name: aws bucket: heptio-backup-bucket config: region: eu-central-1 backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false

Вы можете применить его с помощью команды

kubectl apply -f heptio.yaml

Теперь Heptio знает, в какую корзину сохранять резервные копии.

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

Наконец, для резервного копирования, планирования и восстановления вам необходимо загрузиться с GitHub Гептио Арк CLI. Почти все команды могут выполняться как пользовательские определения ресурсов через YAML или JSON.

Резервное копирование

В этом небольшом примере я создал простое развертывание NGINX, а перед ним — сервис в пространстве имен.

веб сервер :

$ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 28s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 28s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-c88ck 1/1 Running 0 28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.183 <none> 80/TCP 28s

Сделаем бэкап из Heptio Ark CLI:

$ ark backup create nginx-simple --include-namespaces webserver

Ээта команда резервирует только пространство имен веб сервер .

Без этой опции Heptio Ark создаст полную резервную копию всех ресурсов в кластере Kubernetes. Резервное копирование займет некоторое время.

Копия будет сохранена в указанном сегменте в S3 ( гептио-резервное ведро ).

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

$ ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none>

Как видите, резервная копия завершена.



Восстановление резервных копий

Давайте удалим (встроенное) пространство имен веб-сервера:

$ kubectl delete ns heptio-test

Теперь восстановим пространство имён после «случайного» удаления, и опять же из Heptio Ark CLI:

$ ark restore create --from-backup nginx-simple Restore request "nginx-simple-20180708173924" submitted successfully. Run `ark restore describe nginx-simple-20180708173924` for more details.

Вы должны увидеть, что пространство имен и все ресурсы (развертывание, набор реплик, модуль и служба) были восстановлены:

$ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 20s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 20s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-9mjvg 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.77 <none> 80/TCP 20s



Структура резервного копирования

Чтобы просмотреть структуру резервной копии, просто загрузите ее из корзины на S3 или введите команду Heptio Ark:

$ ark backup download nginx-simple Backup nginx-simple has been successfully downloaded to $PWD/nginx-simple-data.tar.gz



Резервное копирование и восстановление ресурсов Kubernetes с помощью утилиты Heptio Ark.

В файле webserver.json нашего пространства имен мы видим обычный ресурс пространства имен.



{ "apiVersion":"v1", "kind":"Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"webserver\",\"namespace\":\"\"}}\n" }, "creationTimestamp":"2018-07-08T15:26:44Z", "name":"webserver", "resourceVersion":"3364", "selfLink":"/api/v1/namespaces/webserver", "uid":"52698ae7-82c3-11e8-8529-0645eb60c3f4" }, "spec": { "finalizers":["kubernetes"] }, "status": { "phase":"Active" } }

Если нам не нужно полное восстановление, мы можем восстановить только часть с помощью команды Heptio Ark или зайти напрямую в резервную копию и восстановить эту часть с помощью kubectl.

$ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully.



Запуск резервного копирования по расписанию

Heptio Ark может выполнять запланированные задачи.

Указываем, какие ресурсы и пространства имен следует включить или исключить из резервной копии и когда следует выполнять резервное копирование:

$ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully.

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

В Heptio Ark CLI видим, что расписание появилось и Heptio Ark уже создал первую резервную копию:

$ ark schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR nginx-schedule Enabled 2018-07-08 17:49:00 +0200 CEST * 10 * * * 720h0m0s 25s ago <none> $ ~/Downloads/ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-schedule-20180708154900 Completed 2018-07-08 17:49:00 +0200 CEST 29d <none> nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none>

Здесь указано, что запланированные резервные копии удаляются через 720 часов, то есть через 30 дней.

При создании резервной копии или расписании вы можете указать срок жизни копии — TTL. По истечении этого срока резервная копия будет удалена из хранилища, в нашем случае AWS. Теги: #Системное администрирование #Администрирование серверов #Kubernetes #DevOps #резервное копирование #восстановление

Вместе с данным постом часто просматривают: