Повідомлення про випуск etcd v3.7.0

Зміст

Вступ

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

Ви можете завантажити etcd v3.7.0 тут:

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

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

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

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

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

Функції

RangeStream

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

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

У скоординованих випусках функція RangeStream стане доступною користувачам, які працюють із майбутнім v1.37 Kubernetes, після ввімкнення функціональної можливості 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).

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

Швидші та надійніші оренди etcd

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

Швидші операції 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 через офіційні бінарні файли або контейнерні образи, вони можуть вплинути на користувачів, які залежать від Go-модулів etcd, таких як клієнтський SDK або пакунки в api/ чи pkg/. Таким споживачам може знадобитися оновити свій код або залежності через зміни protobuf та повʼязані зміни в API, внесені в цьому випуску. Детальнішу інформацію можна знайти в тікеті відстеження змін в API.

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

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

Завантаження з v3store

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

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

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

Тайм-аути etcdutl

Усі команди etcdutl тепер мають аргумент командного рядка для тайм-ауту (#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: remove permission check on AuthStatus api).

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

v3.7 додає опційні метрики циклу надсилання спостережень (#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-стилі життєвого циклу функціональних можливостей (Alpha → Beta → GA), запровадженого у v3.6, замість старого префікса --experimental. Якщо ваша конфігурація досі покладається на аргументи командного рядка --experimental-*, мігруйте на відповідні функціональні можливості або стабільні аргументи командного рядка перед оновленням до etcd 3.7.

Очищення пакунків та коду API Legacy V2

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

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

Неблокуюче створення клієнта

etcd більше не враховує застарілу опцію діалу grpc.WithBlock (#21942: Make the etcd client creation non-blocking). Щоб зберегти попередню блокуючу поведінку, коли це потрібно, дотримуйтеся вказівок у документації з антипатернів grpc-go.

Лише багатоархітектурні контейнерні образи

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

Зміни в API

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

bbolt v1.5.1

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

  • Обмеження розміру файлу бази даних: користувачі можуть встановлювати обмеження розміру файлу, і bbolt їх дотримуватиметься. Коли база даних bolt перевищує ці обмеження, вона відмовлятиметься приймати записи, доки базу даних не буде ущільнено або обмеження не буде змінено.
  • Вимкнення статистики для продуктивності: користувачі можуть встановити NoStatistics, щоб обмежити накладні витрати від блокувань, які бере переглядач статистики бази даних.
  • Ефективніша обробка hashmap: швидше злиття діапазонів із меншими накладними витратами.

raft v3.7.0

etcd 3.7 залежить від v3.7.0 рушія консенсусу raft та включає його. v3.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, joshjms, 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, 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

Відгуки можна надсилати через:

Востаннє змінено September 13, 2026: Add Ukrainian documentation and tutorials for etcd v3.5..v3.8 (45739f0)