Software Development

Fabric8, czyli mikro-usługi bardziej przyjazne

Luty 7, 2017 0
Podziel się:

Wszyscy zapewne zdajemy sobie sprawę z popularności jaką zdobywa w ostatnim czasie architektura systemów oparta o mikrousługi. Podejście to obiecuje nam przejrzystość architektury, łatwe w utrzymaniu, spójne funkcjonalnie fragmenty systemu, skalowalność itd. Ma jednak też swoje bolączki…

Wdrożenie systemu opartego o mikrousługi jest znacząco bardziej skomplikowane – przecież w miejsce monolitycznej aplikacji spakowanej np. do postaci jednego pliku WAR dostajemy kilka/kilkanaście artefaktów.

Trochę teorii…

Jak zapanować nad tym chaosem i zorganizować pracę? Jak przygotować środowiska, które pozwolą na uzyskanie obiecywanej skalowalności i zapewnią, że na produkcji system zachowa się tak jak na testach? A co z błędami „dziwne, u mnie działa..”?

Rozwiązaniem powszechnie łączonym z mikrousługami jest konteneryzacja aplikacji, czyli prosto ujmując zamknięcie takiej usługi wraz z całym środowiskiem jej uruchomienia w niezmiennym obrazie i uruchamianie kolejnych instancji na podstawie tego obrazu (np. przy pomocy Docker’a opisanego również na naszym blogu https://sii.pl/blog/docker-dla-programistow-co-to-jest/). Pozwala to wyeliminować błędy wynikające z konfiguracji środowiska.

Na tym etapie zastanawiacie się pewnie, gdzie w tym wszystkim powiązanie z tematem wpisu, czyli tajemniczym (jeśli jeszcze nie sprawdziliście co to) fabric8

Otóż fabric8 (wymawiane fabricate) to nic innego, jak platforma do developmentu systemów w architekturze mikrousług. A w zasadzie nie tylko developmentu, ale do obsługi całego procesu od momentu znalezienia się kodu w repozytorium, czyli zbudowania obrazu z aplikacją, uruchomienia testów, wdrożenia na środowisko testowe i dalej produkcyjne.

Trochę historii…

Jego początki leżą w Apache ServiceMix, które zostało zaadaptowane przez FuseSource jako projekt Fuse, a potem w 2012 roku Fuse trafił pod skrzydła RedHata i przybrał nazwę Jboss Fuse. Projekt otrzymał wszystko, czego można wymagać od rozwiązań w standardzie enterprise – oficjalny support dużego dostawcy, stabilizację kodu itd.

Na bazie Jboss Fuse powstał właśnie Fabric8, który do tej całej potęgi dokłada jeszcze atuty takie jak wygodny webowy interfejs czy wsparcie dla kontenerów Docker’a. Do tego umożliwia prostą i szybką instalację lokalną (wystarczy pobrać binaria, uruchomić i po chwili cieszyć się platformą).

No i jest darmowe 🙂

Więcej o historii Fabric8 możecie przeczytać na blogu jednego z liderów projektu Michael’a Rice’a (http://michaelrice.com/2014/09/history-of-fabric8-fuse-servicemix-and-camel/).

Projekt jest aktywnie rozwijany przez społeczność pod okiem i przy wsparciu RedHat’a. Jak widać na githubie – cały czas coś się w nim dzieje.

Bez tytułuŹródło: https://github.com/fabric8io/fabric8

Co jeszcze oferuje Fabric8?

Fabric8 to nie tylko platforma do delpoymentu i budowania. W pakiecie otrzymujemy zainstalowany, skonfigurowany (a co najlepsze konfiguracja obejmuje również zależności między narzędziami np. hooki na repozytorium kodu startujące buildy) i gotowy do użytku zestaw narzędzi na który składają się m.in. :

  • GOGS – lekkiego i wygodnego systemu zarządzającego repozytoriami Git
  • JENKINS – znane i popularne narzędzie CI, które zbuduje nasze projekty
  • NEXUS – repozytorium artefaktów, które przechowa wyniki buildów
  • DOCKER REGISTRY – repozytorium obrazów Dockera
  • FABRIC8-FORGE – rozszerzenie Fabric8 dla JBboss Forge, czyli zestawu kreatorów i dodatków umożliwiających szybkie tworzenie szkieletów projektów w wielu technologiach

oraz wiele innych, których przedstawiać nie trzeba jak Kibana, Grafana, Elasticsearch czy Gerrit , ale też Chaos Monkey, która pozwala na testowanie odporności systemu na losowe pady poszczególnych komponentów. A wszystko to skalowalne dzięki klastrowi Kubernetes’a, na którym całość jest uruchomiona (w wersji developerskiej klaster tworzony jest lokalnie).

Czy to wszystko jest bardzo skomplikowane?

Kubernetes, Docker, Jenkins, Nexus, klaster… dużo tego… zapewne ciężko zacząć pracować z tym narzędziem… Otóż nie! No dobrze, może od pewnego momentu robi się trudniej, ale sam start jest prosty. W dalszej części wpisu przybliżę Wam jak łatwo i szybko uruchomić fabric8.

Lokalna instalacja platformy z własnym klastrem Kubernetes’a zajmuje 30 minut (instalacją na gotowym klastrze zajmiemy się przy innej okazji).

Refleksji słów kilka…

Żeby nie być bezkrytycznym – fabric8 ma niestety trochę obciążeń genetycznych wynikających z bycia projektem open-source. Wprawdzie jest firmowany i mocno wspierany przez czołowych architektów JBoss’a, ale mimo wszystko pracuje nad nim społeczność. Wspomniałem wcześniej, że w projekcie ruch panuje znaczny, jednak ma to też swoje konsekwencje i trzeba o nich pamiętać.

Jak by to ująć obrazowo…

Czasem można odnieść wrażenie, że f8 jest jak osiedlowa piaskownica, w której bawią się panowie od Fuse’a i co lepsze przetestowane zabawki zabierają do swojego ogrodzonego fortu…

Wchodzenie na produkcję z taką platformą powinno być dobrze przemyślane. Nie da się jednak ukryć, że projekt stanowi świetne źródło natchnienia w budowaniu stosu technologicznego (dziesiątki gotowych narzędzi) i opracowywania wszelkiej maści PoC’ów.

Jak już sprawdzicie, czego potrzebujecie – wasz przyjazny DevOps z pewnością wesprze was w przygotowaniu własnego środowiska 🙂

Była teoria, była historia, zróbmy coś konkretnego…

Kompletny przewodnik po instalacji lokalnej (na różnych systemach) i na gotowym klastrze możecie znaleźć na stronie projektu fabric8. Poniżej przejdziemy przez instalację na systemie operacyjnym Linuxie (w moim przypadku była to dystrybucja Ubuntu 16.4LTS).

Instalacja sterownika wirtualizacji KVM

Instalację rozpoczynamy od instalacji sterownika wirtualizacji KVM. Można skorzystać również z wirtualizacji w oparciu o sterownik xhyve, ale Minikube (lokalna wersja Kubernetesa) jest aktualnie testowany w oparciu o  sterownik KVM, więc powinno być stabilniej.

Zgodnie z instrukcją do sterownika instalacja składa się z kilku poleceń:

 $ sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.7.0/docker-machine-driver-kvm -o /usr/local/bin/docker-machine-driver-kvm

$ sudo chmod +x /usr/local/bin/docker-machine-driver-kvm

# Install libvirt and qemu-kvm on your Debian/Ubuntu
$ sudo apt install libvirt-bin qemu-kvm

# Add yourself to the libvirtd group (use libvirt group for rpm based distros) so you don't need to sudo
$ sudo usermod -a -G libvirtd $(whoami)

# Update your current session for the group change to take effect
$ newgrp libvirtd


Pobieramy i instalujemy fabric8

Jeśli pracujemy na systemie z rodziny Linux lub OS X cała instalacja sprowadza się w zasadzie do pobrania i uruchomienia jednego skryptu (UWAGA!, skryptu tego NIE wykonujemy jako root – inaczej robi się bałagan w ścieżkach i uprawnieniach do katalogów i plików):

$ curl -sS https://get.fabric8.io/download.txt | bash
Downloading /home/czarek/.fabric8/bin/gofabric8 release 0.4.112
…
HTTP request sent, awaiting response... 200 OK
Length: 51899810 (49M) [application/octet-stream]
… 
Installing binaries to ~/.fabric8/bin
Add '~/.fabric8/bin' to your path so you can execute the new binaries
For example:
Edit your ~/.zshrc or ~/.bashrc and append to the end of the file
export PATH=$PATH:~/.fabric8/bin
source ~/.zshrc or ~/.zshrc

To work with the fabric8 microservices platform either:
 - 'gofabric8 start' for a local cloud development platform
 - 'gofabric8 deploy' to deploy on an existing Kubernetes or OpenShift cluster

Tak, to takie proste 🙂

Jeśli dodaliście już do ścieżki katalog z binariami, możecie śmiało uruchomić gofabric8 start.

[Ladies|Gentlemen] Start your engines…

Aby puścić w ruch naszą nowo zainstalowaną platformę wydajemy komendę:

 $ gofabric8 start 

Po wykonaniu instrukcji pobrane zostaną binaria minikube (potrzebne do uruchomienia lokalnie jednowęzłowego klaster Kubernetesa) i kubectl (narzędzie do interakcji z klastrami Kubernetesa).

 Downloading https://storage.googleapis.com/minikube/releases/ v0.14.0/minikube-linux-amd64...
Downloaded /home/czarek/.fabric8/bin/minikube
Downloading https://storage.googleapis.com/kubernetes-release/release/v1.5.1/bin/linux/amd64/kubectl...
Downloaded /home/czarek/.fabric8/bin/kubectl
using the executable /home/czarek/.fabric8/bin/minikube
running: /home/czarek/.fabric8/bin/minikube start --vm-driver=kvm --memory=6144 --cpus=1 --disk-size=50g
Starting local Kubernetes cluster...
Kubectl is now configured to use the cluster.

Skoro wszystko uruchomiło się poprawnie, nie pozostaje nam nic innego jak dostać się do webowej konsoli fabric8.

Wydanie poniższego polecenia spowoduje otwarcie konsoli w domyślnej przeglądarce:

 $ gofabric8 console

Opening URL  http://192.168.42.60:31811

Jeśli chcemy poznać tylko adres url, aby otworzyć go w przeglądarce innej niż domyślna, z pomocą przychodzi nam polecenie:

 $ gofabric8 service fabric8 --url
http://192.168.42.60:31811

W podobny sposób możemy dostać się też bezpośrednio do gui i  innych narzędzi (gogs, Jenkins, Nexus). Dostać się do nich można oczywiście również z konsoli fabric8.

 $ gofabric8 service gogs
$ gofabric8 service jenkins
$ gofabric8 service nexus

Jeśli na bieżąco podążaliście za instrukcjami, w przeglądarce powinniście zobaczyć coś takiego:

hfgh

Pod terminem „team” kryje się tak naprawdę pojedynczy system złożony z wielu mikrousług żyjący sobie w obrębie jednej przestrzeni nazw (klastrów wirtualnych) na klastrze Kubernetesa. W fabric8 nazwano to „zespołem” prawdopodobnie, aby podkreślić zależność namespace – system (ale to tylko mój domysł 🙂 ).

I to by było na tyle, jeśli chodzi o instalację i uruchomienie platformy fabric8.

Zapraszam do poklikania, rozpoznania, komentowania, zadawania pytań.

W kolejnym wpisie chciałbym przejść przez tworzenie nowej aplikacji, import istniejącego projektu i „pułapki” z tym związane.

5 / 5

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości

Zostaw komentarz