17 kwietnia 2024

Kompleksowa realizacja infrastruktury cloud przy użyciu praktyk DevOps

W ostatnim czasie mieliśmy możliwość zaprezentować doświadczenie zespołów DevOps Onwelo podczas konferencji IT „Transformacje cyfrowe dla biznesu” zorganizowanej przez naszą firmę. Opowiedzieliśmy o tym, czym jest DevOps oraz w jaki sposób implementacja tej metodologii i procesów wspiera działanie oraz rozwój biznesu. Poniższy tekst jest rozwinięciem tego tematu oraz bardziej technicznym spojrzeniem na wykorzystanie DevOps i rozwiązań cloud w projektach realizowanych dla naszych klientów.

Na początku powiemy o transformacji aplikacji monolitycznych w kierunku mikroserwisów, o chmurze obliczeniowej i jej przewadze nad rozwiązaniami lokalnymi, a także o automatyzacji procesów z wykorzystaniem CI/CD oraz GitOps. Kolejno przyjrzymy się konkretnej realizacji transformacji, którą wykonaliśmy dla jednego z naszych klientów. 

Od monolitu do mikroserwisów

Transformacja aplikacji monolitycznych w kierunku architektury mikroserwisowej to pierwszy krok w zwiększeniu elastyczności, wydajności i niezawodności systemów IT.

Rozwój funkcjonalności tradycyjnych aplikacji monolitycznych wymaga dokładniejszej analizy oraz zrozumienia. Powodem jest skomplikowany kod oraz wiele zależności w całej aplikacji. Skalowalność horyzontalna rozwiązań monolitycznych, o ile została w ogóle przewidziana, często marnuje zasoby obliczeniowe. Dzieje się tak dlatego, że nie ma możliwości uruchomienia pojedynczych modułów, których wydajność lub dostępność chcielibyśmy zwiększyć i niezbędne jest uruchomienie całej instancji aplikacji.

Architektura mikroserwisowa pozwala pozbyć się tych trudności. Wprowadza niezależne zarządzanie, rozwój i skalowanie poszczególnych funkcji aplikacji. Przekłada się to na szybsze wdrożenie nowych funkcji i łatwiejsze zarządzanie kodem. W przypadku awarii izolacja poszczególnych serwisów pozwala na ograniczenie zakresu problemu, zapewniając większą stabilność całego systemu.

Dodatkowo mikroserwisy ułatwiają integrację z nowymi technologiami i narzędziami, co pozwala firmom eksplorować nowe możliwości bez ryzyka zakłócenia działania całego systemu.

Chmura obliczeniowa kontra rozwiązania lokalne

Wybór między chmurą obliczeniową a rozwiązaniami on-premise często wpływa na długoterminową strategię IT firmy.

Środowiska on-premise wymagają wstępnej inwestycji w infrastrukturę serwerową oraz jej dalsze utrzymanie, które najczęściej realizuje wewnętrzny zespół w organizacji lub firma zewnętrzna. Z góry musimy wiedzieć, jak wiele mocy obliczeniowej będziemy potrzebować do uruchomienia i wydajnego działania oferowanej platformy. Optymalne wykorzystanie pełni potencjału, bez przekraczania limitów sprzętowych, jest w tym przypadku utrudnione. Tworzenie systemów w oparciu o wysoką dostępność jest skomplikowane, ponieważ wymaga posiadania redundantnych instancji, które zgodnie z dobrymi praktykami powinny się znajdować w osobnej, fizycznej lokalizacji.

W porównaniu do modelu on-premise chmura obliczeniowa oferuje model płatności za faktyczne użycie i eliminuje potrzebę inwestowania w drogi sprzęt. Wydaje się to być bardziej ekonomiczny wybór dla wielu organizacji. Dodatkowo zarządzanie i konserwacja infrastruktury leżą w gestii dostawcy usług chmurowych, co może znacząco zmniejszyć obciążenie zespołów IT.

Chmura zapewnia także wyjątkową elastyczność i dostępność, umożliwiając pracownikom dostęp do danych i aplikacji z dowolnego miejsca na świecie. To stanowi ogromną przewagę nad tradycyjnymi rozwiązaniami lokalnymi, które są ograniczone do fizycznej lokalizacji i wymagają znacznych nakładów na utrzymanie oraz rozbudowę.

