Данное решение предназначено для сценариев восстановления после катастрофы, связанных с кластером global
. Кластер global
служит управляющей плоскостью платформы и отвечает за управление другими кластерами. Для обеспечения непрерывной доступности сервисов платформы при сбое кластера global
в этом решении развертываются два кластера global
: основной кластер (Primary Cluster) и резервный кластер (Standby Cluster).
Механизм восстановления основан на синхронизации данных etcd в реальном времени с основного кластера на резервный. В случае недоступности основного кластера из-за сбоя, сервисы могут быстро переключиться на резервный кластер.
global
;Роли Primary Cluster и Standby Cluster являются относительными: кластер, обслуживающий платформу в данный момент, считается основным (DNS указывает на него), а резервный — резервным. После переключения роли меняются местами.
Решение синхронизирует только данные etcd кластера global
; данные реестра, chartmuseum и других компонентов не включены;
Для удобства отладки и управления рекомендуется называть узлы в стиле standby-global-m1
, чтобы указывать принадлежность узла к основному или резервному кластеру.
Восстановление данных приложений внутри кластера не поддерживается;
Для надежной синхронизации etcd требуется стабильное сетевое соединение между двумя кластерами;
Если кластеры основаны на гетерогенных архитектурах (например, x86 и ARM), используйте пакет установки с поддержкой двух архитектур;
Следующие пространства имён исключены из синхронизации etcd. Если в них создаются ресурсы, пользователи должны самостоятельно выполнять их резервное копирование:
Если оба кластера используют встроенные реестры образов, контейнерные образы необходимо загружать отдельно в каждый из них;
Если в основном кластере развернут DevOps Eventing v3 (knative-operator) и его экземпляры, те же компоненты должны быть предварительно развернуты в резервном кластере.
Единый домен, который будет Platform Access Address
, а также TLS-сертификат и приватный ключ для обслуживания HTTPS на этом домене;
Выделенный виртуальный IP-адрес для каждого кластера — один для Primary Cluster и другой для Standby Cluster;
80
, 443
, 6443
, 2379
и 11443
на управляющие узлы за соответствующим VIP.При установке основного кластера DR-окружения,
Self-built VIP
недоступна.Platform Access Address
ДОЛЖНО содержать домен, а Cluster Endpoint
— виртуальный IP-адрес.An Existing Certificate
(одинакового сертификата), при необходимости запросите легитимный сертификат. Опция Self-signed Certificate
недоступна.Image Repository
в значение Platform Deployment
поля Username
и Password
НЕ ДОЛЖНЫ быть пустыми; поле IP/Domain
ДОЛЖНО содержать домен, используемый как Platform Access Address
.HTTP Port
и HTTPS Port
для Platform Access Address
ДОЛЖНЫ быть 80 и 443 соответственно.Advanced
) поле Other Platform Access Addresses
ДОЛЖНО включать виртуальный IP текущего кластера.Обратитесь к следующей документации для завершения установки:
Временно направьте доменное имя на VIP резервного кластера;
Войдите на первый управляющий узел Primary Cluster и скопируйте конфигурацию шифрования etcd на все управляющие узлы резервного кластера:
Установите резервный кластер так же, как и основной
При установке резервного кластера DR-окружения, следующие параметры ДОЛЖНЫ совпадать с параметрами основного кластера:
Platform Access Address
.Certificate
.Image Repository
.И ОБЯЗАТЕЛЬНО следуйте NOTES OF DR (Disaster Recovery Environment) INSTALLING
из Шага 1.
Обратитесь к следующей документации для завершения установки:
Настройте балансировщик нагрузки для перенаправления порта 2379
на управляющие узлы соответствующего кластера. Поддерживается ТОЛЬКО TCP-режим; перенаправление на уровне L7 не поддерживается.
Получите доступ к веб-консоли резервного глобального кластера через его VIP и переключитесь в режим Administrator;
Перейдите в Marketplace > Cluster Plugins, выберите кластер global
;
Найдите etcd Synchronizer, нажмите Install, настройте параметры:
Проверьте, что Pod синхронизации запущен на резервном кластере:
Когда появится сообщение “Start Sync update”, пересоздайте один из Pod для повторного запуска синхронизации ресурсов с зависимостями ownerReference:
Проверьте статус синхронизации:
Объяснение вывода:
LOCAL ETCD missed keys
: Ключи есть в основном кластере, но отсутствуют в резервном. Часто вызвано GC из-за порядка ресурсов при синхронизации. Перезапустите один Pod etcd-sync для исправления;LOCAL ETCD surplus keys
: Лишние ключи есть только в резервном кластере. Перед удалением этих ключей из резервного кластера согласуйте с командой эксплуатации.Если установлены следующие компоненты, перезапустите их сервисы:
Log Storage для Elasticsearch:
Monitoring для VictoriaMetrics:
При необходимости перезапустите Elasticsearch на резервном кластере:
Проверьте согласованность данных в резервном кластере (та же проверка, что и в Шаге 3);
Удалите плагин синхронизации etcd;
Уберите перенаправление порта 2379
с обоих VIP;
Переключите DNS домена платформы на VIP резервного кластера, который теперь становится основным;
Проверьте разрешение DNS:
Очистите кэш браузера и зайдите на страницу платформы, чтобы убедиться, что она отражает бывший резервный кластер;
Перезапустите следующие сервисы (если установлены):
Log Storage для Elasticsearch:
Monitoring для VictoriaMetrics:
cluster-transformer:
Если рабочие кластеры отправляют данные мониторинга в основной, перезапустите warlock в рабочем кластере:
На исходном основном кластере повторите шаги Включения синхронизации etcd, чтобы превратить его в новый резервный кластер.
Регулярно проверяйте статус синхронизации на резервном кластере:
Если обнаружены отсутствующие или лишние ключи, следуйте инструкциям в выводе для их устранения.
При использовании violet
для загрузки пакетов в резервный кластер необходимо указывать параметр --dest-repo
с VIP резервного кластера.
Если этот параметр опущен, пакет будет загружен в репозиторий образов основного кластера, что помешает резервному кластеру установить или обновить соответствующее расширение.
Получите ключ шифрования ETCD на любом управляющем узле резервного кластера:
Он должен выглядеть так:
Создайте резервную копию ключа шифрования ETCD на любом управляющем узле основного кластера (например, 1.1.1.1):
Объедините ключ шифрования ETCD резервного кластера в файл /etc/kubernetes/encryption-provider.conf
на узле 1.1.1.1
, убедившись, что имена ключей уникальны.
Например, если ключ основного кластера называется key1
, переименуйте ключ резервного в key2
:
Убедитесь, что новый файл /etc/kubernetes/encryption-provider.conf
перезаписывает ВСЕ реплики на управляющих узлах обоих кластеров:
Перезапустите kube-apiserver на узле 1.1.1.1