Ця стаття є дзеркалом оригінального анонсу
Сьогодні 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 включають:
У 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).
Це зменшує непотрібні зчитування з бекенду та використання памʼяті для робочих навантажень, яким потрібні лише імена ключів, роблячи великі запити лише за ключами більш ефективними.
v3.7 покращує закінчення та поновлення lease:
etcd 3.7 покращує продуктивність одночасних спостережень за ключами, роблячи операції find() швидшими (#19768: adt: split interval tree by right endpoint on matched left endpoints).
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.
etcd тепер підтримує точки доступу через Unix сокет и (#19760: Add Support for Unix Socket endpoints), дозволяючи локальну комунікацію без TCP порту. Оскільки це обмежено кластерами з одним учасником, це переважно призначено для розробки, тестування та випадків використання на периферії.
Однією з головних змін у 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 тепер мають аргумент командного рядка --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 без попередньої спроби автентифікації, що дозволяє зменшити навантаження на застосунок (#20802: etcdserver: скасувати перевірку дозволів у API AuthStatus).
v3.7 додає необовʼязкові метрики send-loop спостережень (#21030: Instrument watchstream send loop) для кращої видимості шляху спостережень:
etcd_debugging_server_watch_send_loop_watch_stream_duration_secondsetcd_debugging_server_watch_send_loop_watch_stream_duration_per_event_secondsetcd_debugging_server_watch_send_loop_control_stream_duration_secondsetcd_debugging_server_watch_send_loop_progress_duration_secondsТакож є нова метрика etcd_server_request_duration_seconds (#21038: Add metric etcd_server_request_duration_seconds).
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.
Щоб усунути залежності від 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).
Для користувачів, які залежать від офіційних контейнерних образів etcd, v3.7 буде розповсюджуватися лише як multiarch контейнери. Архітектно-позначені образи не будуть доступні, тому відкоригуйте розгортання відповідно.
Як і з кожним релізом etcd, є низка змін API. Вони розроблені для максимальної зворотної сумісності, але можуть вимагати коригувань від деяких користувачів. Повну інформацію див. на нашій сторінці документації API.
etcd v3.7 залежить від, та включає, v1.5.1 рушія сховища bbolt. v1.5 включає кілька покращень функціональності та продуктивності, зокрема:
NoStatistics, щоб обмежити накладні витрати від блокувань, взятих засобом перегляду статистики бази даних.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
Надсилайте відгуки через:
Це дзеркало оригінальної статті.