Наш эксперт Михаил Сергеев подготовил подробный материал (в двух форматах: статья и видеоурок), из которого вы узнаете:
Что такое Velero и S3;
Как установить необходимое ПО;
Как развернуть объектное хранилище на базе Minio;
Как установить Velero в кластер Kubernetes;
О настройке автоматического бэкапа нашего приложения;
Защите бэкапа от удаления злоумышленником.
Что такое Velero и S3
Velero – в переводе испанского означает парусная лодка. Это программный продукт с открытым исходным кодом, предназначенный для безопасного бэкапирования (создания резервной копии данных, обычно в сжатом виде), восстановления после сбоев и миграции ресурсов Kubernetes кластера. Официальный сайт программного продукта https://velero.io/, а также весь исходный код доступен на GitHub.
Minio — это сервер хранения объектов с открытым исходным кодом, совместимый с облачным хранилищем Amazon S3.
Объектное хранилище – это технология хранения и управления данными в неструктурированном формате, называемом объектами.
Для бэкапа сущностей Kubernetes-кластера, Velero использует исключительно объектное хранилище. Можно выбрать абсолютно любое S3 хранилище, но в сегодняшнем уроке мы будем использовать хранилище на базе Minio. Преимуществом Minio стала возможность быстро и просто развернуть её на сервере или виртуальной машине, или Kubernetes-кластере, и хранить бэкапы непосредственно у себя. Можете зайти на официальный сайт https://min.io/ и посмотреть по нему документацию и способы установки.
У нас есть уже готовый тестовый Kubernetes-кластер от компании Corpsoft24. Давайте посмотрим, что оно из себя представляет. Сразу предупредим, что мы будем использовать алиасы команд, что прилично ускоряет работу.
Рис.1 Тестовый кластер с нодами.
Рис.1 Тестовый кластер с нодами.
Рис.2 Варианты установки Minio.
Рис.2 Варианты установки Minio.
Прежде чем настраивать бэкап Minio на Kubernetes-кластере нам необходимо установить S3 хранилище. Для этого мы заходим на сайт https://min.io/ и выбираем один из вариантов установки. Но тут нет того, что нас интересует, потому что такой способ совершенно не годится для установки сервера. Устанавливать его в нашем Kubernetes-кластере мы не будем, поскольку бэкап должен быть отдельно даже у другого провайдера. Не на другой виртуальной машине или другом кластере, а именно у другого провайдера, возможно, даже в другой стране. Поэтому самый простой способ — это взять простую виртуалку и на ней развернуть с помощью Docker, точнее Docker Compose. Вот на самом сайте про docker-compose ничего не сказано, но в репозитории на GitHub у них есть пример, как его развернуть (https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/docker-compose.yaml).
Рис.3 Пример разворачивания Docker Compose.
Рис.3 Пример разворачивания Docker Compose.
Установим необходимое ПО
Нода (англ. node) – сервер со специальным программным обеспечением, который может быть представлен компьютером или другой вычислительной техникой.
По системным требованиям необходимо развернуть дублирование на 4 нодах (удалённых серверах), которые будут располагаться в разных регионах. Это необходимо для повышения отказоустойчивости. Также в системных требованиях указано, что установка должна производиться на диск с разделом XFS.
Рис.4 Системные требования Minio.
Рис.4 Системные требования Minio.
В идеале бэкап должен храниться у другого провайдера, даже, возможно в другой стране. Поэтому самый простой способ – взять простую виртуалку и там развернуть необходимое программное обеспечение.
После установки Caddy-proxy установим Minio. Для установки нужно минимум 8 дисков и 4 ноды. Можно это сделать на разных виртуальных машинах, но в данном примере всё сделаем на одной.
Всё ПО мы устанавливаем на отдельной виртуальной машине с другим провайдером, поскольку проблемы у провайдера зачастую влияют на целостность бэкапа.
Рис.5 Добавление диска на 150 Гб.
Рис.5 Добавление диска на 150 Гб.Рис.6 Проверка старта.
Рис.6 Проверка старта.
Развернём объектное хранилище на базе Minio
Всё успешно запущено (4 ноды и Caddy). Сначала проверим Caddy-proxy. Когда мы указали там домен и запустили наши контейнеры, то Caddy-proxy сделал запрос в Let’s Encrypt и создал нам сертификаты. Сертификаты он скачивает в паку Data. Сертификатов будет 2: один для API, второй для админки (s3adm). Вместе с сертификатом создаётся и ключ (s3adm.194.126.161.151.sslip.io.key).
Зайдём в админку через браузер и проверим генерацию сертификата от Let’s Encrypt на указанный нами домен. Нужно будет авторизоваться через логин (cs24) и пароль (3nDPUk1GpfrWHn7kw1p9). Авторизация прошла успешно. Изучим интерфейс админки, позволяющий смотреть различные метрики и логи.
Хотим обратить внимание, что с помощью Сaddy мы сделали whitelist (список IP-адресов с которых можно зайти в админку).
Проверяем работу whitelist, сменив через VPN наш IP-адрес. Обновляем страницу и пробуем повторно зайти в админку. В целях безопасности ваших данных рекомендуем максимально ограничить доступ к админке. Например, заходить через VPN только с одного определённого IP-адреса.
Затем в админке создаём Bucket, необходимый для заливки наших бэкапов из кластера Kubernetes с помощью Velero. Под разные задачи можно создавать разные бакеты.
Рис.8 Создание Bucket.
Рис.8 Создание Bucket.
Установим Velero в кластер Kubernetes
Для начала убедимся, что наш сервер имеет доступ к нашему S3 (можно проверить командой Curl). Запрос успешно прошёл. Если сделать запрос с другого сервера, то он не пройдёт.
Теперь займёмся установкой Velero, перейдя на их официальный сайт (https://velero.io). С его помощью мы сможем не только создавать бэкапы Kubernetes-кластера но и перенести их из одного кластера в другой, защитить данные от всевозможных угроз. Если нажать «скачать Velero» то нас перенесёт на GitHub, где описаны различные изменения в каждой версии программы. Давайте скачаем, как нам рекомендует официальный сайт, бинарную версию установщика. Мы уже заранее подготовили скрипт для установки Velero.
Настройка автоматического бэкапа нашего приложения
Теперь попробуем забэкапить наш Kubernetes-кластер. Бэкап происходит по специальным меткам, которые устанавливаются вручную.
Рис.10 Успешное создание бэкапа.
Рис.10 Успешное создание бэкапа.
После создания бэкапа проверяем отчёт, все ли данные были в него включены. Затем переходим в нашу админку S3, нажимаем обновить. Увидим 9 объектов объёмом 55 Кб. Далее проверяем, где находятся резервные данные. Системой была создана папка backups (полный путь k8s/backups/prodapp), где в сжатом виде содержатся сами бэкапы.
Затем проверяем работоспособность получившейся системы. Для этого имитируем сбой, удалив часть файлов, после чего нас уже не пускает в приложение.
Для восстановления зададим команду velero restore, затем добавляем creat. После ввода velero restore будет выдана подсказка с вариантами дальнейших действий. Затем добавляем из бэкапа (--from-backup) и название нашего бэкапа (prodapp).
Полная команда будет выглядеть как: «velero restore creat --from-backup prodapp».
Запустится восстановление данных, останется только его дождаться. Время восстановления зависит от используемого оборудования, включая ширину интернет-канала и объёма восстанавливаемых данных.
Для проверки восстановления данных из бэкапа запустим браузер и обновим страницу. Приложение успешно восстановилось в том же кластере. Кстати, возможно удалить приложение в одном, а восстановить в другом кластере, тем самым сделав быстрый переезд на другой кластер.
Мы сделали разовый бэкап, но есть возможность сделать резервное копирование постоянным, автоматизировав его. Задав команду: «velero schedule creat prodapp daily –schedule=”0 2 ***” –selector app=production» чтобы понимать, что это дневное задание.
На случай взлома сервера и удаления бэкапов, можно включить в админке защиту от удаления.