Automatyzacja z CI/CD i GitOps

Współczesne metodyki wytwarzania oprogramowania stawiają na ciągłość. Continuous Integration (CI) i Continuous Delivery (CD) to praktyki, które pozwalają na automatyzację procesów testowania i wdrażania aplikacji. Integracja tych procesów z koncepcją GitOps, gdzie repozytorium Git staje się źródłem prawdy dla kodu aplikacji i infrastruktury, znacząco upraszcza zarządzanie zmianami i wspiera transparentność w cyklu życia oprogramowania.

Automatyzacja procesów CI/CD w połączeniu z GitOps nie tylko przyspiesza dostarczanie nowych funkcji i poprawek, ale także zwiększa bezpieczeństwo i stabilność środowiska produkcyjnego. Co więcej, ułatwia współpracę między zespołami deweloperskimi i operacyjnymi, zapewniając spójność i efektywność pracy.

Przeprowadzenie transformacji w praktyce

Jednym z naszych klientów, którego wspieraliśmy w zakresie trzech wspomnianych aspektów, jest międzynarodowy dostawca oprogramowania dla branży przemysłowej. W pierwszej kolejności wykonana została wstępna analiza obecnej sytuacji oraz wizji klienta na dalszy rozwój i konkurencyjność oferty. Wykazała ona, że niezbędne będzie wykonanie prac dotyczących usprawnienia procesów oraz unowocześnienia stacku technologicznego oferowanego produktu. Wspólnie ustaliliśmy kilka wyzwań, które należało zaadresować:

  • Skrócenie czasu wdrożenia oraz konfiguracji nowego środowiska
  • Usystematyzowanie dostarczania zmian oraz aktualizacji
  • Poszerzenie portfolio o nowy model oferowania usług (SaaS)
  • Zmodernizowanie stacku technologicznego
  • Dopasowanie oferty do zmieniającego się rynku

Zespół DevOps wraz z architektami oraz developerami podszedł do tematu kompleksowo – począwszy od wypracowania nowej architektury aplikacji, poprzez zaprojektowanie infrastruktury opartej na cloud, aż po zautomatyzowanie procesów dostarczania i zarządzania środowiskami. Każdy etap został szerzej opisany w kolejnych akapitach

Realizacja wytyczonego kierunku rozwoju wymagała zmian w warstwie aplikacji. Platforma oferowana przez klienta opierała się głównie na monolitycznej aplikacji instalowanej w modelu on-premise, na maszynach wirtualnych lub serwerach fizycznych. Serwery wykorzystywały system operacyjny Microsoft Windows Server zarówno po stronie aplikacyjnej, jak i bazodanowej.

W ramach przystosowania aplikacji do nowych standardów i sprostania wymaganiom podjęta została decyzja o migracji aplikacji do architektury mikroserwisowej. Taka architektura w porównaniu do dotychczasowej dostarczała następujących korzyści:

  • Zwiększenie wydajności aplikacji
  • Uproszczenie kodu, rozbitego na poszczególne mikroserwisy
  • Możliwość łatwego skalowania wybranych modułów platformy
  • Prostsze dodawanie oraz testowanie nowych funkcjonalności
  • Zmniejszenie zależności między modułami oraz łatwiejsza ich identyfikacja
  • Możliwość dostarczania modułów aplikacji oraz ich konfiguracji poprzez natywne narzędzia obsługujące skonteneryzowane aplikacje
  • Możliwość wykorzystania potencjału automatyzacji oraz ich wbudowanych funkcjonalności, bez potrzeby budowania dedykowanych rozwiązań

Nowe funkcjonalności platformy wdrażano jako mikroserwisy, bazując na konteneryzacji. Jednocześnie obecnie istniejące moduły monolityczne były rozbijane, migrowane i konteneryzowane przez zespoły developerskie.

 

Architektura

 

