Metodologia GitOps w wykonaniu MENTAX SA

O co chodzi z tym Gitem?  🤔 Czym jest to całe opsowanie? 😲

O co chodzi z tym Gitem?

 

Jeżeli tworzymy oprogramowanie musimy mieć miejsce gdzie zapisujemy swoje dane. Jeżeli chcemy się podzielić swoją pracą, lub tworzyć projekt w grupie, miejsce zapisu musi być dostępne dla pozostałych osób. Teraz gdy potrzebujemy sprawdzić jakie zmiany zostały wprowadzone w projekcie niezbędny jest system kontroli wersji. To właśnie jest Git.

 

Czym jest to całe opsowanie? 

 

Ops skrót od angielskiego operations, oznacza po prostu operacje. Wykonywanie operacji w IT oznacza szeroki zakres usług administracyjnych począwszy od połączeń sieciowych, poprzez uruchamianie serwerów do końcowego etapu, którym jest utrzymywanie i monitorowanie  działającej aplikacji, którą przykładowo użytkownik widzi w swojej przeglądarce.

 

O metodologii w projektach IT

 

Przyrost projektów w firmie potrzebuje wykonywania coraz większej ilości operacji niezbędnych do ich działania. Projekty różnią się od siebie całkowicie lub posiadają elementy wspólne. Jednak kilka systemów nie różniących się niczym dla użytkownika może przechodzić przez zupełnie odmienne procesy budowy i wdrażania. Odmienne operacje z czasem zaczynają się nawarstwiać, przenikać, zmieniać, a niektóre po prostu zostają zapomniane.

 

Nowoczesna rozwijająca się firma tworząca oprogramowanie potrzebuje wyznaczonego modelu działania by nie pogrążyć się w chaosie. Tu pada wybór metodologii, którą najlepiej będzie dopasować do aktualnych procesów, biorąc pod uwagę dostępne zasoby i cel jaki chcemy osiągnąć.

 

O ciągłym wydawaniu aplikacji

 

Rosnąca ilość aplikacji zwiększa ilość pracy potrzebną do ich aktualizacji z repozytorium. Jest to praca zarówno dla developera jak i administratora systemu, na którym jest zainstalowana. Każda aktualizacja wymaga dodatkowo testów poprawności jej działania.

 

Chcemy jednak wydawać szybciej, częściej i pewniej. Potrzebujemy użyć w tym przypadku narzędzia Continous Integration / Continous Deployment w skrócie CI/CD. Narzędzie ciągłej integracji pozwoli nam automatycznie sprawdzić zmiany wykonane przez programistę pod kątem integralności z obecnym wydaniem. Aplikacja po każdej zmianie dokonanej w repozytorium zostanie ponownie zbudowana oraz będzie weryfikowana czy działa poprawnie.

 

Gdy testy zakończą się pozytywnie przechodzimy do ciągłego wydawania aplikacji CD. Proces polega na automatycznym przekazywaniu paczki z oprogramowaniem do Chmury, czyli zestawu usług, które uruchomią nasz program i podłącza go do wskazanych dodatkowych zasobów np. baza danych lub wyjście na świat w postaci adresu www.

 

O środowiskach na żądanie

 

Wirtualizacja serwerów, czyli emulowanie pracy maszyny fizycznej pozwala na zapisanie jej stanu w postaci plików konfiguracyjnych. Pliki te można również zapisać w repozytorium GIT. W ten sposób mamy kolejną informację o naszym systemie. Na serwerze posiadamy również różne usługi niezbędne do uruchomienia naszych aplikacji, bądź też dostarczające informacje o adresach sieciowych, uprawnieniach dostępu, czy serwujące usługi plikowe. Stan każdej z tych usług również jest ściśle określony plikami konfiguracyjnymi.

 

Posiadając dane określające system wirtualny oraz dane o znajdujących się na nim usługach, możemy stworzyć zestaw reguł, dzięki którym opisane środowisko możemy wdrażać w wybranym miejscu i czasie. Jest to operacja dostarczania środowiska na żądanie, nazywana IAAS ( Infrastructure as a Service). Do wykonania takich operacji niezbędne są narzędzia automatyzujące, takie jak Ansible, Terraform, Puppet.

 

Definicja GitOps? 

 

GitOps jest paradygmatem lub inaczej zbiorem najlepszych praktyk wskazujących jak wykorzystywać repozytoria Git do wykonywania operacji. Polega to na określeniu potrzeb operacyjnych, które powinny być w sposób ciągły dostarczane wybranymi mechanizmami.

Aby podążać drogą GitOps należy zastosować się do trzech podstawowych reguł:

  • GIT jest jedynym źródłem prawdy o systemie,
  • GIT jest jedynym miejscem, gdzie wykonujemy operacje (tworzenia, zmiany, usuwania) na wszystkich środowiskach,
  • Wszystkie zmiany są udokumentowane.

 

Jak zastosować GitOps?

 

Chcąc spełnić założenia paradygmatu główną wytyczną jest repozytorium Git. W Mentax repozytorium serwuje aplikacja GitLab. Jest to nie tylko narzędzie do kontroli wersji, ale zostało wzbogacone o możliwości ciągłego wdrażania i integracji usług CI/CD. Jest to miejsce, gdzie trzymamy wszystkie projekty, testujemy, budujemy i wydajemy. Poniższy schemat przedstawia przykładowy cykl życia aplikacji.

 

 

Aby umożliwić automatyczne wdrażanie stworzyliśmy szereg serwerów wirtualnych tworzących klaster Docker Swarm. Są w nim umieszczone usługi GitLab Runner, które integrują, wyzwalają narzędzia CI\CD.

 

GitOps zakłada, że wszystkie zmiany w systemach są udokumentowane. Niezbędne jest więc, narzędzie do budowania środowisk. W Mentax analizując istniejącą infrastrukturę została wybrana usługa Ansible. Dane konfiguracyjne usług zapisane w formacie YML trafiają do repozytorium GIT. Mamy więc, dostępną historię zmian wprowadzanych na systemach i możemy powielać te ustawienia. Ansible został rozszerzony o narzędzie do automatycznego wyzwalania reguł w nim zawartych AWX. W ten sposób mamy pewność, że zmiana w repozytorium została poprawnie wdrożona do wskazanej części infrastruktury.

 

Do zadań AWX należy między innymi zarządzanie użytkownikami, instalowanie i aktualizowanie usług, zarządzanie certyfikatami.

 

Do repozytorium GitLaba możemy zapisywać konfiguracje z różnych aplikacji więc, aby posiadać w nim całości konfiguracji systemów umieściliśmy też ustawienia serwerów DNS, PROXY, Active Directory.

 

W ten sposób spełniony został warunek GitOps “GIT jest jedynym miejscem gdzie wykonujemy operacje”.

 

Na poniższym schemacie przedstawiony jest cykl wdrażania zmian aplikacji i konfiguracji.

 

Autor: Radosław Rewinkowski


Opublikowano:

Mentax na Facebook'u