Представляємо etcd v3.7.0

Ця стаття є дзеркалом оригінального анонсу

Сьогодні SIG etcd оголошує про випуск etcd v3.7.0 — останнього мінорного релізу популярного розподіленого сховища для даних ключ-значення, що є основним компонентом Kubernetes. v3.7 включає довгоочікувану функцію RangeStream, кілька інших покращень продуктивності, видаляє останні залишки legacy v2store та завершує велику переробку protobuf.

Ви можете завантажити etcd v3.7.0 за посиланням:

Цей випуск також включає нові версії двох ключових залежностей etcd: bbolt v1.5.0 та raft v3.7.0.

Інструкції щодо встановлення etcd можна знайти в документації з встановлення. Повний список змін доступний у описі змін etcd v3.7.

Щира подяка всім учасникам, які зробили цей випуск можливим!

Основні функції

Найважливіші зміни у v3.7.0 включають:

  • RangeStream — потокова передача великих наборів результатів частинами замість буферизації всієї відповіді.
  • Запити діапазонів лише за ключами, швидші та надійніші leases, а також кілька інших покращень продуктивності.
  • etcd тепер завантажується повністю з v3store, що усуває давню залежність від застарілого сховища v2
  • Завершено переробку protobuf, в результаті чого застарілі бібліотеки protobuf замінено на ті, що повністю підтримуються.
  • etcd v3.7 постачається з bbolt v1.5.1 та raft v3.7.0.

Функції

RangeStream

У etcd v3.6 та попередніх версіях важко працювати з запитами, які повертають великі результати. База даних буферизувала весь результат перед надсиланням, що призводило до непередбачуваної затримки та використання памʼяті як на сервері, так і на клієнті. RPC RangeStream дозволяє застосункам-отримувачам приймати результати частинами, зменшуючи затримку та роблячи використання памʼяті для буферизації більш передбачуваним.

Інструкції щодо використання RangeStream у gRPC викликах та у etcdctl можна знайти в документації etcd. Користувачам варто спробувати це для власних застосунків.

У скоординованих релізах функція RangeStream стане доступною для користувачів майбутнього Kubernetes v1.37, з увімкненням функціональної можливості EtcdRangeStream. Це раннє та заплановане впровадження можливе завдяки злиттю розробки etcd та Kubernetes у 2023 році.

Покращення продуктивності

v3.7 пропонує кілька конкретних покращень продуктивності як для панелі управління Kubernetes, так і для інших випадків використання. Користувачі Kubernetes повинні побачити значне зниження загального використання CPU членами etcd порівняно з v3.6.

Оптимізація запитів діапазону лише за ключами

