Close

Zarządzanie konfiguracją

Jak zarządzanie konfiguracją pomaga zespołom budować solidne i stabilne systemy

Ian Buchanan — zdjęcie
Ian Buchanan

Główny inżynier ds. rozwiązań


W latach 50. XX wieku Departament Obrony Stanów Zjednoczonych opracował zasady zarządzania technicznego służące do śledzenia zmian w rozwoju złożonych systemów. Poszczególne iteracje tego systemu nosiły przez dłuższy czas dość techniczne nazwy — aż do 2001 roku, gdy Departament opublikował ujednolicony przewodnik, który ustanowił system zarządzania technicznego zwany „zarządzaniem konfiguracją”. Obecnie zarządzanie konfiguracją jest wykorzystywane nie tylko przez Departament Obrony, ale także w rozwoju oprogramowania, zarządzaniu usługami IT, inżynierii lądowej i przemysłowej oraz wielu innych branżach.

Czym jest zarządzanie konfiguracją?


Schemat zarządzania konfiguracją

Zarządzanie konfiguracją to proces inżynierii systemów służący do zapewniania spójności atrybutów produktu przez cały okres jego eksploatacji. W świecie technologii zarządzanie konfiguracją stanowi proces zarządzania IT, który polega na śledzeniu poszczególnych elementów konfiguracji systemu IT. Systemy IT składają się z zasobów IT różniących się od siebie pod względem szczegółowości. Zasobem IT może być element oprogramowania, serwer czy też ich cały klaster. Poniżej skupiamy się na zarządzaniu konfiguracją bezpośrednio w odniesieniu do zasobów oprogramowania IT oraz CI/CD.

Zarządzanie konfiguracją oprogramowania to proces inżynierii systemów, który śledzi i monitoruje zmiany w metadanych konfiguracji systemu oprogramowania. W procesie tworzenia oprogramowania zarządzanie konfiguracją jest powszechnie stosowane razem z kontrolą wersji i infrastrukturą CI/CD. Niniejszy post poświęcony jest jego współczesnym zastosowaniom i wykorzystaniu w środowiskach programistycznych CI/CD zgodnych z duchem Agile.

Jakie jest znaczenie zarządzania konfiguracją?


ikona magazynu kodu
materiały pokrewne

Porównanie mikrousług z architekturą monolityczną

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Zarządzanie komponentami za pomocą rozwiązania Compass

Zarządzanie konfiguracją ułatwia zespołom inżynierskim budowanie wydajnych i stabilnych systemów dzięki wykorzystaniu narzędzi, które automatycznie zarządzają aktualizacjami danych konfiguracji i monitorują je. Złożone systemy oprogramowania składają się z komponentów o różnej wielkości i złożoności. W ramach konkretniejszego przykładu rozważmy architekturę mikrousług. Każda usługa w architekturze mikrousług korzysta z metadanych konfiguracji do celów rejestracji i inicjalizacji. Oto kilka przykładów metadanych konfiguracji oprogramowania:

  • Specyfikacje przydziałów zasobów sprzętu obliczeniowego dla procesora, pamięci RAM itp.
  • Punkty końcowe określające połączenia zewnętrzne z innymi usługami, bazami danych lub domenami
  • Informacje tajne, np. hasła i klucze szyfrujące

Czasem do tych wartości konfiguracyjnych podchodzi się bez namysłu, co prowadzi do chaosu i rozproszenia. To tak, jakby po biurze porozklejane były liczne karteczki samoprzylepne z hasłami i adresami URL. Zarządzanie konfiguracją rozwiązuje ten problem, tworząc jedno „źródło informacji” z centralną lokalizacją dla danych konfiguracyjnych.

Git to znakomita platforma do zarządzania danymi konfiguracyjnymi. Przenoszenie danych konfiguracyjnych do repozytorium Git umożliwia kontrolę wersji i wykorzystanie repozytorium jako źródła informacji. Kontrola wersji rozwiązuje również inny problem: nieoczekiwane zmiany. Zarządzanie nieoczekiwanymi zmianami za pomocą przeglądu kodu i kontroli wersji pozwala skutecznie zminimalizować przestoje.

