Обновление etcd с v3.5 до v3.6
В общем случае переход с etcd v3.5 на v3.6 можно выполнить как скользящее обновление без простоя:
- поочерёдно останавливать процессы etcd v3.5 и заменять их процессами etcd v3.6
- после запуска всех процессов v3.6 кластеру становятся доступны новые возможности v3.6
До начала обновления прочитайте оставшуюся часть руководства и подготовьтесь.
Контрольные списки обновления
Обновление 3.5
Перед обновлением до 3.6 убедитесь, что все участники 3.5 обновлены до 3.5.32 или более поздней версии
. Корректирующие выпуски с 3.5.24 по 3.5.26 устраняют несколько потенциальных препятствий обновлению; в 3.5.32
добавлен --v2-deprecation=write-only-skip-check, а etcdutl check v2store расширен для проверки не только снимка v2, но и записей WAL.
Хранилище V2
Если флаг --enable-v2 не настроен или равен false, дальнейшие действия не требуются.
Если --enable-v2 настроен, выполните etcdutl check v2store, чтобы проверить наличие в v2store пользовательских данных, не относящихся к составу кластера. Если таких данных нет, флаг можно безопасно удалить. В противном случае обратитесь к руководству по миграции v2
.
Добавленные флаги
Удалённые флаги
Устаревшие флаги
Флаг etcd --experimental-bootstrap-defrag-threshold-megabytes объявлен устаревшим.
Флаг etcd --experimental-compaction-batch-limit объявлен устаревшим.
Флаг etcd --experimental-compact-hash-check-time объявлен устаревшим.
Флаг etcd --experimental-compaction-sleep-interval объявлен устаревшим.
Флаг etcd --experimental-corrupt-check-time объявлен устаревшим.
Флаг etcd --experimental-enable-distributed-tracing объявлен устаревшим.
Флаг etcd --experimental-distributed-tracing-address объявлен устаревшим.
Флаг etcd --experimental-distributed-tracing-instance-id объявлен устаревшим.
Флаг etcd --experimental-distributed-tracing-sampling-rate объявлен устаревшим.
Флаг etcd --experimental-distributed-tracing-service-name объявлен устаревшим.
Флаг etcd --experimental-downgrade-check-time объявлен устаревшим.
Флаг etcd --experimental-max-learners объявлен устаревшим.
Флаг etcd --experimental-memory-mlock объявлен устаревшим.
Флаг etcd --experimental-peer-skip-client-san-verification объявлен устаревшим.
Флаг etcd --experimental-snapshot-catchup-entries объявлен устаревшим.
Флаг etcd --experimental-warning-apply-duration объявлен устаревшим.
Флаг etcd --experimental-warning-unary-request-duration объявлен устаревшим.
Флаг etcd --experimental-watch-progress-notify-interval объявлен устаревшим.
Эквивалентные флаги функций v3.5
эквивалентный флаг функции для etcd --experimental-compact-hash-check-enabled=true
эквивалентный флаг функции для etcd --experimental-initial-corrupt-check=true
эквивалентный флаг функции для etcd --experimental-enable-lease-checkpoint=true
эквивалентный флаг функции для etcd --experimental-enable-lease-checkpoint-persist=true
эквивалентный флаг функции для etcd --experimental-stop-grpc-service-on-defrag=true
эквивалентный флаг функции для etcd --experimental-txn-mode-write-with-shared-buffer=false
Флаги с новыми значениями по умолчанию
Исходное значение флага по умолчанию etcd --snapshot-count=100000
Исходное значение флага по умолчанию etcd --v2-deprecation='not-yet'
Исходное значение флага по умолчанию etcd --discovery-fallback='proxy'
Различия в метриках Prometheus
Контрольные списки обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до v3.6 работающий кластер должен иметь версию v3.5 или более позднюю. Если версия старше v3.5, перед переходом на v3.6 обновитесь до v3.5 .
Кроме того, для плавного скользящего обновления работающий кластер должен быть исправен. Перед продолжением проверьте его работоспособность командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточном окружении, прежде чем развёртывать обновление в рабочем окружении.
До начала загрузите резервную копию снимка
. Если при обновлении возникнет проблема, эту копию можно использовать для отката
к существующей версии etcd. Обратите внимание: команда snapshot сохраняет только данные v3.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до v3.6. Участники etcd согласуют между собой общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Откат
Перед обновлением кластера etcd создайте и загрузите его резервную копию снимка . При необходимости снимок позволяет восстановить состояние кластера до обновления. Если во время обновления возникнут проблемы, сначала следует определить и устранить их первопричину. Пока кластер находится в состоянии смешанных версий и хотя бы один участник остаётся на v3.5, можно либо заменить двоичный файл или образ старой версией v3.5, либо непосредственно восстановить кластер из снимка. В таком смешанном состоянии кластер продолжает работать как кластер v3.5, что позволяет откатиться без формальной процедуры понижения версии.
Однако после обновления всех участников до v3.6 кластер считается полностью обновлённым, и откат заменой двоичных файлов больше невозможен. В этом случае восстановиться можно только из снимка, сделанного перед обновлением. Чтобы вернуться к исходной версии после полного обновления, необходимо следовать официальному руководству по понижению версии, обеспечивая согласованность и предотвращая повреждение данных.
Процедура обновления
В этом примере показано обновление работающего на локальной машине кластера etcd v3.5 из 3 участников.
Шаг 1: проверка требований к обновлению
Кластер исправен и использует v3.5.x?
Шаг 2: загрузка резервной копии снимка с лидера
Загрузите резервную копию снимка , чтобы обеспечить путь понижения версии при возникновении проблем.
Лидер etcd гарантированно содержит последние данные приложения, поэтому снимок следует получать с лидера:
Шаг 3: остановка одного существующего сервера etcd
При остановке каждого процесса etcd другие участники кластера записывают в журнал ожидаемые ошибки. Это нормально, поскольку соединение с участником кластера (временно) разорвано:
Шаг 4: перезапуск сервера etcd с той же конфигурацией
Перезапустите сервер etcd с прежней конфигурацией, но с новым двоичным файлом etcd.
Новый etcd v3.6 опубликует свои сведения в кластере. На этом этапе кластер всё ещё работает по протоколу v3.5 — наименьшей общей версии.
{"level":"info","ts":"2025-03-01T04:40:36.828+0530","caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.889+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"bf9071f4639c75cc","from":"3.0","to":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.828+0530","caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.894+0530","caller":"etcdserver/server.go:1686","msg":"published local member to cluster through raft","local-member-id":"bf9071f4639c75cc","local-member-attributes":"{Name:node1 ClientURLs:[http://127.0.0.1:2379]}","cluster-id":"59a05384c9b79ee","publish-timeout":"7s"}
Убедитесь, что сначала каждый участник, а затем весь кластер становятся исправными с новым двоичным файлом etcd v3.6:
До обновления всего кластера необновлённые участники будут записывать в журнал подобные предупреждения.
Это ожидаемо и прекратится после обновления всех участников кластера etcd до v3.6:
Шаг 5: повторение шага 3 и шага 4 для остальных участников
После обновления всех участников кластер сообщит об успешном переходе на v3.6:
Участник 1:
{"level":"info","ts":"2025-03-01T04:58:32.375+0530","caller":"etcdserver/server.go:2149","msg":"updating cluster version using v3 API","from":"3.5","to":"3.6"}{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"etcdserver/server.go:2164","msg":"cluster version is updated","cluster-version":"3.6"}
Участник 2:
{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"91bc3c398fb3c146","from":"3.5","to":"3.6"}
Участник 3:
{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"fd422379fda50e48","from":"3.5","to":"3.6"}