Обновление etcd с 2.3 до 3.0
В общем случае обновление etcd с 2.3 до 3.0 можно выполнить поэтапно без простоя:
- по очереди останавливать процессы etcd v2.3 и заменять их процессами etcd v3.0;
- после запуска всех процессов v3.0 кластеру станут доступны новые возможности v3.0.
Перед началом обновления прочитайте остальную часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается при восстановлении из существующих снимков, если отсутствует файл v3 ETCD_DATA_DIR/member/snap/db. Это происходит, когда сервер мигрировал с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например при перемещении файла db. После миграции на v3 etcd может работать только с данными v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данных v3.
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.0 работающий кластер должен иметь версию 2.3 или новее. Версию ниже 2.3 сначала обновите до 2.3 , а затем до 3.0.
Для плавного поэтапного обновления работающий кластер также должен быть исправен.
Перед продолжением проверьте его командой etcdctl cluster-health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточной среде до развёртывания обновления в производственной.
До начала создайте резервную копию каталога данных etcd . Если обновление завершится неудачно, копия позволит вернуться к предыдущей версии .
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.0. Участники etcd согласуют общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Если общий объём данных превышает 50MB, новому обновлённому участнику может потребоваться до 2 минут, чтобы догнать кластер. Оцените объём по размеру последнего снимка. Безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем объёме, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы настолько крупных кластеров etcd могут до обновления обратиться к команде etcd за рекомендациями.
Понижение версии
После обновления всех участников до v3.0 кластер становится кластером v3.0, и понизить версию из этого завершённого состояния невозможно. Пока хотя бы один участник остаётся на v2.3, кластер и его операции сохраняют версию «v2.3», и из такого смешанного состояния можно вернуть двоичный файл etcd v2.3 на всех участниках.
Создайте резервную копию каталога данных всех участников etcd, чтобы понижение версии оставалось возможным даже после полного обновления кластера.
Процедура обновления
В примере подробно показано обновление локального кластера etcd v2.3 из трёх участников.
1. Проверьте требования к обновлению
Кластер исправен и работает под управлением v.2.3.x?
2. Остановите существующий процесс etcd
При остановке каждого процесса etcd другие участники записывают ожидаемые ошибки. Это нормально, поскольку соединение с участником временно разорвано:
На этом этапе рекомендуется создать резервную копию каталога данных etcd , чтобы при проблемах сохранить путь понижения версии:
3. Установите двоичный файл etcd v3.0 и запустите новый процесс etcd
Новый etcd v3.0 опубликует свои сведения в кластере:
Убедитесь, что с новым двоичным файлом etcd v3.0 каждый участник, а затем весь кластер становятся исправными:
До обновления всего кластера обновлённые участники будут записывать следующие предупреждения. Это ожидаемо и прекратится после обновления всех участников до v3.0:
4. Повторите шаги 2–3 для остальных участников
5. Завершите обновление
После обновления всех участников кластер сообщит об успешном переходе на 3.0:
Дополнительные соображения
- Переменные окружения etcdctl были обновлены. Если
ETCDCTL_API=2 etcdctl cluster-healthработает, ноETCDCTL_API=3 etcdctl endpoints healthотвечаетError: grpc: timed out when dialing, убедитесь, что используются новые имена переменных .
Известные проблемы
- etcd < v3.1 работает неправильно при сборке с Go > v1.7. Дополнительные сведения см. в задаче 6951 .
- Если в журнале сервера etcd появляется ошибка
transport: http2Client.notifyError got notified that the client transport was broken unexpected EOF., убедитесь, что используется готовый выпуск etcd либо сборка с (etcd v3.1+ & go v1.7+) или (etcd <v3.1 & go v1.6.x). - Добавление узла v3 в кластер v2.3 во время обновления не поддерживается и может вызвать аварийное завершение. Дополнительные сведения см. в задаче 7249 . Смешанные версии участников разрешены только во время миграции на v3. Завершите обновление до любых изменений состава кластера.