BumbleBee - zestaw narzędzi ułatwiający tworzenie i dystrybucję programów eBPF

Solo.io, firma tworząca produkty do uruchamiania systemów chmurowych, mikrousług, izolowanych kontenerów i obliczeń bezserwerowych, opublikowała BumbleBee, zestaw narzędzi open source mający na celu uproszczenie przygotowania, dystrybucji i uruchamiania programów eBPF, które działają na specjalnej maszynie wirtualnej wewnątrz jądro Linuksa i umożliwiają przetwarzanie operacji sieciowych, kontrolę dostępu i monitorowanie systemów. Kod napisany jest w Go i rozpowszechniany na licencji Apache 2.0.

BumbleBee umożliwia spakowanie programu eBPF jako obrazu kontenera w formacie OCI (Open Container Initiative), który można uruchomić na dowolnym systemie bez rekompilacji i użycia dodatkowych komponentów w przestrzeni użytkownika. Interakcję z kodem eBPF w rdzeniu, w tym przetwarzanie danych pochodzących z handlera eBPF przejmuje BumbleBee, który automatycznie eksportuje te dane w postaci metryk, histogramów czy logów, do których dostęp można uzyskać np. za pomocą narzędzie curl. Proponowane podejście pozwala programiście skupić się na pisaniu kodu eBPF i nie rozpraszać się organizowaniem interakcji z tym kodem z przestrzeni użytkownika, montażu i ładowania do jądra.

Do zarządzania programami eBPF oferowane jest narzędzie „bee” w stylu Dockera, za pomocą którego można natychmiast pobrać żądaną procedurę obsługi eBPF z zewnętrznego repozytorium i uruchomić ją w systemie lokalnym. Zestaw narzędzi umożliwia wygenerowanie frameworka kodu w języku C dla procedur obsługi eBPF wybranego tematu (obecnie obsługiwane są tylko procedury obsługi operacji sieciowych i plikowych, które przechwytują wywołania do stosu sieciowego i systemów plików). W oparciu o wygenerowany framework programista może szybko wdrożyć interesującą go funkcjonalność.

W przeciwieństwie do BCC (BPF Compiler Collection), BumbleBee nie przebudowuje całkowicie kodu obsługi dla każdej wersji jądra Linuksa (BCC korzysta z kompilacji w locie przy użyciu Clang przy każdym uruchomieniu programu eBPF). Aby rozwiązać problemy z przenośnością, opracowywane są narzędzia CO-RE i libbpf, które pozwalają na jednokrotne zbudowanie kodu i użycie specjalnego uniwersalnego modułu ładującego, który dostosowuje załadowany program do bieżącego jądra i formatu typu BTF. BumbleBee jest dodatkiem do libbpf i udostępnia dodatkowe typy do automatycznej interpretacji i wyświetlania danych znajdujących się w standardowych strukturach map eBPF RingBuffer i HashMap.

Aby zbudować ostateczny program eBPF i zapisać go jako obraz OCI, wystarczy uruchomić polecenie „bee build file_with_code nazwa:wersja”, a następnie uruchomić polecenie „bee run nazwa:wersja”. Domyślnie zdarzenia otrzymane od procedury obsługi będą wysyłane do okna terminala, ale w razie potrzeby można uzyskać dane za pomocą narzędzi curl lub wget do portu sieciowego powiązanego z procedurą obsługi. Programy obsługi mogą być dystrybuowane poprzez repozytoria kompatybilne z OCI, na przykład w celu uruchomienia zewnętrznego modułu obsługi z repozytorium ghcr.io (GitHub Container Registry), możesz uruchomić polecenie „bee run ghcr.io/solo-io/bumblebee/tcpconnect: $(wersja dla pszczół)”. Aby umieścić handler w repozytorium proponuje się polecenie „bee push”, a do powiązania wersji „bee tag”.

Źródło: opennet.ru

Dodaj komentarz