Zarządzanie konfiguracją
Jak zarządzanie konfiguracją pomaga zespołom budować solidne i stabilne systemy
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.
Wypróbuj Compass bezpłatnie
Ulepsz środowisko programistyczne, skataloguj wszystkie usługi i popraw kondycję oprogramowania.
Czym jest zarządzanie 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ą?
materiały pokrewne
Porównanie mikrousług z architekturą monolityczną
POZNAJ ROZWIĄZANIE
Ulepsz swoje środowisko programistyczne dzięki narzędziu 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ą
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.
Udostępnij ten artykuł
Następny temat
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.