Wartości konfiguracyjne są często dodawane, usuwane lub modyfikowane. Bez kontroli wersji może to prowadzić do komplikacji. Może się zdarzyć, że jeden członek zespołu dostosuje wartości alokacji zasobów tak, aby oprogramowanie działało sprawniej na jego osobistym laptopie. Jeśli oprogramowanie zostanie później wdrożone do środowiska produkcyjnego z tą zmienioną konfiguracją, wyniki mogą wypaść poniżej oczekiwań lub wręcz może dojść do awarii.

Kontrola wersji i zarządzanie konfiguracją rozwiązują ten problem za sprawą zwiększonej widoczności w zakresie zmian ustawień. Każda edycja jest śledzona przez system kontroli wersji, co umożliwia wszystkim członkom zespołu zapoznanie się z pełną historią zmian.

Kontrola wersji umożliwia też szybkie cofnięcie zmian, co pozwala zapobiec nieoczekiwanym przerwom w działaniu. Stan systemu może zostać błyskawicznie przywrócony do ostatniej stabilnej wersji.

Jak zarządzanie konfiguracją łączy się z DevOps, CI/CD i metodologią Agile


Dane konfiguracyjne bywały w przeszłości trudne do opanowania i często traktowane z dystansem. Nie miały postaci kodu, więc nie podlegały automatycznie kontroli wersji, i nie były danymi pierwszej klasy, więc nie były przechowywane w głównej bazie danych. Tradycyjna i małoskalowa administracja systemem odbywa się zazwyczaj za pomocą zbioru skryptów i procesów o charakterze doraźnym. W efekcie nieraz dochodzi do przeoczenia danych konfiguracyjnych, choć te są kluczowe dla działania systemu.

Powstanie rozwiązań chmurowych doprowadziło do opracowania i przyjęcia nowych wzorców zarządzania infrastrukturą. Złożonymi architekturami chmurowymi zarządza się i je wdraża za pomocą plików danych konfiguracyjnych. Te nowe platformy chmurowe pozwalają zespołom na określanie potrzebnych im zasobów sprzętowych i połączeń sieciowych za pośrednictwem plików danych opartych na językach czytelnych dla człowieka i maszyn, takich jak YAML. Pliki zostają następnie odczytane, a infrastruktura dostarczona w chmurze. Ten wzorzec nosi nazwę „infrastruktura jako kod” (IaC).

Zarządzanie konfiguracją DevOps

We wczesnych latach rozwoju aplikacji internetowych zarządzanie zasobami sprzętowymi i systemami odbywało się głównie ręcznie. Administratorzy systemów zmagali się z danymi konfiguracyjnymi w ramach ręcznego udostępniania i zarządzania zasobami sprzętowymi.

Zarządzanie konfiguracją jest kluczową częścią cyklu życia DevOps. Konfiguracja DevOps stanowi ewolucję roli administratora systemów, wprowadzającą automatyzację do procesów zarządzania infrastrukturą i wdrażania.

Konfiguracja DevOps przenosi również odpowiedzialność za administrację systemami na grunt inżynierii oprogramowania. Firmy wykorzystują ten schemat do umożliwienia programistom ubiegania się o potrzebne zasoby i aprowizowania na żądanie. Pozwala to uniknąć wąskiego gardła zależności organizacyjnych, które następuje, gdy zespół programistów musi czeka na przydzielenie zasobów przez osobny zespół administracji systemem.

Zarządzanie konfiguracją CI/CD

Zarządzanie konfiguracją CI/CD wykorzystuje procesy przeglądu kodu oparte na żądaniach ściągnięcia kodu do zautomatyzowania wdrażania zmian w kodzie w obrębie aktywnego systemu oprogramowania. Ten sam przepływ może zostać zastosowany do zmian w konfiguracji. CI/CD można skonfigurować tak, aby zatwierdzone żądania zmiany konfiguracji mogły zostać natychmiast wdrożone w aktywnym systemie. Doskonałym przykładem tego procesu jest przepływ pracy GitOps.

Zarządzanie konfiguracją w duchu Agile

Zarządzanie konfiguracją umożliwia zespołom Agile klarowną priorytetyzację prac konfiguracyjnych. Zaliczają się do nich takie czynności i zadania, jak:

  • Aktualizacja produkcyjnych certyfikatów SSL
  • Dodanie nowego punktu końcowego bazy danych
  • Zmiana hasła dla usług poczty elektronicznej środowiska programistycznego, przejściowego i produkcyjnego
  • Dodanie kluczy API w ramach integracji zewnętrznej