etcd v3.7.0 включає оптимізацію Range лише за ключами (#21791: keys-only Range optimization). Під час обробки запиту Range з параметром keys_only або команди etcdctl get --keys-only etcd зчитує дані виключно зі свого індексу в памʼяті. Він повертає ключі, що відповідають запиту, не завантажуючи всі серіалізовані значення з bbolt, як це робилося раніше. Єдиним винятком, коли завантаження з bbolt все ще потрібне, є випадки, коли запити Range з параметром keys_only необхідно сортувати за значенням (тобто коли для параметра SortTarget встановлено значення VALUE).

Це зменшує непотрібні зчитування з бекенду та використання памʼяті для робочих навантажень, яким потрібні лише імена ключів, роблячи великі запити лише за ключами більш ефективними.

Швидші, надійніші lease etcd

v3.7 покращує закінчення та поновлення lease:

Швидші операції find()

etcd 3.7 покращує продуктивність одночасних спостережень за ключами, роблячи операції find() швидшими (#19768: adt: split interval tree by right endpoint on matched left endpoints).

Інші функції

Переробка protobuf

v3.7 виконує міграцію та замінює кілька застарілих protobuf бібліотек на повністю підтримувані залежності. Це включає заміну github.com/golang/protobuf та github.com/gogo/protobuf на повністю підтримувану google.golang.org/protobuf (#14533: Protobuf: cleanup both golang/protobuf and gogo/protobuf), та міграцію grpc-logging до grpc-middleware v2 (#20420: Migrate grpc-logging to grpc-middleware v2).

Окрім покращення безпеки та підтримки, ця переробка, як було показано, зменшує використання CPU компонентами etcd.

Хоча ці зміни, як очікується, не матимуть прямого впливу на користувачів, які запускають etcd за допомогою офіційних бінарних файлів або контейнерних образів, вони можуть торкнутися користувачів, які використовують модулі etcd на Go, такі як клієнтський SDK або пакунки в api/ чи pkg/. Цим користувачам, можливо, доведеться оновити свій код або залежності через зміни в protobuf та пов’язані з ним API, введені в цьому випуску. Більш детальну інформацію можна знайти в записі про відстеження змін API.

Підтримка Unix сокетів

etcd тепер підтримує точки доступу через Unix сокет и (#19760: Add Support for Unix Socket endpoints), дозволяючи локальну комунікацію без TCP порту. Оскільки це обмежено кластерами з одним учасником, це переважно призначено для розробки, тестування та випадків використання на периферії.

Bootstrap з v3store

Однією з головних змін у etcd v3.7 є те, що сервер тепер завантажується повністю з v3 store (#20187 Bootstrap etcdserver from v3store), усуваючи залежність від legacy v2 store під час запуску.

Ця віха є результатом довгострокових зусиль, що охоплюють кілька релізів від v3.4 до v3.7. Вона вирішує давню технічну заборгованість, значно спрощує процес завантаження та закладає основу для майбутніх покращень etcd.

Для підтримки зворотної сумісності etcd v3.7 продовжує генерувати v2 снапшоти. Як результат, прапорець --snapshot-count також збережений у v3.7. Це остання залишкова залежність від legacy v2 store, і як генерація v2 снапшотів, так і прапор --snapshot-count будуть видалені у v3.8.

Тайм-аути etcdutl

Всі команди etcdutl тепер мають аргумент командного рядка --timeout (#20708: etcdutl: enable timeout functionality for all commands), тому офлайн-команди утиліти більше не блокуються назавжди при утримуванні блоку.

Встановлення токена автентифікації безпосередньо

Клієнт v3 тепер дозволяє користувачам встановлювати JWT безпосередньо, пропонуючи більше гнучкості в варіантах автентифікації (#16803: clientv3: allow setting JWT directly, #20747: clientv3: disable auth retry when token is set).

Отримання AuthStatus без автентифікації

Клієнти можуть перевіряти свій AuthStatus без попередньої спроби автентифікації, що дозволяє зменшити навантаження на застосунок (#20802: etcdserver: скасувати перевірку дозволів у API AuthStatus).

Нові метрики спостережень

v3.7 додає необовʼязкові метрики send-loop спостережень (#21030: Instrument watchstream send loop) для кращої видимості шляху спостережень:

  • etcd_debugging_server_watch_send_loop_watch_stream_duration_seconds
  • etcd_debugging_server_watch_send_loop_watch_stream_duration_per_event_seconds
  • etcd_debugging_server_watch_send_loop_control_stream_duration_seconds
  • etcd_debugging_server_watch_send_loop_progress_duration_seconds

Також є нова метрика etcd_server_request_duration_seconds (#21038: Add metric etcd_server_request_duration_seconds).

Очищення команд etcdctl

etcdctl команди були реорганізовані для ясності (#20162: etcdctl: organize etcdctl subcommand) та глобальні аргументи командного рядка тепер приховані для спрощення виводу довідки (#20493: etcdctl: hide global flags).

Оновлення

Цей випуск містить зміни, що можуть спричинити несумісність, зокрема пов’язані з вилученням застарілих компонентів версії v2. Користувачам слід ознайомитися з посібником з оновлення перед оновленням своїх вузлів. Як і у випадку з усіма випусками з незначними змінами, слід виконувати послідовне оновлення, оновлюючи по одному вузлу за раз, та перевіряти стан кластера між етапами.

Видалені експериментальні прапорці

Всі застарілі експериментальні прапорці були видалені (#19959: Cleanup the deprecated experimental flags). Функції в etcd тепер слідують життєвому циклу Kubernetes-style feature-gate (Alpha → Beta → GA), представленому у v3.6, замість старого префіксу --experimental. Якщо ваша конфігурація все ще залежить від аргументів командного рядка --experimental-*, виконайте міграцію для використання відповідних флагів функцій або стабільних аргументів командного рядка перед оновленням до etcd 3.7.

Пакунки legacy V2 API та очищення коду

Щоб усунути залежності від v2store, такі компоненти були видалені:

Ці зміни можуть створити певні проблеми для користувачів, особливо тих, хто ще не оновився до v3.6.11 або пізнішої версії. Користувачі повинні повідомляти про будь-які перешкоди, з якими зіткнулися, або про випадки, які потребують кращої документації з оновлення.

Створення клієнта без блокування

etcd більше не використовує застарілий параметр налаштування grpc.WithBlock (#21942: Make the etcd client creation non-blocking). Для збереження попередньої блокуючої поведінки, коли це потрібно, слідуйте порадам у документації grpc-go про антипатерни (https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md#especially-bad-using-deprecated-dialoptions).

Тільки multiarch контейнерні образи

Для користувачів, які залежать від офіційних контейнерних образів etcd, v3.7 буде розповсюджуватися лише як multiarch контейнери. Архітектно-позначені образи не будуть доступні, тому відкоригуйте розгортання відповідно.

Зміни API

Як і з кожним релізом etcd, є низка змін API. Вони розроблені для максимальної зворотної сумісності, але можуть вимагати коригувань від деяких користувачів. Повну інформацію див. на нашій сторінці документації API.

bbolt v1.5.1

etcd v3.7 залежить від, та включає, v1.5.1 рушія сховища bbolt. v1.5 включає кілька покращень функціональності та продуктивності, зокрема:

raft v3.7.0

etcd 3.7 залежить від механізму консенсусу raft версії 3.7.0 і містить його. Версія 3.7 містить низку вдосконалень, зокрема:

raft v3.7.0 також включає ті ж оновлення protobuf бібліотеки та рефакторингу, як і etcd.

Оновлення залежностей

Інші оновлення залежностей включають підвищення до golang.org/x/crypto v0.52.0 для вирішення CVE (#21903: [release-3.7] Bump golang.org/x/crypto to v0.52.0), оновлення OpenTelemetry contrib до v0.61.0 (#20017: Update otelgrpc to v0.61.0), та компіляцію з Go 1.26.4 (#21891: [release-3.7] Update Go to 1.26.4).

Учасники

etcd v3.7.0 є результатом роботи понад сотні учасників у спільноті. Дякуємо всім, хто писав код, рецензував PR, створював та сортував тікети, та допомагав тестувати альфа-, бета- та кандидатів для випуску.

Лідери

Лідерами SIG etcd для випуску v3.7 є ivanvc, serathius, ahrtr, fuweid, siyuanfoundation, та jberkus. Іван очолює нашу команду випуску.

Інші учасники

ah8ad3, ajaysundark, aladesawe, amosehiguese, ArkaSaha30, ashikjm, AwesomePatrol, dims, Elbehery, gangli113, henrybear327, Jille, jmhbnz, joshuazh-x, kishen-v, lavishpal, liggitt, marcelfranca, miancheng7, mmorel-35, MrDXY, mrueg, purpleidea, qsyqian, redwrasse, ronaldngounou, skitt, spzala, tcchawla, tjungblu, vivekpatani, wenjiaswe

Нові учасники

Особлива подяка учасникам, які зробили свій перший внесок у etcd у цьому циклі — включаючи Jeffrey Ying, чия робота стала рушійною силою реалізації функції RangeStream. Нові учасники можуть мати значний вплив на etcd; якщо ви хочете долучитися, див. посібник учасника.

1911860538, 4rivappa, aaronjzhang, abdurrehman107, ABin-Huang, adeptvin1, aditya7880900936, AHBICJ, akstron, alliasgher, aman4433, aojea, apullo777, AR21SM, arturmelanchyk, AshrafAhmed9, asttool, asutorufa, BBQing, beforetech, boqishan, caltechustc, carsontham, christophsj, chuanye-gao, cnuss, cuiweixie, dmvolod, Dogacel, dongjiang1989, EduardoVega, evertrain, eyupcanakman, gaganhr94, goingforstudying-ctrl, greenblade29, Himanshu-370, HossamSaberX, huajianxiaowanzi, hwdef, ishan-gupta2005, ishan16696, ivangsm, JasonLove-Coding, Jefftree, jihogh, jonathan-albrecht-ibm, joshjms, kairosci, kei01234kei, kjgorman, kovan, kstrifonoff, Kunalbehbud, letreturn, lorenz, m4l1c1ou5, madhav-murali, madvimer, majiayu000, marcus-hodgson-antithesis, mattsains, mcrute, mingl1, MohanadKh03, mstrYoda, NAM-MAN, neeraj542, nicknikolakakis, nihalmaddala, niuyueyang1996, notandruu, ntdkhiem, nwnt, olamilekan000, pigeio, pjsharath28, progmem, Qian-Cheng-nju, quocvibui, ravisastryk, robin-vidal, robinkb, rockswe, roman-khimov, rsafonseca, sahilpatel09, SalehBorhani, SebTardif, seshachalam-yv, shashwat010, shivamgcodes, shuan1026, silentred, sneaky-potato, socketpair, srri, subrajeet-maharana, sxllwx, tchap, tsujiri, tzfun, upamanyus, uzairhameed, varunu28, vihasmakwana, wendy-ha18, xiaoxiangirl, xigang, xUser5000, yagikota, yajianggroup, yedou37, Zanda256, zechariahkasina, zhijun42, zhoujiaweii

Надсилайте відгуки через:

Це дзеркало оригінальної статті.

Востаннє змінено July 15, 2026 at 12:45 AM PST: [uk] Ukrainian translation (all-in-one) (193b0d4ea4)