Samouczek Kubernetes, część 1: Aplikacje, mikrousługi i kontenery
Na naszą prośbę Habr stworzył hub Kubernetes i mamy przyjemność umieścić w nim pierwszą publikację. Subskrybuj!
Kubernetes jest łatwy. Dlaczego banki płacą mi dużo pieniędzy za pracę w tej dziedzinie, podczas gdy każdy może opanować tę technologię w zaledwie kilka godzin?
Jeśli wątpisz w to, że Kubernetesa można się tak szybko nauczyć, proponuję spróbować zrobić to samemu. Mianowicie po opanowaniu tego materiału będziesz w stanie uruchomić aplikację opartą o mikroserwisy w klastrze Kubernetes. Mogę to zagwarantować, ponieważ w tej samej metodyce, którą tu stosuję, uczę naszych klientów pracy z Kubernetes. Czym ten poradnik różni się od innych? Właściwie wiele rzeczy. Tak więc większość tych materiałów zaczyna się od wyjaśnienia prostych rzeczy - koncepcji Kubernetesa i cech polecenia kubectl. Autorzy tych artykułów zakładają, że ich czytelnik jest zaznajomiony z tworzeniem aplikacji, mikroserwisami i kontenerami Dockera. Pójdziemy w drugą stronę. Najpierw porozmawiajmy o tym, jak uruchomić aplikację opartą na mikroserwisach na komputerze. Następnie przyjrzymy się tworzeniu obrazów kontenerów dla każdej mikrousługi. A potem zapoznamy się z Kubernetes i przeanalizujemy wdrożenie aplikacji opartej o mikroserwisy w klastrze zarządzanym przez Kubernetes.
Takie podejście, ze stopniowym podejściem do Kubernetes, zapewni głębię zrozumienia tego, co się dzieje, czego potrzebuje przeciętny człowiek, aby zrozumieć, jak prosto wszystko jest zorganizowane w Kubernetes. Kubernetes to z pewnością prosta technologia, pod warunkiem, że każdy, kto chce ją opanować, wie, gdzie i jak jest używany.
Teraz, bez zbędnych ceregieli, zabierzmy się do pracy i porozmawiajmy o aplikacji, z którą będziemy pracować.
Aplikacja eksperymentalna
Nasza aplikacja będzie wykonywać tylko jedną funkcję. Jako dane wejściowe przyjmuje jedno zdanie, po czym za pomocą narzędzi analizy tekstu przeprowadza analizę sentymentalną tego zdania, uzyskując ocenę emocjonalnego stosunku autora zdania do określonego obiektu.
Tak wygląda główne okno tej aplikacji.
Aplikacja internetowa do analizy nastrojów
Z technicznego punktu widzenia aplikacja składa się z trzech mikroserwisów, z których każdy rozwiązuje określony zestaw zadań:
SA-Frontend to serwer sieciowy Nginx obsługujący statyczne pliki React.
SA-WebApp to aplikacja internetowa napisana w Javie, która obsługuje żądania z frontendu.
SA-Logic to aplikacja w języku Python, która przeprowadza analizę tonacji tekstu.
Należy zauważyć, że mikrousługi nie istnieją w izolacji. Realizują ideę „rozdzielenia obowiązków”, ale jednocześnie muszą ze sobą współdziałać.
Przepływy danych w aplikacji
Na powyższym diagramie można zobaczyć ponumerowane etapy systemu, ilustrujące przepływy danych w aplikacji. Podzielmy je:
Przeglądarka żąda pliku z serwera index.html (co z kolei ładuje pakiet aplikacji React).
Użytkownik wchodzi w interakcję z aplikacją, co powoduje wywołanie aplikacji internetowej opartej na Springu.
Aplikacja internetowa przekazuje żądanie przeanalizowania tekstu do aplikacji w języku Python.
Aplikacja Pythona analizuje tonację tekstu i zwraca wynik jako odpowiedź na żądanie.
Aplikacja Spring wysyła odpowiedź do aplikacji React (która z kolei pokazuje użytkownikowi wynik przeanalizowanego tekstu).
Kod dla wszystkich tych aplikacji można znaleźć tutaj. Polecam skopiować to repozytorium do siebie już teraz, ponieważ czeka nas wiele ciekawych eksperymentów z nim.
Uruchomienie aplikacji opartej o mikroserwisy na lokalnej maszynie
Aby aplikacja działała, musimy uruchomić wszystkie trzy mikroserwisy. Zacznijmy od najładniejszego z nich - aplikacji frontendowej.
▍Konfiguracja React dla rozwoju lokalnego
Aby uruchomić aplikację React, musisz zainstalować na swoim komputerze framework Node.js i NPM. Po zainstalowaniu tego wszystkiego przejdź za pomocą terminala do folderu projektu sa-frontend i uruchom następujące polecenie:
npm install
Wykonując to polecenie w folderze node_modules zostaną załadowane zależności aplikacji React, których zapisy znajdują się w pliku package.json. Po pobraniu zależności w tym samym folderze uruchom następujące polecenie:
npm start
To wszystko. Aplikacja React jest teraz uruchomiona i można uzyskać do niej dostęp, przechodząc do adresu przeglądarki localhost:3000. Możesz coś zmienić w jego kodzie. Od razu zobaczysz efekt tych zmian w przeglądarce. Jest to możliwe dzięki tzw. „gorącej” wymianie modułów. Dzięki temu tworzenie frontendu staje się prostym i przyjemnym doświadczeniem.
▍Przygotowanie aplikacji React do produkcji
Aby faktycznie korzystać z aplikacji React, musimy ją przekonwertować na zestaw plików statycznych i udostępnić klientom korzystającym z serwera WWW.
Aby zbudować aplikację React, ponownie korzystając z terminala, przejdź do folderu sa-frontend i uruchom następujące polecenie:
npm run build
Spowoduje to utworzenie katalogu w folderze projektu build. Będzie zawierał wszystkie pliki statyczne wymagane do działania aplikacji React.
▍Obsługa plików statycznych za pomocą Nginx
Najpierw musisz zainstalować i uruchomić serwer WWW Nginx. Tutaj możesz go pobrać i znaleźć instrukcje dotyczące jego instalacji i uruchamiania. Następnie musisz skopiować zawartość folderu sa-frontend/build do folderu [your_nginx_installation_dir]/html.
Dzięki takiemu podejściu plik generowany podczas montażu aplikacji React index.html dostępny będzie o godz [your_nginx_installation_dir]/html/index.html. Jest to plik, który domyślnie serwer Nginx wydaje podczas uzyskiwania do niego dostępu. Serwer jest skonfigurowany do nasłuchiwania na porcie 80, ale możesz dostosować go tak, jak chcesz, edytując plik [your_nginx_installation_dir]/conf/nginx.conf.
Teraz otwórz przeglądarkę i przejdź do localhost:80. Zobaczysz stronę aplikacji React.
Aplikacja React obsługiwana przez serwer Nginx
Jeśli teraz wpiszesz coś w polu Type your sentence i naciśnij przycisk Send - nic się nie stanie. Ale jeśli spojrzysz na konsolę, zobaczysz tam komunikaty o błędach. Aby dokładnie zrozumieć, gdzie występują te błędy, przeanalizujmy kod aplikacji.
▍Analiza kodu aplikacji frontendowej
Patrząc na kod pliku App.js, widzimy, że klikając na przycisk Send wywołuje metodę analyzeSentence(). Kod tej metody pokazano poniżej. Jednocześnie zwróć uwagę na fakt, że dla każdej linii, do której znajduje się komentarz formularza # Номер, pod kodem znajduje się wyjaśnienie. W ten sam sposób będziemy analizować inne fragmenty kodu.
1. Adres URL, do którego kierowane jest żądanie POST. Zakłada się, że ten adres jest aplikacją oczekującą na takie żądania.
2.Treść żądania wysłana do aplikacji. Oto przykładowa treść żądania:
{
sentence: "I like yogobella!"
}
3.Po otrzymaniu odpowiedzi na żądanie stan komponentu jest aktualizowany. Spowoduje to ponowne renderowanie komponentu. Jeśli otrzymamy dane (czyli obiekt JSON zawierający wprowadzone dane i obliczony wynik tekstowy), wyślemy komponent Polarityo ile spełnione są warunki. Oto jak opisujemy komponent:
Kod wydaje się działać całkiem dobrze. Co tu jest nie tak? Jeśli założysz, że pod adresem, na który aplikacja próbuje wysłać żądanie POST, nie ma jeszcze nic, co mogłoby przyjąć i przetworzyć to żądanie, to będziesz miał absolutną rację. Mianowicie w celu przetwarzania żądań przychodzących na adres http://localhost:8080/sentiment, musimy uruchomić aplikację internetową opartą na Springu.
Potrzebujemy aplikacji Spring, która może zaakceptować żądanie POST
▍Konfiguracja aplikacji webowej opartej o Spring
Aby wdrożyć aplikację Spring, potrzebujesz JDK8 i Maven oraz odpowiednio skonfigurowanych zmiennych środowiskowych. Po zainstalowaniu tego wszystkiego możesz kontynuować pracę nad naszym projektem.
▍Pakowanie aplikacji do pliku jar
Przejdź za pomocą terminala do folderu sa-webapp i wprowadź następujące polecenie:
mvn install
Po wykonaniu tego polecenia w folderze sa-webapp katalog zostanie utworzony target. Tutaj będzie zlokalizowana aplikacja Java, spakowana w pliku jar, reprezentowanym przez plik sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍Uruchamianie aplikacji Java
Przejdź do folderu target i uruchom aplikację za pomocą następującego polecenia:
Podczas wykonywania tego polecenia wystąpi błąd. Aby zacząć to naprawiać, możemy przeanalizować szczegóły wyjątku w danych śledzenia stosu:
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"
Dla nas najważniejsza jest tutaj wzmianka o niemożności doprecyzowania znaczenia sa.logic.api.url. Przeanalizujmy kod, w którym występuje błąd.
▍Analiza kodu aplikacji Java
Oto fragment kodu, w którym występuje błąd.
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}
w SentimentController jest pole saLogicApiUrl. Jego wartość jest ustalana przez właściwość sa.logic.api.url.
Linia saLogicApiUrl łączy się z wartością /analyse/sentiment. Razem tworzą adres do nawiązania połączenia z mikroserwisem przeprowadzającym analizę tekstu.
▍Ustawianie wartości właściwości
W Springu domyślnym źródłem wartości właściwości jest plik application.properties, który można znaleźć pod adresem sa-webapp/src/main/resources. Ale użycie go nie jest jedynym sposobem na ustawienie wartości właściwości. Możesz to również zrobić za pomocą następującego polecenia:
Wartość tej właściwości powinna wskazywać adres naszej aplikacji w Pythonie.
Konfigurując go, informujemy aplikację internetową Springa, gdzie musi się udać, aby wykonać żądania analizy tekstu.
Aby nie komplikować sobie życia, zdecydujemy, że aplikacja w Pythonie będzie dostępna pod adresem localhost:5000 i postaraj się o tym nie zapomnieć. W rezultacie polecenie uruchomienia aplikacji Spring będzie wyglądać następująco:
Określenie adresu do wysyłania do niego żądań POST.
Odzyskanie własności sentence z treści żądania.
Inicjalizacja obiektu anonimowego TextBlob i uzyskanie wartości polarity za pierwszą otrzymaną ofertę w treści zapytania (w naszym przypadku jest to jedyna propozycja przesłana do analizy).
Zwrócenie odpowiedzi, której treść zawiera treść oferty oraz wyliczony dla niej wskaźnik polarity.
Uruchomienie aplikacji Flask, która będzie dostępna pod adresem 0.0.0.0:5000 (możesz również uzyskać do niego dostęp za pomocą konstrukcji formularza localhost:5000).
Teraz działają mikroserwisy, z których składa się aplikacja. Są ustawione na interakcję ze sobą. Oto jak wygląda schemat aplikacji na tym etapie prac.
Wszystkie mikrousługi, które składają się na aplikację, są przywracane do prawidłowego stanu
Teraz, zanim przejdziemy dalej, otwórz aplikację React w przeglądarce i spróbuj przeanalizować za jej pomocą jakieś zdanie. Jeśli wszystko jest wykonane poprawnie - po naciśnięciu przycisku Send zobaczysz wyniki analizy pod polem tekstowym.
W następnej sekcji porozmawiamy o tym, jak uruchamiać nasze mikroserwisy w kontenerach Docker. Jest to niezbędne do przygotowania aplikacji do działania w klastrze Kubernetes.
Kontenery Dockera
Kubernetes to system do automatyzacji wdrażania, skalowania i zarządzania konteneryzowanymi aplikacjami. Jest również nazywany „organizatorem kontenerów”. Jeśli Kubernetes współpracuje z kontenerami, to przed użyciem tego systemu musimy najpierw zdobyć te kontenery. Ale najpierw porozmawiajmy o tym, czym są kontenery. Być może najlepszą odpowiedź na pytanie, co to jest, można znaleźć w dokumentacja do Dockera:
Obraz kontenera to lekki, samodzielny, wykonywalny pakiet zawierający aplikację, która zawiera wszystko, co niezbędne do jej uruchomienia: kod aplikacji, środowisko wykonawcze, narzędzia i biblioteki systemowe, ustawienia. Konteneryzowane programy mogą być używane zarówno w środowiskach Linux, jak i Windows i zawsze będą działać tak samo niezależnie od infrastruktury.
Oznacza to, że kontenery można uruchomić na dowolnym komputerze, w tym na serwerach produkcyjnych, iw każdym środowisku zawarte w nich aplikacje będą działać tak samo.
Aby poznać możliwości kontenerów i porównać je z innymi sposobami uruchamiania aplikacji, spójrzmy na przykład serwowania aplikacji React przy użyciu maszyny wirtualnej i kontenera.
▍Obsługa statycznych plików aplikacji React przy użyciu maszyny wirtualnej
Próbując zorganizować konserwację plików statycznych za pomocą maszyn wirtualnych, napotkamy następujące wady:
Nieefektywne wykorzystanie zasobów, ponieważ każda maszyna wirtualna jest kompletnym systemem operacyjnym.
Zależność od platformy. To, co działa na niektórych komputerach lokalnych, może nie działać na serwerze produkcyjnym.
Powolne i wymagające dużych zasobów skalowanie rozwiązania maszyny wirtualnej.
Serwer WWW Nginx obsługujący pliki statyczne działające na maszynie wirtualnej
Jeśli kontenery są używane do rozwiązania podobnego problemu, to w porównaniu z maszynami wirtualnymi można zauważyć następujące mocne strony:
Efektywne wykorzystanie zasobów: praca z systemem operacyjnym przy użyciu Dockera.
Niezależność platformy. Kontener, który programista może uruchomić na własnym komputerze, będzie działać w dowolnym miejscu.
Lekkie wdrożenie dzięki zastosowaniu warstw obrazu.
Serwer WWW Nginx obsługujący pliki statyczne działające w kontenerze
Porównaliśmy maszyny wirtualne i kontenery tylko w kilku punktach, ale nawet to wystarczy, aby poznać mocne strony kontenerów. Tutaj Możesz znaleźć szczegółowe informacje na temat kontenerów Docker.
▍Budowanie obrazu kontenera dla aplikacji React
Podstawowym elementem konstrukcyjnym kontenera Docker jest plik Dockerfile. Na początku tego pliku zapisywany jest podstawowy obraz kontenera, następnie dołączana jest sekwencja instrukcji wskazujących, jak stworzyć kontener, który będzie spełniał potrzeby aplikacji.
Zanim zaczniemy pracować z plikiem Dockerfile, pamiętaj co zrobiliśmy, aby przygotować pliki aplikacji React do wgrania na serwer Nginx:
Tworzenie pakietu aplikacji React (npm run build).
Uruchomienie serwera Nginx.
Kopiowanie zawartości katalogu build z folderu projektu sa-frontend do folderu serwera nginx/html.
Poniżej można zobaczyć podobieństwa pomiędzy tworzeniem kontenera a powyższymi czynnościami wykonywanymi na komputerze lokalnym.
▍Przygotowanie pliku Docker dla aplikacji SA-Frontend
Instrukcje, które należy uwzględnić Dockerfile do zastosowania SA-Frontend, składają się tylko z dwóch drużyn. Faktem jest, że zespół programistów Nginx przygotował podstawowy obraz dla Nginx, które wykorzystamy do zbudowania naszego wizerunku. Oto dwa kroki, które musimy opisać:
Musisz ustawić obraz Nginx jako podstawę obrazu.
Zawartość folderu sa-frontend/build należy skopiować do folderu obrazów nginx/html.
Jeśli przejdziemy od tego opisu do pliku Dockerfile, wtedy będzie wyglądać tak:
FROM nginx
COPY build /usr/share/nginx/html
Jak widać, wszystko tutaj jest bardzo proste, a nawet zawartość pliku okazuje się całkiem czytelna i zrozumiała. Ten plik nakazuje systemowi zrobienie obrazu nginx ze wszystkim, co już ma, i skopiuj zawartość katalogu build do katalogu nginx/html.
Tutaj możesz mieć pytanie dotyczące tego, skąd wiem, gdzie dokładnie skopiować pliki z folderu build, czyli skąd się wzięła ścieżka /usr/share/nginx/html. W rzeczywistości nie ma tu też nic skomplikowanego. Faktem jest, że odpowiednie informacje można znaleźć w opis wizerunek.
▍Składanie obrazu i przesyłanie go do repozytorium
Zanim będziemy mogli pracować z gotowym obrazem, musimy przesłać go do repozytorium obrazów. W tym celu wykorzystamy bezpłatną platformę do hostingu obrazów w chmurze Docker Hub. Na tym etapie pracy musisz wykonać następujące czynności:
Tutaj i poniżej w podobnych poleceniach $DOCKER_USER_ID należy zastąpić nazwą użytkownika w Docker Hub. Na przykład ta część polecenia może wyglądać tak: rinormaloku/sentiment-analysis-frontend.
W takim przypadku polecenie to można skrócić, usuwając z niego -f Dockerfile, ponieważ folder, w którym wykonujemy to polecenie, zawiera już ten plik.
Aby wysłać gotowy obraz do repozytorium potrzebujemy polecenia:
Po jej zakończeniu sprawdź swoją listę repozytoriów w Docker Hub, aby zobaczyć, czy obraz został pomyślnie wypchnięty do magazynu w chmurze.
▍Uruchomienie kontenera
Teraz każdy może pobrać i uruchomić obraz znany jako $DOCKER_USER_ID/sentiment-analysis-frontend. Aby to zrobić, musisz uruchomić następującą sekwencję poleceń:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Teraz kontener jest uruchomiony i możemy kontynuować pracę, tworząc inne potrzebne nam obrazy. Ale zanim przejdziemy dalej, zrozummy projekt 80:80, który znajduje się w poleceniu uruchomienia obrazu i może wydawać się mylący.
Pierwsza liczba 80 to numer portu hosta (czyli komputera lokalnego).
Druga liczba 80 to port kontenera, do którego ma zostać przekierowane żądanie.
Rozważ następującą ilustrację.
Przekierowanie portów
System przekazuje żądania z portu <hostPort> na port <containerPort>. To znaczy dostęp do portu 80 komputer jest przekierowywany do portu 80 pojemnik.
Od portu 80 otwarte na komputerze lokalnym, możesz uzyskać dostęp do aplikacji z tego komputera pod adresem localhost:80. Jeśli Twój system nie obsługuje Dockera, możesz uruchomić aplikację na maszynie wirtualnej Docker, której adres będzie wyglądał jak <docker-machine ip>:80. Aby znaleźć adres IP maszyny wirtualnej Docker, możesz użyć polecenia docker-machine ip.
W tym momencie, po pomyślnym uruchomieniu kontenera aplikacji front-end, powinno być możliwe otwarcie jego strony w przeglądarce.
▍ plik .dockerignore
Budowanie obrazu aplikacji SA-Frontend, mogliśmy zauważyć, że proces ten jest niezwykle powolny. Wynika to z faktu, że kontekst budowania obrazu musi zostać wysłany do demona Dockera. Katalog reprezentujący kontekst kompilacji jest podawany jako ostatni argument polecenia docker build. W naszym przypadku na końcu tego polecenia znajduje się kropka. Powoduje to uwzględnienie następującej struktury w kontekście zespołu:
Ale ze wszystkich obecnych tutaj folderów potrzebujemy tylko folderu build. Pobieranie czegokolwiek innego to strata czasu. Możesz przyspieszyć kompilację, mówiąc Dockerowi, które katalogi mają ignorować. W tym celu potrzebujemy pliku .dockerignore. Ty, jeśli znasz plik .gitignore, struktura tego pliku prawdopodobnie będzie wyglądać znajomo. Zawiera listę katalogów, które system budowania obrazu może zignorować. W naszym przypadku zawartość tego pliku wygląda następująco:
node_modules
src
public
plik .dockerignore musi znajdować się w tym samym folderze co plik Dockerfile. Teraz montaż obrazu zajmie kilka sekund.
Zajmijmy się teraz obrazem aplikacji Java.
▍Budowanie obrazu kontenera dla aplikacji Java
Wiesz co i nauczyłeś się już wszystkiego, czego potrzebujesz do tworzenia obrazów kontenerów. Dlatego ten rozdział będzie bardzo krótki.
Otwórz plik Dockerfile, który znajduje się w folderze projektu sa-webapp. Jeśli przeczytasz tekst tego pliku, to spotkasz w nim tylko dwie nowe konstrukcje, które zaczynają się od słów kluczowych ENV и EXPOSE:
Słowo kluczowe ENV pozwala deklarować zmienne środowiskowe wewnątrz kontenerów Dockera. W szczególności w naszym przypadku umożliwia ustawienie adresu URL umożliwiającego dostęp do API aplikacji, która przeprowadza analizę tekstu.
Słowo kluczowe EXPOSE pozwala nakazać Dockerowi otwarcie portu. Będziemy używać tego portu podczas pracy z aplikacją. Tutaj możesz to zobaczyć w Dockerfile do zastosowania SA-Frontend nie ma takiego polecenia. Służy to wyłącznie celom dokumentacyjnym, innymi słowy, ta konstrukcja jest przeznaczona dla czytelnika Dockerfile.
Budowanie obrazu i umieszczanie go w repozytorium wygląda dokładnie tak, jak w poprzednim przykładzie. Jeśli nie jesteś jeszcze pewien swoich umiejętności, odpowiednie polecenia znajdziesz w pliku README.md w folderze sa-webapp.
▍Budowanie obrazu kontenera dla aplikacji w Pythonie
Jeśli spojrzysz na zawartość pliku Dockerfile w folderze sa-logicnie znajdziesz tam nic nowego. Polecenia służące do budowania obrazu i wypychania go do repozytorium również powinny być Ci znane, ale podobnie jak w przypadku innych naszych aplikacji można je znaleźć w pliku README.md w folderze sa-logic.
▍Testowanie aplikacji kontenerowych
Czy możesz zaufać czemuś, czego nie testowałeś? ja też nie mogę. Przetestujmy nasze pojemniki.
Uruchommy kontener aplikacji sa-logic i skonfiguruj go do nasłuchiwania na porcie 5050:
docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
Uruchommy kontener aplikacji sa-webapp i skonfiguruj go do nasłuchiwania na porcie 8080. Dodatkowo musimy ustawić port, na którym aplikacja Python będzie nasłuchiwać żądań z aplikacji Java poprzez ponowne przypisanie zmiennej środowiskowej SA_LOGIC_API_URL:
$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
Aby dowiedzieć się, jak znaleźć adres IP kontenera lub maszyny wirtualnej Docker, zapoznaj się z plikiem README.
Uruchommy kontener aplikacji sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Teraz wszystko jest gotowe do nawigacji w przeglądarce pod wskazany adres localhost:80 i przetestuj aplikację.
Pamiętaj, że jeśli zmienisz port dla sa-webapp, lub jeśli używasz maszyny wirtualnej Docker, musisz edytować plik App.js z folderu sa-frontendpoprzez zmianę adresu IP lub numeru portu w metodzie analyzeSentence()poprzez zastąpienie aktualnych informacji zamiast przestarzałych danych. Następnie musisz ponownie złożyć obraz i użyć go.
Tak wygląda teraz nasz schemat aplikacji.
Mikrousługi działają w kontenerach
Podsumowanie: po co nam klaster Kubernetes?
Właśnie przejrzeliśmy pliki Dockerfile, mówił o tym, jak tworzyć obrazy i przekazywać je do repozytorium Dockera. Ponadto dowiedzieliśmy się, jak przyspieszyć montaż obrazów za pomocą pliku .dockerignore. W rezultacie nasze mikroserwisy działają teraz w kontenerach Docker. Tutaj możesz mieć całkowicie uzasadnione pytanie, dlaczego potrzebujemy Kubernetes. Odpowiedzi na to pytanie poświęcę drugą część tego materiału. W międzyczasie rozważ następujące pytanie:
Załóżmy, że nasza aplikacja internetowa do analizy tekstu stała się popularna na całym świecie. Co minutę napływają do niego miliony próśb. Oznacza to, że mikroserwisy sa-webapp и sa-logic będzie w ogromnym stresie. Jak skalować kontenery obsługujące mikroserwisy?