BumbleBee - інструментар для спрашчэння стварэння і распаўсюджвання eBPF-праграм

Кампанія Solo.io, якая развівае прадукты для забеспячэння працы хмарных сістэм, мікрасэрвісаў, ізаляваных кантэйнераў і бессерверных вылічэнняў, апублікавала адкрыты інструментар BumbleBee, накіраваны на спрашчэнне падрыхтоўкі, распаўсюджвання і запуску eBPF-праграм, якія выконваюцца ў спецыяльнай віртуальнай машыне ўнутры ядра Linux і якія дазваляюць апрацоўваць аперацыі, кантраляваць доступ і адсочваць працу сістэм. Код напісаны на мове Go і распаўсюджваецца пад ліцэнзіяй Apache 2.0.

BumbleBee дае магчымасць спакаваць eBPF-праграму ў выглядзе выявы кантэйнера ў фармаце OCI (Open Container Initiative), які можна запускаць на любых сістэмах без перакампілявання і выкарыстанні дадатковых кампанентаў у прасторы карыстача. Узаемадзеянне з eBPF-кодам у ядры, у тым ліку апрацоўку якія паступаюць з eBPF-апрацоўшчыка дадзеных, бярэ на сябе BumbleBee, які аўтаматычна экспартуе гэтыя дадзеныя ў выглядзе метрык, гістаграм або логаў, доступ да якіх можна атрымаць, напрыклад, пры дапамозе ўтыліты curl. Прапанаваны падыход дазваляе распрацоўніку засяродзіць увагу на напісанні кода eBPF і не адцягвацца на арганізацыю ўзаемадзеяння з гэтым кодам з прасторы карыстача, зборку і загрузку ў ядро.

Для кіравання eBPF-праграмамі прапануецца якая працуе ў стылі Docker ўтыліта "bee", пры дапамозе якой можна адразу загрузіць які цікавіць eBPF-апрацоўшчык з вонкавага рэпазітара і запусціць на лакальнай сістэме. Інструментарый дазваляе згенераваць каркас кода на мове Сі для eBPF-апрацоўшчыкаў абранай тэматыкі (цяпер падтрымліваюцца толькі апрацоўшчыкі сеткавых і файлавых аперацый, якія перахапляюць выклікі сеткавага стэка і файлавых сістэм). На аснове сфармаванага каркаса распрацоўшчык можа хутка рэалізаваць цікавую для яго функцыянальнасць.

У адрозненне ад BCC (BPF Compiler Collection) у BumbleBee не выконваецца поўная перазборка кода апрацоўшчыка для кожнай версіі ядра Linux (BCC выкарыстоўвае кампіляцыю на лета пры дапамозе Clang пры кожным запуску eBPF-праграмы). Для рашэння праблем з пераноснасцю развіваюцца інструментары CO-RE і libbpf, якія дазваляюць збіраць код толькі адзін раз і выкарыстоўваць адмысловы ўніверсальны загрузнік, які адаптуе загружаную праграму да бягучага ядра і тыпам BTF (BPF Type Format). BumbleBee з'яўляецца надбудовай над libbpf і дае дадатковыя тыпы для аўтаматычнай інтэрпрэтацыі і адлюстравання дадзеных, якія размяшчаюцца ў штатных для eBPF map-структурах RingBuffer і HashMap.

Для зборкі выніковай eBPF-праграмы і захаванні ў выглядзе OCI-выявы досыць выканаць каманду "bee build файл_з_кодам імя:версія", а для запуску каманду "bee run імя:версія". Па змаўчанні атрымоўваныя ад апрацоўшчыка падзеі будуць выводзіцца ў акно тэрмінала, але пры неабходнасці можна атрымаць дадзеныя звярнуўшыся ўтылітамі curl або wget да прывязанага да апрацоўшчыка сеткавага порта. Апрацоўшчыкі можна распаўсюджваць праз OCI-сумяшчальныя рэпазітары, напрыклад, для запуску знешняга апрацоўшчыка з рэпазітара ghcr.io (GitHub Container Registry) можна выканаць каманду «bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version) Для змяшчэння апрацоўшчыка ў рэпазітар прапануецца каманда "bee push", а для прывязкі версіі - "bee tag".

Крыніца: opennet.ru

Дадаць каментар