Za sprawą gotowej platformy zarządzania konfiguracją zespoły otrzymują wgląd w zakres prac wymaganych w ramach zadań konfiguracyjnych. Prace związane z zarządzaniem konfiguracją stanowią zależności dla innych prac oraz element sprintów Agile.

Narzędzia do zarządzania konfiguracją


Narzędzia do zarządzania konfiguracją: Terraform, Saltstack, Puppet, Git, Chef, Ansible i Docker

Git

Git to najpopularniejszy w branży system kontroli wersji służący do śledzenia zmian w kodzie. Dodanie danych zarządzania konfiguracją do repozytorium Git razem z kodem umożliwia kompleksowy podgląd kontroli wersji w zakresie całego projektu. Git stanowi podstawowe narzędzie do zarządzania konfiguracją wyższego poziomu. Poniższy wykaz pozostałych narzędzi opracowano przy założeniu ich przechowywania w repozytorium Git i korzystania z kontroli wersji Git.

Docker

Narzędzie Docker wprowadziło koncept konteneryzacji, stanowiącej zaawansowaną formę zarządzania konfiguracją. Docker opiera się na plikach konfiguracyjnych o nazwie Dockerfiles zawierających listę poleceń, które zostają ocenione w celu odtworzenia oczekiwanej migawki stanu systemu operacyjnego. Docker tworzy kontenery na podstawie plików Dockerfiles będących migawkami wstępnie skonfigurowanej aplikacji. Pliki Dockerfiles są przekazywane do repozytorium Git dla potrzeb śledzenia wersji i wymagają dodatkowego zarządzania konfiguracją celem wdrożenia do infrastruktury.

Terraform

Terraform to platforma zarządzania konfiguracją open-source autorstwa HasiCorp. Narzędzie to używa IaC do aprowizowania i zarządzania klastrami, infrastrukturą chmury lub usługami. Terraform obsługuje Amazon Web Services (AWS), Microsoft Azure oraz inne platformy chmurowe. Każda z nich odznacza się własnym sposobem odwzorowania i interfejsem dla wspólnych komponentów infrastruktury, takich jak serwery, bazy danych i kolejki. Terraform wprowadza warstwę abstrakcji w zakresie narzędzi konfiguracyjnych dla platform chmurowych, co umożliwia zespołom tworzenie plików będących powtarzalnymi definicjami ich infrastruktury.

Ansible, Salt Stack, Chef, Puppet

Ansible, Salt Stack, Chef i Puppet to ramy automatyzacji IT. Automatyzują wiele tradycyjnych procesów administracji systemem. Każda z nich wykorzystuje serię plików z danymi konfiguracyjnymi — zwykle w postaci YAML lub XML — które są analizowane przez plik wykonywalny.

Pliki danych konfiguracyjnych określają sekwencję działań, które należy podjąć w celu skonfigurowania systemu. Działania te są następnie uruchamiane przez plik wykonywalny. Pliki wykonywalne różnią się pod względem języka w zależności od systemu — Ansible i Salt Stack są oparte na Pythonie, a Chef na Ruby.Ten przepływ pracy jest podobny do uruchamiania ad hoc skryptów powłoki, ale oferuje bardziej uporządkowane i dopracowane doświadczenie za sprawą ekosystemów odpowiednich platform. Narzędzia te są czynnikiem umożliwiającym automatyzację potrzebną do osiągnięcia CI/CD.

Jak wdrożyć zarządzanie konfiguracją


Identyfikacja

Pierwszym działaniem w kierunku zarządzania konfiguracją jest gromadzenie informacji. Dane konfiguracyjne powinny zostać zebrane ze środowiska programistycznego, przejściowego i produkcyjnego oraz skompilowane dla potrzeb wszystkich używanych komponentów i usług. Wszelkie tajne dane, np. hasła i klucze, powinny zostać zidentyfikowane, a następnie bezpiecznie zaszyfrowane. Na tym etapie dane konfiguracyjne powinny być zorganizowane w pliki danych mogące pełnić funkcję centralnego źródła informacji.

Punkt odniesienia