Zmiany w architekturze aplikacji wiązały się również z modernizacją części infrastrukturalnej. Zgodnie ze strategią biznesową zespół zaprojektował infrastrukturę cloud, uwzględniającą okres przejściowy z aplikacji monolitycznej do mikroserwisowej. Ze względu na wykorzystanie produktów Microsoft narzędziem najbliższym zapotrzebowaniu klienta okazał się Azure Cloud. Platformą wykorzystaną do orkiestracji skonteneryzowanych aplikacji został Kubernetes w implementacji chmurowej Azure Kubernetes Engine. W celu optymalizacji kosztów licencji oraz całego środowiska poszerzono również wykorzystanie produktów open source, takich jak bazy PostgreSQL. Dzięki chmurze możliwe było również skorzystanie z usług uzupełniających funkcjonalność platformy oraz umożliwiających zwiększenie bezpieczeństwa, skalowalności, redundancji oraz wysokiej dostępności:

  • Implementacja Infrastructure as Code z wykorzystaniem narzędzia Terraform do zarządzania infrastrukturą cloud
  • Wykorzystanie Azure Key Vault do integracji poufnych danych dostarczanych do aplikacji
  • Skorzystanie z opcji redundancji danych w przypadku magazynów danych Storage Account oraz baz danych
  • Zależnie od krytyczności środowiska – możliwość konfiguracji usług w trybie High Availability oraz przygotowania scenariuszy Disaster Recovery opartych na funkcjonalnościach usług Azure Cloud na wypadek awarii systemu lub usług chmurowych

W związku z coraz szerszym wykorzystaniem kontenerów niezbędny stał się aspekt automatyzacji dostarczania wydawanych aplikacji do poszczególnych środowisk wewnętrznych oraz komercyjnych. Zespół DevOps wdrożył w tym celu rozwiązanie oparte o narzędzie FluxCD bazujące na podejściu GitOps. Jest to zestaw procesów i praktyk opartych na dostarczeniu infrastruktury, konfiguracji etc. w formie kodu poprzez repozytoria systemu kontroli wersji Git. Jak to działa w praktyce?

 

GitOps

 

FluxCD wymaga konfiguracji po stronie klastra Kubernetes oraz repozytorium kodu Git, które jest dostępne sieciowo z poziomu Kubernetesa.

W klastrze AKS w chmurze uruchomione oraz skonfigurowane zostały:

  • FluxCD wraz z kontrolerami poszczególnych repozytoriów oraz konfiguracji (Git, Helm, Kustomize)
  • Proces dostarczenia konfiguracji pozwalającej na nawiązanie bezpiecznego połączenia do repozytorium kodu Git oraz paczek Helm Charts

W repozytorium Git uruchomione oraz skonfigurowane zostały:

  • Struktura katalogów pozwalająca na dostarczanie konfiguracji z podziałem na:
    • Środowiska aplikacyjne (dev, test, prod, klient etc.)
    • Poszczególne mikroserwisy
    • Część wspólną dostarczaną dla każdego środowiska, niezbędną do poprawnego działania platformy np. Ingress Controller
  • Proces konfiguracji każdego mikroserwisu dedykowanej dla odpowiedniego środowiska aplikacyjnego m.in. wersji aplikacji oraz jej integracji z resztą usług np. bazami danych

FluxCD po uruchomieniu oraz zsynchronizowaniu z repozytorium kodu instaluje skonfigurowane aplikacje, a następnie dba o utrzymywanie ich stanu zgodnego z aktualną wersją kodu. Jakiekolwiek zmiany dla aplikacji są dostarczane za pomocą commitów do repozytorium, przechodząc wstępnie weryfikację kodu przez wyznaczone osoby, zanim zmiana trafi do środowiska.

FluxCD w przypadku środowisk developerskich został dodatkowo zoptymalizowany pod kątem szybkości wdrożenia nowych wydań aplikacji. Narzędzie nie oczekuje na zmianę wersji w kodzie, lecz „obserwuje” dostępne najnowsze wydania aplikacji w repozytorium Helm Charts i natychmiast instaluje je w środowisku developerskim, co pozwala developerom na szybką analizę i testowanie zmian wprowadzonych w mikroserwisie.

Dzięki transformacji na poziomie aplikacyjnym oraz infrastrukturalnym, a także wdrożeniu procesów automatyzujących dostarczanie zmian, klient uzyskał:

  • Skrócenie czasu dostarczania nowych środowisk oraz możliwość sprawnego tworzenia środowisk tymczasowych w oparciu o cloud
  • Optymalizację kosztów poprzez wykorzystanie tylko niezbędnej ilości zasobów obliczeniowych oraz przyspieszenie manualnych procesów
  • Skrócenie czasu dostawy nowych wydań aplikacji
  • Możliwość dostarczania aktualizacji dla wybranych modułów aplikacji, bez wpływu na resztę modułów
  • Zwiększenie skalowalności, niezawodności, dostępności oraz bezpieczeństwa platformy, korzystając z funkcjonalności oferowanych przez cloud

