Это многостраничная версия текущего раздела для печати. .
Обновление
1 - Обновление кластеров etcd и приложений
В этом разделе содержатся документы, специфичные для обновления кластеров etcd и приложений.
Политика обновления
Перед обновлением обратите внимание, что etcd поддерживает только следующие два случая обновления:
- Обновление патча: обновление между выпусками патча в рамках одной минорной версии (e.g. 3.7.0 - 3.7.1).
- Минорное обновление: обновление по одной минорной версии за раз (e.g. 3.6 - 3.7). Обновления, пропускающие минорную версию, не поддерживаются и, скорее всего, завершатся неудачно. Обновитесь до последней версии патча перед обновлением до следующей минорной версии.
Обновление кластера etcd v3.x
- Обновление etcd с 3.0 до 3.1
- Обновление etcd с 3.1 до 3.2
- Обновление etcd с 3.2 до 3.3
- Обновление etcd с 3.3 до 3.4
- Обновление etcd с 3.4 до 3.5
- Обновление etcd с 3.5 до 3.6
- Обновление etcd с 3.6 до 3.7
Обновление с etcd v2.3
2 - Обновление 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"}
3 - Обновление etcd с 3.4 до 3.5
В общем случае переход с etcd 3.4 на 3.5 можно выполнить как скользящее обновление без простоя:
- поочерёдно останавливать процессы etcd v3.4 и заменять их процессами etcd v3.5
- после запуска всех процессов v3.5 кластеру становятся доступны новые возможности v3.5
До начала обновления прочитайте оставшуюся часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 ETCD_DATA_DIR/member/snap/db отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3 (например, если файл db перемещён). etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.
Если в кластере включена аутентификация, скользящее обновление с 3.4 или более ранней версии не поддерживается, поскольку 3.5 изменяет формат относящихся к аутентификации записей WAL .
Основные нарушающие совместимость изменения в 3.5.
Устаревшая метрика Prometheus etcd_debugging_mvcc_db_total_size_in_bytes
Чтобы стимулировать мониторинг хранилища etcd, в v3.5 метрика Prometheus etcd_debugging_mvcc_db_total_size_in_bytes переведена в etcd_mvcc_db_total_size_in_bytes. В v3.5 метрика etcd_debugging_mvcc_db_total_size_in_bytes полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Устаревшая метрика Prometheus etcd_debugging_mvcc_put_total
Чтобы стимулировать мониторинг хранилища etcd, в v3.5 метрика Prometheus etcd_debugging_mvcc_put_total переведена в etcd_mvcc_put_total. В v3.5 метрика etcd_debugging_mvcc_put_total полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Устаревшая метрика Prometheus etcd_debugging_mvcc_delete_total
Чтобы стимулировать мониторинг хранилища etcd, в v3.5 метрика Prometheus etcd_debugging_mvcc_delete_total переведена в etcd_mvcc_delete_total. В v3.5 метрика etcd_debugging_mvcc_delete_total полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Устаревшая метрика Prometheus etcd_debugging_mvcc_txn_total
Чтобы стимулировать мониторинг хранилища etcd, в v3.5 метрика Prometheus etcd_debugging_mvcc_txn_total переведена в etcd_mvcc_txn_total. В v3.5 метрика etcd_debugging_mvcc_txn_total полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Устаревшая метрика Prometheus etcd_debugging_mvcc_range_total
Чтобы стимулировать мониторинг хранилища etcd, в v3.5 метрика Prometheus etcd_debugging_mvcc_range_total переведена в etcd_mvcc_range_total. В v3.5 метрика etcd_debugging_mvcc_range_total полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Устаревший etcd --logger capnslog
Для поддержки нескольких направлений вывода и структурированного ведения журнала v3.4 по умолчанию использует --logger=zap.
etcd --logger=capnslog объявлен устаревшим в v3.5, а теперь по умолчанию используется --logger=zap.
В v3.4 добавлена поддержка etcd --logger=zap для структурированного ведения журнала и нескольких направлений вывода. Основная цель — содействовать автоматизированному мониторингу etcd вместо просмотра серверных журналов уже после начала сбоя. В дальнейшем etcd будет записывать как можно меньше сообщений, а его мониторинг с помощью метрик и оповещений станет проще. etcd --logger=capnslog будет объявлен устаревшим в v3.5.
Устаревший etcd --log-output
Для поддержки нескольких направлений вывода журнала в v3.4 etcd --log-output переименован в --log-outputs
.
etcd --log-output объявлен устаревшим в v3.5.
Устаревший флаг etcd --debug (теперь --log-level=debug)
Флаг etcd --debug объявлен устаревшим.
Устаревший etcd --log-package-levels
Флаг etcd --log-package-levels для capnslog объявлен устаревшим.
Теперь по умолчанию используется etcd --logger=zap.
Устаревшая конечная точка [CLIENT-URL]/config/local/log
Конечная точка /config/local/log, как и флаг etcd --log-package-levels, объявляется устаревшей в v3.5.
Изменённые конечные точки HTTP шлюза gRPC (устаревшая /v3beta)
До
После
/v3beta удалена в выпуске 3.5.
Контрольные списки обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.5 работающий кластер должен иметь версию 3.4 или более позднюю. Если версия старше 3.4, перед переходом на 3.5 обновитесь до 3.4 .
Кроме того, для плавного скользящего обновления работающий кластер должен быть исправен. Перед продолжением проверьте его работоспособность командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточном окружении, прежде чем развёртывать обновление в рабочем окружении.
До начала загрузите резервную копию снимка
. Если при обновлении возникнет проблема, эту копию можно использовать для понижения версии
до существующей версии etcd. Обратите внимание: команда snapshot сохраняет только данные v3. О данных v2 см. раздел резервное копирование хранилища v2
.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.5. Участники etcd согласуют между собой общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Примечание: это ограничение не относится к кластеру, содержащему только данные v3 и не содержащему данные v2.
Если кластер обслуживает набор данных v2 объёмом более 50MB, каждому только что обновлённому участнику может потребоваться до двух минут, чтобы догнать существующий кластер. Для оценки общего объёма данных проверьте размер недавнего снимка. Иными словами, безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем общем объёме данных, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы столь крупных кластеров etcd могут перед обновлением обратиться к команде etcd за рекомендациями по процедуре.
Понижение версии
После обновления всех участников до v3.5 кластер также переходит на v3.5, и понижение версии из этого завершённого состояния невозможно. Однако пока хотя бы один участник остаётся на v3.4, кластер и его операции имеют версию “v3.4”, а из смешанного состояния можно вернуться к использованию двоичного файла etcd v3.4 на всех участниках.
Загрузите резервную копию снимка , чтобы сохранить возможность понижения версии кластера даже после полного обновления.
Процедура обновления
В этом примере показано обновление работающего на локальной машине кластера etcd v3.4 из 3 участников.
Шаг 1: проверка требований к обновлению
Кластер исправен и использует v3.4.x?
Шаг 2: загрузка резервной копии снимка с лидера
Загрузите резервную копию снимка , чтобы обеспечить путь понижения версии при возникновении проблем.
Лидер etcd гарантированно содержит последние данные приложения, поэтому снимок следует получать с лидера:
Шаг 3: остановка одного существующего сервера etcd
При остановке каждого процесса etcd другие участники кластера записывают в журнал ожидаемые ошибки. Это нормально, поскольку соединение с участником кластера (временно) разорвано:
Шаг 4: перезапуск сервера etcd с той же конфигурацией
Перезапустите сервер etcd с прежней конфигурацией, но с новым двоичным файлом etcd.
Новый etcd v3.5 опубликует свои сведения в кластере. На этом этапе кластер всё ещё работает по протоколу v3.4 — наименьшей общей версии.
{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.4"}
{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}
Убедитесь, что сначала каждый участник, а затем весь кластер становятся исправными с новым двоичным файлом etcd v3.5:
До обновления всего кластера необновлённые участники будут записывать в журнал подобные предупреждения.
Это ожидаемо и прекратится после обновления всех участников кластера etcd до v3.5:
Шаг 5: повторение шага 3 и шага 4 для остальных участников
После обновления всех участников кластер сообщит об успешном переходе на 3.5:
Участник 1:
{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.5"}
Участник 2:
{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.4","from":"3.5"}{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
Участник 3:
{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.4","from":"3.5"}{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
4 - Обновление etcd с 3.3 до 3.4
В общем случае переход с etcd 3.3 на 3.4 можно выполнить как скользящее обновление без простоя:
- поочерёдно останавливать процессы etcd v3.3 и заменять их процессами etcd v3.4
- после запуска всех процессов v3.4 кластеру становятся доступны новые возможности v3.4
До начала обновления прочитайте оставшуюся часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 ETCD_DATA_DIR/member/snap/db отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3 (например, если файл db перемещён). etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.
Основные нарушающие совместимость изменения в 3.4.
Использование ETCDCTL_API=3 etcdctl по умолчанию
Теперь ETCDCTL_API=3 используется по умолчанию.
Использование etcd --enable-v2=false по умолчанию
Теперь etcd --enable-v2=false
используется по умолчанию.
Это означает, что без явного etcd --enable-v2=true сервер etcd v3.4 не обслуживает запросы API v2.
Если использовался API v2, обязательно включите API v2 в v3.4:
Остальные API HTTP продолжат работать (например, [CLIENT-URL]/metrics, [CLIENT-URL]/health и шлюз gRPC v3).
Устаревшие флаги etcd --ca-file и etcd --peer-ca-file
Флаги --ca-file и --peer-ca-file устарели; они объявлены устаревшими начиная с v2.1.
Обратите внимание: задание этого параметра автоматически включает аутентификацию по клиентскому сертификату независимо от значения --client-cert-auth.
Устаревшая ошибка grpc.ErrClientConnClosing
grpc.ErrClientConnClosing объявлена устаревшей в gRPC >= 1.10
.
Требование grpc.WithBlock для клиентского подключения
Новый клиентский балансировщик
использует асинхронный разрешитель для передачи конечных точек функции подключения gRPC. Поэтому клиенту v3.4 требуется параметр подключения grpc.WithBlock, чтобы дождаться установления нижележащего соединения.
Объявление метрики Prometheus etcd_debugging_mvcc_db_total_size_in_bytes устаревшей
Чтобы стимулировать мониторинг хранилища etcd, в v3.4 метрика Prometheus etcd_debugging_mvcc_db_total_size_in_bytes переведена в etcd_mvcc_db_total_size_in_bytes.
Для обратной совместимости etcd_debugging_mvcc_db_total_size_in_bytes всё ещё предоставляется в v3.4. В v3.5 она будет полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Объявление метрики Prometheus etcd_debugging_mvcc_put_total устаревшей
Чтобы стимулировать мониторинг хранилища etcd, в v3.4 метрика Prometheus etcd_debugging_mvcc_put_total переведена в etcd_mvcc_put_total.
Для обратной совместимости etcd_debugging_mvcc_put_total всё ещё предоставляется в v3.4. В v3.5 она будет полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Объявление метрики Prometheus etcd_debugging_mvcc_delete_total устаревшей
Чтобы стимулировать мониторинг хранилища etcd, в v3.4 метрика Prometheus etcd_debugging_mvcc_delete_total переведена в etcd_mvcc_delete_total.
Для обратной совместимости etcd_debugging_mvcc_delete_total всё ещё предоставляется в v3.4. В v3.5 она будет полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Объявление метрики Prometheus etcd_debugging_mvcc_txn_total устаревшей
Чтобы стимулировать мониторинг хранилища etcd, в v3.4 метрика Prometheus etcd_debugging_mvcc_txn_total переведена в etcd_mvcc_txn_total.
Для обратной совместимости etcd_debugging_mvcc_txn_total всё ещё предоставляется в v3.4. В v3.5 она будет полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Объявление метрики Prometheus etcd_debugging_mvcc_range_total устаревшей
Чтобы стимулировать мониторинг хранилища etcd, в v3.4 метрика Prometheus etcd_debugging_mvcc_range_total переведена в etcd_mvcc_range_total.
Для обратной совместимости etcd_debugging_mvcc_range_total всё ещё предоставляется в v3.4. В v3.5 она будет полностью объявлена устаревшей.
Обратите внимание: метрики пространства имён etcd_debugging_* помечены как экспериментальные. По мере улучшения руководства по мониторингу дополнительные метрики могут становиться стабильными.
Объявление флага etcd --log-output устаревшим (теперь --log-outputs)
Для поддержки нескольких направлений вывода журнала etcd --log-output переименован в --log-outputs
. etcd --logger=capnslog не поддерживает несколько направлений вывода.
etcd --log-output будет объявлен устаревшим в v3.5. etcd --logger=capnslog будет объявлен устаревшим в v3.5.
В v3.4 добавлена поддержка etcd --logger=zap --log-outputs=stderr для структурированного ведения журнала и нескольких направлений вывода. Основная цель — содействовать автоматизированному мониторингу etcd вместо просмотра серверных журналов уже после начала сбоя. В дальнейшем etcd будет записывать как можно меньше сообщений, а его мониторинг с помощью метрик и оповещений станет проще. etcd --logger=capnslog будет объявлен устаревшим в v3.5.
Изменение типа поля log-outputs в etcd --config-file на []string
Поскольку log-outputs (прежнее имя поля — log-output) теперь принимает несколько получателей, тип поля log-outputs в файле конфигурации YAML etcd необходимо изменить на []string, как показано ниже:
Переименование embed.Config.LogOutput в embed.Config.LogOutputs
Для поддержки нескольких направлений вывода embed.Config.LogOutput переименован в embed.Config.LogOutputs
, а тип embed.Config.LogOutput изменён с string на []string
.
В v3.5 capnslog объявляется устаревшим
В v3.5 флаг etcd --log-package-levels для capnslog будет объявлен устаревшим; по умолчанию будет использоваться etcd --logger=zap --log-outputs=stderr. В v3.5 конечная точка [CLIENT-URL]/config/local/log будет объявлена устаревшей.
Объявление флага etcd --debug устаревшим (теперь --log-level=debug)
В v3.4 флаг etcd --debug
объявлен устаревшим. Вместо него используйте etcd --log-level=debug.
Устаревшее поле pkg/transport.TLSInfo.CAFile
Поле pkg/transport.TLSInfo.CAFile объявлено устаревшим.
Изменение embed.Config.SnapCount на embed.Config.SnapshotCount
Для согласованности с именем флага etcd --snapshot-count поле embed.Config.SnapCount переименовано в embed.Config.SnapshotCount:
Изменение etcdserver.ServerConfig.SnapCount на etcdserver.ServerConfig.SnapshotCount
Для согласованности с именем флага etcd --snapshot-count поле etcdserver.ServerConfig.SnapCount переименовано в etcdserver.ServerConfig.SnapshotCount:
Изменение сигнатур функций в пакете wal
Сигнатуры функций wal изменены для поддержки структурированного средства ведения журнала.
Изменение типа IntervalTree в пакете pkg/adt
Теперь pkg/adt.IntervalTree определён как interface.
Устаревший embed.Config.SetupLogging
embed.Config.SetupLogging удалён для предотвращения неверной конфигурации журналирования; теперь она настраивается автоматически.
Изменённые конечные точки HTTP шлюза gRPC (/v3beta заменена на /v3)
До
После
Запросы к конечным точкам /v3beta перенаправляются на /v3, а /v3beta будет удалена в выпуске 3.5.
Устаревшие теги образов контейнеров
Теги образов latest и дополнительной версии объявлены устаревшими:
Контрольные списки обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.4 работающий кластер должен иметь версию 3.3 или более позднюю. Если версия старше 3.3, перед переходом на 3.4 обновитесь до 3.3 .
Кроме того, для плавного скользящего обновления работающий кластер должен быть исправен. Перед продолжением проверьте его работоспособность командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточном окружении, прежде чем развёртывать обновление в рабочем окружении.
До начала загрузите резервную копию снимка
. Если при обновлении возникнет проблема, эту копию можно использовать для понижения версии
до существующей версии etcd. Обратите внимание: команда snapshot сохраняет только данные v3. О данных v2 см. раздел резервное копирование хранилища v2
.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.4. Участники etcd согласуют между собой общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Примечание: это ограничение не относится к кластеру, содержащему только данные v3 и не содержащему данные v2.
Если кластер обслуживает набор данных v2 объёмом более 50MB, каждому только что обновлённому участнику может потребоваться до двух минут, чтобы догнать существующий кластер. Для оценки общего объёма данных проверьте размер недавнего снимка. Иными словами, безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем общем объёме данных, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы столь крупных кластеров etcd могут перед обновлением обратиться к команде etcd за рекомендациями по процедуре.
Понижение версии
После обновления всех участников до v3.4 кластер также переходит на v3.4, и понижение версии из этого завершённого состояния невозможно. Однако пока хотя бы один участник остаётся на v3.3, кластер и его операции имеют версию “v3.3”, а из смешанного состояния можно вернуться к использованию двоичного файла etcd v3.3 на всех участниках.
Загрузите резервную копию снимка , чтобы сохранить возможность понижения версии кластера даже после полного обновления.
Процедура обновления
В этом примере показано обновление работающего на локальной машине кластера etcd v3.3 из 3 участников.
Шаг 1: проверка требований к обновлению
Кластер исправен и использует v3.3.x?
Шаг 2: загрузка резервной копии снимка с лидера
Загрузите резервную копию снимка , чтобы обеспечить путь понижения версии при возникновении проблем.
Лидер etcd гарантированно содержит последние данные приложения, поэтому снимок следует получать с лидера:
Шаг 3: остановка одного существующего сервера etcd
При остановке каждого процесса etcd другие участники кластера записывают в журнал ожидаемые ошибки. Это нормально, поскольку соединение с участником кластера (временно) разорвано:
Шаг 4: перезапуск сервера etcd с той же конфигурацией
Перезапустите сервер etcd с прежней конфигурацией, но с новым двоичным файлом etcd.
Новый etcd v3.4 опубликует свои сведения в кластере. На этом этапе кластер всё ещё работает по протоколу v3.3 — наименьшей общей версии.
{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.3"}
{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.3"}
{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}
Убедитесь, что сначала каждый участник, а затем весь кластер становятся исправными с новым двоичным файлом etcd v3.4:
До обновления всего кластера необновлённые участники будут записывать в журнал подобные предупреждения.
Это ожидаемо и прекратится после обновления всех участников кластера etcd до v3.4:
Шаг 5: повторение шага 3 и шага 4 для остальных участников
После обновления всех участников кластер сообщит об успешном переходе на 3.4:
Участник 1:
{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.4"}
Участник 2:
{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.3","from":"3.4"}{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
Участник 3:
{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.3","from":"3.4"}{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
5 - Обновление etcd с v3.6 до v3.7
В общем случае переход с etcd v3.6 на v3.7 можно выполнить как скользящее обновление без простоя:
- поочерёдно останавливать процессы etcd v3.6 и заменять их процессами etcd v3.7
- после запуска всех процессов v3.7 кластеру становятся доступны новые возможности v3.7
До начала обновления прочитайте оставшуюся часть руководства и подготовьтесь.
Контрольные списки обновления
Обновление 3.6
Перед обновлением до 3.7 убедитесь, что все участники 3.6 обновлены до 3.6.11 или более поздней версии. Предыдущие корректирующие выпуски 3.6 могут быть несовместимы со скользящим обновлением до 3.7.
Хранилище V2
Хранилище v2 полностью удалено в v3.7. HTTP API v2 (--enable-v2), эмуляция v2 поверх v3 (--experimental-enable-v2v3), служба обнаружения v2, пакет client/v2 и загрузка файлов снимков v2 больше не существуют. Ссылки на нарушающие совместимость изменения приведены в CHANGELOG-3.7
.
При обновлении кластера 3.6 эти флаги уже отсутствуют, и никаких действий не требуется. Если переход выполняется со старого выпуска с пользовательскими данными v2, до обновления следуйте руководству по миграции v2 .
Рефакторинг Go
v3.7 содержит значительный внутренний рефакторинг, который не влияет на обычное обновление, но его следует учитывать при обновлении пользовательских интеграций:
- Переход с
gogo/protobufна стандартныйgoogle.golang.org/protobuf(отслеживается в #14533 ). - Переход с устаревших библиотек журналирования и тегов
go-grpc-middlewarev1 на перехватчики v2 (#20420 ). - Перехватчики gRPC OpenTelemetry обновлены до
otelgrpcv0.61.0: устаревшиеUnaryServerInterceptorиStreamServerInterceptorзаменены наNewServerHandler(#20017 ).
Если etcd встраивается как библиотека, приложение собирается с API clientv3 или зависит от внутренних пакетов, перед обновлением изучите CHANGELOG
.
Удалённые флаги
В v3.7 удалены все устаревшие флаги --experimental-* (#19959
). В v3.6 каждый из них был заменён либо одноимённым неэкспериментальным флагом, либо записью --feature-gates. Если какие-либо из этих флагов всё ещё заданы, замените их эквивалентами v3.6 до скользящего обновления до v3.7, иначе процесс v3.7 не запустится.
Соответствие каждого удалённого флага его неэкспериментальному эквиваленту или записи --feature-gates приведено в руководстве по обновлению с v3.5 до v3.6
.
Добавленные флаги
Нет.
Флаги с новыми значениями по умолчанию
Нет.
Контрольные списки обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до v3.7 работающий кластер должен иметь версию v3.6.11 или более позднюю. Если он использует более старую дополнительную версию, сначала обновитесь до v3.6 ; etcd поддерживает обновление только на одну дополнительную версию за раз.
Кроме того, для плавного скользящего обновления работающий кластер должен быть исправен. Перед продолжением проверьте его работоспособность командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте службы, зависящие от etcd, в промежуточном окружении, прежде чем развёртывать обновление в рабочем окружении.
До начала загрузите резервную копию снимка . Если при обновлении возникнет проблема, эту копию можно использовать для отката к существующей версии etcd.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до v3.7. Участники etcd согласуют между собой общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Откат
Перед обновлением кластера etcd создайте и загрузите резервную копию снимка . При необходимости этот снимок можно использовать для восстановления состояния кластера до обновления. Если во время обновления возникнут проблемы, пользователям следует сначала определить и устранить их первопричину. Пока кластер остаётся в состоянии смешанных версий и хотя бы один участник работает на v3.6, можно либо заменить двоичный файл или образ старой версией v3.6, либо непосредственно восстановить кластер из снимка. В таком смешанном состоянии кластер продолжает работать как кластер v3.6, что позволяет откатиться без формальной процедуры понижения версии.
Однако после обновления всех участников до v3.7 кластер считается полностью обновлённым, и откат заменой двоичных файлов больше невозможен. В этом случае остаётся только восстановиться из снимка, сделанного перед обновлением, либо при неудачном обновлении следовать официальному руководству по понижению версии .
Процедура обновления
В этом примере показано обновление работающего на локальной машине кластера etcd v3.6 из 3 участников. Приведённый ниже вывод получен при реальном запуске etcd v3.6.12 и etcd v3.7.0-rc.0 на одном узле с тремя портами обратной петли.
Шаг 1: проверка требований к обновлению
Кластер исправен и использует v3.6.11 или более позднюю версию?
Шаг 2: загрузка резервной копии снимка с лидера
Загрузите резервную копию снимка , чтобы обеспечить путь понижения версии в случае возникновения проблем.
Лидер etcd гарантированно содержит последние данные приложения, поэтому снимок следует получать с лидера:
Шаг 3: остановка одного существующего сервера etcd
При остановке каждого процесса etcd другие участники кластера записывают в журнал ожидаемые ошибки. Это нормально, поскольку соединение с участником кластера (временно) разорвано. Перед завершением лидер передаст лидерство:
Шаг 4: перезапуск сервера etcd с той же конфигурацией
Перезапустите сервер etcd с прежней конфигурацией, но с новым двоичным файлом etcd.
Новый etcd v3.7 опубликует свои сведения в кластере. На этом этапе кластер всё ещё работает по протоколу v3.6 — наименьшей общей версии.
{"level":"info","ts":"2026-06-02T07:01:58.920780+0300","caller":"membership/cluster.go:296","msg":"set cluster version from store","cluster-version":"3.6"}
{"level":"info","ts":"2026-06-02T07:01:58.979186+0300","caller":"etcdserver/server.go:1828","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","cluster-id":"7dee9ba76d59ed53","publish-timeout":"7s"}
Убедитесь, что сначала каждый участник, а затем весь кластер становятся исправными с новым двоичным файлом etcd v3.7:
До обновления всего кластера необновлённые и уже обновлённый участники будут записывать сообщения о состоянии смешанных версий. Это ожидаемо и прекратится после обновления всех участников кластера etcd до v3.7.
Шаг 5: повторение шага 3 и шага 4 для остальных участников
После обновления всех участников кластер сообщит об успешном переходе на v3.7:
{"level":"info","ts":"2026-06-02T07:02:36.054783+0300","caller":"etcdserver/server.go:2311","msg":"updating cluster version using v3 API","from":"3.6","to":"3.7"}
{"level":"info","ts":"2026-06-02T07:02:36.059345+0300","caller":"membership/cluster.go:593","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.6","to":"3.7"}
{"level":"info","ts":"2026-06-02T07:02:36.059409+0300","caller":"etcdserver/server.go:2326","msg":"cluster version is updated","cluster-version":"3.7"}
6 - Обновление etcd с 3.2 до 3.3
В общем случае переход с etcd 3.2 на 3.3 можно выполнить как скользящее обновление без простоя:
- поочерёдно останавливать процессы etcd v3.2 и заменять их процессами etcd v3.3
- после запуска всех процессов v3.3 кластеру становятся доступны новые возможности v3.3
До начала обновления прочитайте оставшуюся часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается, если etcd восстанавливается из существующих снимков, но файл v3 ETCD_DATA_DIR/member/snap/db отсутствует. Это происходит, когда сервер был перенесён с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например если файл db перемещён. etcd требует, чтобы после миграции на v3 работа продолжалась только при наличии данных v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.
Если включена аутентификация и используются аренды с малым ttl, высока вероятность столкнуться с проблемой
, приводящей к несогласованности данных. Настоятельно рекомендуется сначала обновиться до 3.2.31+ для её устранения, а затем до 3.3. Кроме того, если во время обновления пользователь без разрешения отправит запрос LeaseRevoke узлу 3.3, данные всё ещё могут быть повреждены. Перед обновлением лучше убедиться, что в окружении нет таких аномальных вызовов; подробнее см. #11691
.
Основные нарушающие совместимость изменения в 3.3.
Изменение типа значения флага etcd --auto-compaction-retention на string
Флаг --auto-compaction-retention изменён так, чтобы принимать строковые значения
с более высокой точностью
. Поскольку теперь --auto-compaction-retention принимает строки, тип поля auto-compaction-retention в файле конфигурации YAML etcd необходимо изменить на string. Ранее --config-file etcd.config.yaml мог содержать auto-compaction-retention: 24, теперь требуется auto-compaction-retention: "24" или auto-compaction-retention: "24h". При конфигурации --auto-compaction-mode periodic --auto-compaction-retention "24h" значение длительности флага --auto-compaction-retention должно быть допустимо для функции Go time.ParseDuration
.
Изменение etcdserver.EtcdServer.ServerConfig на *etcdserver.EtcdServer.ServerConfig
В etcdserver.EtcdServer тип поля участника изменён с *etcdserver.ServerConfig на etcdserver.ServerConfig. Кроме того, etcdserver.NewServer теперь принимает etcdserver.ServerConfig вместо *etcdserver.ServerConfig.
До и после (например, k8s.io/kubernetes/test/e2e_node/services/etcd.go )
Добавление структуры embed.Config.LogOutput
Обратите внимание: в v3.4 поле переименовано в embed.Config.LogOutputs с типом []string. Подробнее см. руководство по обновлению до v3.4
.
В embed.Config добавлено поле LogOutput:
Ранее предупреждения сервера gRPC записывались в журнал etcdserver.
Начиная с v3.3 журналы сервера gRPC по умолчанию отключены.
Обратите внимание: метод embed.Config.SetupLogging объявлен устаревшим в v3.4. Подробнее см. руководство по обновлению до v3.4
.
Чтобы включить журналы сервера gRPC, задайте полю embed.Config.Debug значение true.
Изменение ответа конечной точки /health
Ранее [endpoint]:[client-port]/health возвращала вручную сериализованное значение JSON. В 3.3 определена структура etcdhttp.Health
.
Обратите внимание: в v3.3.0-rc.0, v3.3.0-rc.1 и v3.3.0-rc.2 структура etcdhttp.Health содержит поля "health" и "errors" логического типа. Для обратной совместимости тип поля "health" возвращён к string, а поле "errors" удалено. Дополнительные сведения о работоспособности будут предоставляться отдельными API.
Изменение конечных точек HTTP шлюза gRPC (/v3alpha заменена на /v3beta)
До
После
Запросы к конечным точкам /v3alpha перенаправляются на /v3beta, а /v3alpha будет удалена в выпуске 3.4.
Изменение ограничений максимального размера запроса
В 3.3 можно настраивать ограничения размера запросов как на стороне сервера, так и на стороне клиента. В предыдущих версиях (v3.2.10, v3.2.11) размер клиентского ответа был ограничен 4 MiB.
Серверное ограничение запросов настраивается флагом --max-request-bytes:
Либо полем embed.Config.MaxRequestBytes:
Если значение не указано, серверное ограничение по умолчанию равно 1.5 MiB.
Клиентские ограничения запросов необходимо настраивать с учётом серверных.
Если значения не указаны, клиентское ограничение отправки по умолчанию равно 2 MiB (1.5 MiB плюс служебные байты gRPC), а ограничение получения — math.MaxInt32. Подробнее см. документацию clientv3
.
Изменение сигнатур функций низкоуровневой оболочки клиента gRPC
В 3.3 изменены сигнатуры функций оболочки клиента gRPC clientv3. Изменение необходимо для поддержки пользовательского grpc.CallOption для ограничений размера сообщений
.
До и после
Изменение типа ошибки API Snapshot в clientv3
Ранее API Snapshot clientv3 возвращал необработанную ошибку типа [grpc/*status.statusError]. В v3.3 такие ошибки преобразуются в соответствующие общедоступные типы для согласованности с другими API.
До
После
Изменение вывода команды etcdctl lease timetolive
Ранее команда lease timetolive LEASE_ID для истёкшей аренды выводила -1s как оставшееся время. В 3.3 сообщения стали понятнее.
До
После
Изменение импортов golang.org/x/net/context
В clientv3 пакет golang.org/x/net/context объявлен устаревшим. Если проект включает golang.org/x/net/context в другой код, например сгенерированный код Protocol Buffer etcd, и импортирует github.com/coreos/etcd/clientv3, для компиляции требуется Go 1.9+.
До
После
Изменение зависимости gRPC
Теперь 3.3 требует grpc/grpc-go
v1.7.5.
Устаревший grpclog.Logger
grpclog.Logger объявлен устаревшим в пользу grpclog.LoggerV2
. Теперь clientv3.Logger — это grpclog.LoggerV2.
До
После
Устаревший grpc.ErrClientConnTimeout
Ранее при истечении тайм-аута клиентского подключения возвращалась ошибка grpc.ErrClientConnTimeout. Вместо неё 3.3 возвращает context.DeadlineExceeded (см. #8504
).
До
После
Изменение официального реестра контейнеров
Теперь etcd использует gcr.io/etcd-development/etcd
как основной реестр контейнеров, а quay.io/coreos/etcd
— как дополнительный.
До
После
Обновления до >= v3.3.14
В v3.3.14 пришлось включить некоторые возможности 3.4, стараясь свести к минимуму различия реализаций клиентского балансировщика. Выпуск исправляет проблему “kube-apiserver 1.13.x refuses to work when first etcd-server is not available” (kubernetes#72102) .
grpc.ErrClientConnClosing объявлена устаревшей в gRPC >= 1.10
.
Новый клиентский балансировщик
использует асинхронный разрешитель для передачи конечных точек функции подключения gRPC. Поэтому v3.3.14
или более поздней версии требуется параметр подключения grpc.WithBlock, чтобы дождаться установления нижележащего соединения.
Полный список изменений приведён в CHANGELOG .
Контрольные списки обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.3 работающий кластер должен иметь версию 3.2 или более позднюю. Если версия старше 3.2, перед переходом на 3.3 обновитесь до 3.2 .
Кроме того, для плавного скользящего обновления работающий кластер должен быть исправен. Перед продолжением проверьте его работоспособность командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточном окружении, прежде чем развёртывать обновление в рабочем окружении.
До начала создайте резервную копию данных etcd
. Если при обновлении возникнет проблема, эту копию можно использовать для понижения версии
до существующей версии etcd. Обратите внимание: команда snapshot сохраняет только данные v3. О данных v2 см. раздел резервное копирование хранилища v2
.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.3. Участники etcd согласуют между собой общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Примечание: это ограничение не относится к кластеру, содержащему только данные v3 и не содержащему данные v2.
Если кластер обслуживает набор данных v2 объёмом более 50MB, каждому только что обновлённому участнику может потребоваться до двух минут, чтобы догнать существующий кластер. Для оценки общего объёма данных проверьте размер недавнего снимка. Иными словами, безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем общем объёме данных, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы столь крупных кластеров etcd могут перед обновлением обратиться к команде etcd за рекомендациями по процедуре.
Понижение версии
После обновления всех участников до v3.3 кластер также переходит на v3.3, и понижение версии из этого завершённого состояния невозможно. Однако пока хотя бы один участник остаётся на v3.2, кластер и его операции имеют версию “v3.2”, а из смешанного состояния можно вернуться к использованию двоичного файла etcd v3.2 на всех участниках.
Создайте резервную копию каталога данных всех участников etcd, чтобы сохранить возможность понижения версии кластера даже после полного обновления.
Процедура обновления
В этом примере показано обновление работающего на локальной машине кластера etcd v3.2 из 3 участников.
1. Проверка требований к обновлению
Кластер исправен и использует v3.2.x?
2. Остановка существующего процесса etcd
При остановке каждого процесса etcd другие участники кластера записывают в журнал ожидаемые ошибки. Это нормально, поскольку соединение с участником кластера (временно) разорвано:
На этом этапе рекомендуется создать резервную копию данных etcd , чтобы обеспечить путь понижения версии при возникновении проблем:
3. Установка двоичного файла etcd v3.3 и запуск нового процесса etcd
Новый etcd v3.3 опубликует свои сведения в кластере:
Убедитесь, что сначала каждый участник, а затем весь кластер становятся исправными с новым двоичным файлом etcd v3.3:
До обновления всего кластера обновлённые участники будут записывать в журнал подобные предупреждения. Это ожидаемо и прекратится после обновления всех участников кластера etcd до v3.3:
4. Повторение шагов 2–3 для остальных участников
5. Завершение
После обновления всех участников кластер сообщит об успешном переходе на 3.3:
7 - Обновление etcd от 3.1 до 3.2
В общем случае, обновление от etcd 3.1 до 3.2 может быть обновлением с нулевым временем простоя:
- по одному, останавливайте процессы etcd v3.1 и заменяйте их процессами etcd v3.2
- после запуска всех процессов v3.2, новые функции в v3.2 становятся доступны для кластера
Перед обновлением внимательно прочитайте оставшуюся часть этого руководства для подготовки.
Обновление списков проверки
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается при восстановлении из снимка без файла v3 ETCD_DATA_DIR/member/snap/db. Это происходит после миграции с v2 без прежних данных v3 и предотвращает случайную потерю v3, например при перемещении db. После миграции на v3 etcd требует данные v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.
Изменения, требующие пересборки, в 3.2.
Изменено стандартное значение snapshot-count
Большее значение --snapshot-count удерживает до снимка больше записей Raft
в памяти, вызывая периодически повышенное потребление памяти
.
Лидер дольше хранит последние записи, и медленный последователь получает больше
времени догнать его до снимка. --snapshot-count — компромисс между памятью и
доступностью медленных последователей.
Начиная с v3.2 значение --snapshot-count по умолчанию изменено с 10,000 на 100,000
.
Изменена зависимость gRPC (>=3.2.10)
Выпуск 3.2.10 или более поздний теперь требует grpc/grpc-go
v1.7.5 (<=3.2.9 требует v1.2.1).
Устаревшая grpclog.Logger
grpclog.Logger был устаревшим в пользу grpclog.LoggerV2
. clientv3.Logger теперь grpclog.LoggerV2.
Перед
После
Устаревшая grpc.ErrClientConnTimeout
Ранее, grpc.ErrClientConnTimeout ошибка возвращалась при таймаутах на подключении клиента. 3.2 теперь возвращает context.DeadlineExceeded (см. #8504
).
Перед
После
Изменены максимальные ограничения размера запроса (>=3.2.10)
Версии 3.2.10 и 3.2.11 позволяют настраивать ограничение размера запроса на сервере. >=3.2.12 позволяет задавать его и на сервере, и на клиенте. В предыдущих версиях (v3.2.10, v3.2.11) ответ клиенту был ограничен 4 MiB.
Серверные ограничения на запросы можно настроить с помощью флага --max-request-bytes:
Или настройте поле embed.Config.MaxRequestBytes:
Если значение не задано, серверное ограничение по умолчанию равно 1.5 MiB.
Клиентские ограничения на запросы должны быть настроены в соответствии с серверными ограничениями.
Если значения не заданы, клиентское ограничение отправки по умолчанию равно
2 MiB (1.5 MiB + накладные байты gRPC), а получения — math.MaxInt32.
Подробнее см. godoc clientv3
.
Изменены.raw оболочки клиентов gRPC
3.2.12 или более поздняя версия изменяет сигнатуры функций оболочки gRPC клиентского clientv3. Этот изменения были необходимы для поддержки пользовательских ограничений размера сообщений grpc.CallOption.
До и после
Изменена clientv3.Lease.TimeToLive API
Прежде, clientv3.Lease.TimeToLive API возвращал lease.ErrLeaseNotFound при несуществующем идентификаторе арены. 3.2 вместо этого возвращает TTL=-1 в ответе и не выдает ошибку (см. #7305
).
Перед
После
Перемещен clientv3.NewFromConfigFile в clientv3.yaml.NewConfig
clientv3.NewFromConfigFile перенесен в yaml.NewConfig.
Перед
После
Изменение в --listen-peer-urls и --listen-client-urls
3.2 теперь отвергает доменные имена для --listen-peer-urls и --listen-client-urls (3.1 только выводит предупреждения), так как доменное имя недопустимо для привязки к сетевому интерфейсу. Убедитесь, что эти URL правильно форматированы как scheme://IP:port.
См. issue #6336 для более подробной информации.
Проверки для обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.2 кластер должен быть версии 3.1 или выше. Если это раньше 3.1, рекомендуется обновить до 3.1 перед обновлением до 3.2.
Также, для обеспечения плавного обновления кластер должен быть здоровым. Проверьте состояние кластера с помощью команды etcdctl endpoint health перед продолжением.
Подготовка
Перед обновлением etcd всегда протестируйте сервисы, зависящие от etcd, в стендовой среде перед развертыванием обновления в производственную среду.
Перед началом сделайте резервную копию данных etcd
. Если что-то пойдет не так с обновлением, можно использовать эту резервную копию для понижения версии
обратно к существующей версии etcd. Пожалуйста, примечание: команда snapshot выполняет только резервное копирование v3 данных. Для v2 данных см. резервное копирование v2 хранилища данных
.
Смешанные версии
При обновлении кластер etcd поддерживает смешанные версии участников etcd и работает с протоколом самой низкой общей версии. Кластер считается обновленным только после того, как все его участники будут обновлены до версии 3.2. Внутри кластерные участники переговариваются между собой, чтобы определить общую версию кластера, которая контролирует отчетываемую версию и поддерживаемые функции.
Ограничения
Примечание: если кластер содержит только данные версии 3 и нет данных версии 2, то он не подлежит этому ограничению.
Если кластер обслуживает набор данных версии v2 размером более 50MB, каждый новый обновленный участник может потребовать до двух минут для того, чтобы синхронизироваться с существующим кластером. Проверьте размер последнего снимка, чтобы оценить общий размер данных. Иными словами, наиболее безопасно ждать 2 минут между обновлением каждого участника.
Для гораздо большего объема данных, превышающего 100MB, этот одноразовый процесс может занять еще больше времени. Администраторы очень больших кластеров etcd такого масштаба могут обратиться к команде etcd перед обновлением, и мы с удовольствием предоставим рекомендации по процедуре.
Понижение версии
Если все участники были обновлены до v3.2, кластер будет обновлен до v3.2, и понижение версии из этого завершенного состояния невозможно. Если хотя бы один участник остается v3.1, кластер и его операции остаются “v3.1”, и из этого смешанного состояния кластера возможно вернуться к использованию etcd-бинарного файла версии v3.1 на всех участниках.
Создайте резервную копию каталога данных всех участников, чтобы понижение версии оставалось возможным после полного обновления.
Процедура обновления
Этот пример показывает, как обновить кластер etcd, работающий локально, состоящий из участника 3-члена v3.1.
1. Проверьте требования к обновлению
Я здоров и работает ли кластер v3.1.x?
2. Остановите существующий процесс etcd
Когда процесс etcd останавливается, ожидаемые ошибки будут записаны другими участниками кластера. Это нормально, так как соединение участника было (временно) прервано:
Это хорошая идея на данном этапе создать резервную копию данных etcd , чтобы обеспечить возможность понижения версии в случае возникновения любых проблем:
3. Замените встраиваемую версию etcd v3.2 и запустите новый процесс etcd
The новое v3.2 etcd будет публиковать свои данные в кластер:
Убедитесь, что с новым двоичным файлом etcd v3.2 каждый участник, а затем весь кластер становятся исправными:
Обновленные участники будут регистрировать предупреждения вида следующий до тех пор, пока весь кластер не будет обновлен. Это ожидаемо и прекратится после того, как все участники кластера etcd будут обновлены до v3.2:
4. Повторите шаг 2 до шага 3 для всех других участников
5. Завершить
Когда все участники будут обновлены, кластер будет сообщать о успешном переходе к 3.2:
8 - Обновление etcd с 3.0 до 3.1
В общем случае обновление etcd с 3.0 до 3.1 можно выполнить поэтапно без простоя:
- по очереди останавливать процессы etcd v3.0 и заменять их процессами etcd v3.1;
- после запуска всех процессов v3.1 кластеру станут доступны новые возможности v3.1.
Перед началом обновления прочитайте остальную часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается при восстановлении из существующих снимков, если отсутствует файл v3 ETCD_DATA_DIR/member/snap/db. Это происходит, когда сервер мигрировал с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например при перемещении файла db. После миграции на v3 etcd может работать только с данными v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данных v3.
Мониторинг
Следующие метрики v3.0.x устарели в пользу go-grpc-prometheus :
etcd_grpc_requests_totaletcd_grpc_requests_failed_totaletcd_grpc_active_streamsetcd_grpc_unary_requests_duration_seconds
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.1 работающий кластер должен иметь версию 3.0 или новее. Версию ниже 3.0 сначала обновите до 3.0 , а затем до 3.1.
Для плавного поэтапного обновления работающий кластер также должен быть исправен.
Перед продолжением проверьте его командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточной среде до развёртывания обновления в производственной.
До начала создайте резервную копию данных etcd
.
Если обновление завершится неудачно, копия позволит вернуться к предыдущей
версии
. Обратите внимание: команда snapshot копирует только
данные v3. Для данных v2 см. резервное копирование хранилища v2
.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.1. Участники etcd согласуют общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Примечание: ограничение не относится к кластеру, содержащему только данные v3 без данных v2.
Если кластер обслуживает набор данных v2 больше 50MB, новому обновлённому участнику может потребоваться до двух минут, чтобы догнать кластер. Оцените объём по размеру последнего снимка. Безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем объёме, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы настолько крупных кластеров etcd могут до обновления обратиться к команде etcd за рекомендациями.
Понижение версии
После обновления всех участников до v3.1 кластер становится кластером v3.1, и понизить версию из этого завершённого состояния невозможно. Пока хотя бы один участник остаётся на v3.0, кластер и его операции сохраняют версию “v3.0”, и из такого смешанного состояния можно вернуть двоичный файл etcd v3.0 на всех участниках.
Создайте резервную копию каталога данных всех участников etcd, чтобы понижение версии оставалось возможным даже после полного обновления кластера.
Процедура обновления
В примере показано обновление локального кластера etcd v3.0 из 3 участников.
1. Проверьте требования к обновлению
Кластер исправен и работает под управлением v3.0.x?
2. Остановите существующий процесс etcd
При остановке каждого процесса etcd другие участники записывают ожидаемые ошибки. Это нормально, поскольку соединение с участником временно разорвано:
На этом этапе рекомендуется создать резервную копию данных etcd , чтобы при проблемах сохранить путь понижения версии:
3. Установите двоичный файл etcd v3.1 и запустите новый процесс etcd
Новый etcd v3.1 опубликует свои сведения в кластере:
Убедитесь, что с новым двоичным файлом etcd v3.1 каждый участник, а затем весь кластер становятся исправными:
До обновления всего кластера обновлённые участники будут записывать следующие предупреждения. Это ожидаемо и прекратится после обновления всех участников до v3.1:
4. Повторите шаги 2–3 для остальных участников
5. Завершите обновление
После обновления всех участников кластер сообщит об успешном переходе на 3.1:
9 - Обновление 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. Завершите обновление до любых изменений состава кластера.