Po tym, jak dane konfiguracyjne zostaną zebrane i zorganizowane, może zostać ustanowiony punkt odniesienia. Konfiguracyjny punkt odniesienia to określony stan ustawień, który umożliwia bezbłędne działanie danego oprogramowania. Punkt odniesienia jest zwykle tworzony poprzez sprawdzenie i zatwierdzenie ustawień działającego środowiska produkcyjnego.

Kontrola wersji

Twój projekt powinien korzystać z systemu kontroli wersji. W przeciwnym razie zainstaluj Git, zainicjuj repozytorium dla projektu i dodaj do niego pliki danych konfiguracyjnych. Drobna uwaga przed dodaniem danych konfiguracyjnych do repozytorium: upewnij się, że wszelkie dane tajne, takie jak hasła czy klucze, są zaszyfrowane za pomocą zewnętrznego klucza. Przypadkowe przekazanie danych tajnych do repozytorium może stanowić ogromne zagrożenie. Muszą zostać usunięte z historii repozytorium, inaczej mogą zostać wykorzystane przez osoby niepowołane.

audyt

Uporządkowanie i dodanie danych konfiguracyjnych do repozytorium umożliwia współpracę i wgląd w konfigurację systemu. Do plików danych konfiguracyjnych może zostać zastosowany przepływ pracy żądań ściągnięcia kodu wykorzystywany przez zespoły programistyczne do przeglądu i edycji kodu. Na tej podstawie powstaje system audytu i księgowości. Wszelkie zmiany zastosowane w konfiguracji muszą zostać przejrzane i zaakceptowane przez zespół. To wprowadza aspekt odpowiedzialności oraz widoczność zmian w obrębie konfiguracji.

Eksploatacja systemów IT i CMDB


Do tej pory omawialiśmy zarządzanie konfiguracją, ponieważ dotyczy ono zasobów oprogramowania w środowiskach Agile i CI/CD. Zespoły ds. eksploatacji systemów IT również aktywnie zarządzają konfiguracją i robią to w bazie danych zarządzania konfiguracją lub inaczej CMDB. CMDB zawiera informacje o sprzęcie, oprogramowaniu i komponentach sieciowych oraz relacjach między nimi. Zespoły ds. eksploatacji systemów IT zajmują się współzależnościami, licencjami, umowami oraz usługami i budżetem wymaganymi do utrzymania wszystkiego w ruchu. Dzięki zespołom ds. eksploatacji systemów IT zarządzającym współzależnościami i zespołom ds. oprogramowania zarządzającym konfiguracją jako kodem organizacje mogą cieszyć się stabilnymi systemami i wyjątkowym czasem pracy bez przestojów.

Wnioski…


Zarządzanie konfiguracją jest niezbędnym narzędziem do zarządzania złożonymi systemami oprogramowania. Brak zarządzania konfiguracją może powodować poważne problemy w zakresie wydajności, czasu działania i możliwości skalowania systemu. Wiele współczesnych narzędzi do tworzenia oprogramowania ma wbudowane funkcje zarządzania konfiguracją. Bitbucket oferuje zaawansowany system do zarządzania konfiguracją oparty na przepływach pracy żądań ściągnięcia kodu Git i pipeline'ach CI/CD.

Ian Buchanan
Ian Buchanan

Ian ma szerokie i bogate doświadczenie zarówno w Javie jak i .NET, ale najbardziej znany jest jako mistrz metodyki Agile w dużych przedsiębiorstwach. Obecnie skupia się na rozwijającej się kulturze DevOps i narzędziach umożliwiających lepszą ciągłą integrację, dostarczanie i analizę danych. W trakcie swojej kariery z powodzeniem zarządzał narzędziami do tworzenia oprogramowania dla przedsiębiorstw we wszystkich fazach ich cyklu życia. Udało mu się doprowadzić do usprawnienia procesów w całej organizacji, czego efektem jest większa produktywność, wyższa jakość i większe zadowolenie klientów. Tworzył wielonarodowe zespoły, które cenią sobie samorozwój i samodzielną organizację. Kiedy nie wygłasza prelekcji ani nie programuje, Ian oddaje się swoim pasjom związanym z parserami, metaprogramowaniem i językami dziedzinowymi. Obserwuj Iana: @devpartisan.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up