Это решение предназначено для сценариев восстановления после катастрофы, связанных с кластером global
. Кластер global
служит управляющей плоскостью платформы и отвечает за управление другими кластерами. Чтобы обеспечить непрерывную доступность сервисов платформы при сбое кластера global
, данное решение развертывает два кластера global
: основной кластер и резервный кластер.
Механизм восстановления после катастрофы основан на синхронизации данных etcd в реальном времени с основного кластера на резервный. Если основной кластер становится недоступен из-за сбоя, сервисы могут быстро переключиться на резервный кластер.
global
;Роли Основного кластера и Резервного кластера являются относительными: кластер, который в данный момент обслуживает платформу, считается Основным (DNS указывает на него), а резервный — Резервным. После переключения роли меняются местами.
Это решение синхронизирует только данные etcd кластера global
; данные из registry, chartmuseum или других компонентов не включены;
Для удобства устранения неполадок и управления рекомендуется называть узлы в стиле standby-global-m1
, чтобы указывать, к какому кластеру принадлежит узел (Основной или Резервный).
Восстановление данных приложений внутри кластера не поддерживается;
Требуется стабильное сетевое соединение между двумя кластерами для обеспечения надежной синхронизации etcd;
Если кластеры основаны на гетерогенных архитектурах (например, x86 и ARM), используйте пакет установки с поддержкой двух архитектур;
Следующие пространства имён исключены из синхронизации etcd. Если в этих пространствах создаются ресурсы, пользователи должны выполнять их резервное копирование вручную:
Если оба кластера настроены на использование встроенных реестров образов, контейнерные образы необходимо загружать отдельно в каждый;
Если в основном кластере развернут DevOps Eventing v3 (knative-operator) и его экземпляры, те же компоненты должны быть предварительно развернуты в резервном кластере.
Единое доменное имя, которое будет Platform Access Address
, а также TLS-сертификат и приватный ключ для обслуживания HTTPS на этом домене;
Выделенный виртуальный IP-адрес для каждого кластера — один для Основного кластера и другой для Резервного;
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 резервного кластера;
Войдите на первый управляющий узел Основного кластера и скопируйте конфигурацию шифрования etcd на все управляющие узлы резервного кластера:
Установите резервный кластер так же, как основной
При установке резервного кластера среды DR, следующие параметры ДОЛЖНЫ быть установлены такими же, как в основном кластере:
Platform Access Address
.Certificate
.Image Repository
.И ОБЯЗАТЕЛЬНО следуйте ПРИМЕЧАНИЯМ ПО УСТАНОВКЕ DR (Среда восстановления после катастроф)
из Шага 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 с файлом /etc/kubernetes/encryption-provider.conf
основного кластера, убедившись, что имена ключей уникальны. Например, если ключ основного кластера называется key1
, переименуйте ключ резервного в key2
:
Убедитесь, что новый файл /etc/kubernetes/encryption-provider.conf
перезаписывает ВСЕ копии на управляющих узлах обоих кластеров:
Перезапустите kube-apiserver на узле 1.1.1.1