Uporządkowanie oraz ujednolicenie procesów dostarczania platformy, jednocześnie zwiększenie kontroli nad zmianami przez wykorzystanie Infrastructure as Code oraz GitOps

Podsumowanie

Transformacja cyfrowa to nie tylko przejście na nowe technologie, ale przede wszystkim zmiana sposobu myślenia o zarządzaniu i rozwijaniu systemów IT. Wykorzystanie chmury obliczeniowej, przechodzenie na architekturę mikroserwisową i wdrażanie automatyzacji z CI/CD oraz GitOps to kroki, które mogą znacząco przyspieszyć ten proces, czyniąc firmę bardziej elastyczną, innowacyjną i odporną na zmiany rynkowe.

 

Paweł Kalarus – DevOps Engineer & Team Lead w Onwelo, od ponad 8 lat realizuje projekty z zakresu infrastruktury IT, wdrożeń oraz migracji cloud. Prywatnie fan F1 oraz szeroko pojętej motoryzacji.

 

Sebastian Frankiewicz – DevOps Engineer & Team Lead w Onwelo, przez ostanie 3 lata w Onwelo wdrażał rozwiązania cloud oraz DevOps w projektach dla branży bankowej oraz automotive. Ponadto koordynuje Akademię Cloud Competence Center, gdzie wspiera młodych adeptów tych technologii.

 

Konferencja „Transformacje cyfrowe dla biznesu” zorganizowana przez Onwelo odbyła się 27 marca 2024 r. w warszawskim budynku Skyliner. Wydarzenie poświęcone było sztucznej inteligencji, rozwiązaniom cloud oraz ochronie zasobów IT w procesach transformacji cyfrowych dla firm. Była to okazja do spotkania się w gronie naszych partnerów biznesowych, przedstawicieli dynamicznie działających firm z różnych branż, nastawionych na rozwój technologiczny. Dziękujemy wszystkim uczestnikom! W kolejnych artykułach będziemy przybliżać tematy prezentowane podczas konferencji.

 

Zostaw komentarz

Polecamy

Sztuczna inteligencja w wykrywaniu zagrożeń bezpieczeństwa IT

Sztuczna inteligencja w wykrywaniu zagrożeń bezpieczeństwa IT

Cyberbezpieczeństwo to nie tylko zaawansowane technicznie systemy zabezpieczeń w dużych firmach czy wojsku. To także nasze prywatne bezpieczeństwo, walka z zagrożeniami i ich prewencja w codziennym życiu oraz wiedza o bezpiecznym korzystaniu z internetu. Adam Kowalski-Potok, nasz Seurity Engineer, opowiada jak AI i jej rozwój wpływa na wykrywanie zagrożeń w cyber security.

Data & Analytics – architektura systemów jutra

Data & Analytics – architektura systemów jutra

Jaka jest historia inżynierii danych? Jak przebiegał rozwój technologii i na jakie trendy zwraca obecnie uwagę świat? Marek Kozioł, Data Solution Architect i Arkadiusz Zdanowski, Cloud Data Engineer & Team Leader w Onwelo opowiedzieli o tych zagadnieniach podczas konferencji „Transformacje cyfrowe dla biznesu”. Zapraszamy do lektury artykułu przygotowanego na bazie tego wystąpienia.

Sztuczna inteligencja w wykrywaniu zagrożeń bezpieczeństwa IT

Sztuczna inteligencja w wykrywaniu zagrożeń bezpieczeństwa IT

Cyberbezpieczeństwo to nie tylko zaawansowane technicznie systemy zabezpieczeń w dużych firmach czy wojsku. To także nasze prywatne bezpieczeństwo, walka z zagrożeniami i ich prewencja w codziennym życiu oraz wiedza o bezpiecznym korzystaniu z internetu. Adam Kowalski-Potok, nasz Seurity Engineer, opowiada jak AI i jej rozwój wpływa na wykrywanie zagrożeń w cyber security.

#Udostępnij

strzałka przewiń do góry strony