Nie możesz wykonywać GitOps, dopóki nie dodasz` git `

(3 lutego 2020 r.)

Ten artykuł wyjaśnia, w jaki sposób rozwiązałem kilka problemów związanych z wprowadzeniem mojego początkowego środowiska i konfiguracji do Git – pierwsze kroki do GitOps.

Od dłuższego czasu chciałem korzystać z GitOps, ale zawsze jest to trudne wiedzieć, od czego zacząć. Czy używam Jenkins Jobs – dobrze znam Jenkins? To trochę stara szkoła, może powinienem użyć Ansible Tower. Słyszałem różne rzeczy o ArgoCD i wielu innych. Prawda jest taka, że ​​nie mogę nic zrobić, dopóki moje środowisko i konfiguracja nie zostaną zapisane w Gicie.

Pod koniec tego artykułu Mam nadzieję, że nauczysz się kilku moich wskazówek, aby rozpocząć.

Co uzyskam, używając Git do konfiguracji serwera?

  1. Wszystkie zmiany są rejestrowane & śledzone. Kto to zrobił zmiana? Gdy? itd.
  2. Wszystkie zmiany są wersjonowane. Ups, ostatnia zmiana coś zepsuła. Łatwe do przywrócenia.
  3. Bezpłatna kopia zapasowa. Po prostu sklonuj repozytorium do wielu lokalizacji.
  4. Konfiguracje łatwe do ponownego użycia. Właśnie zainstalowałem nowy serwer i chcesz używać 90\% typowej konfiguracji Apache. Po prostu sklonuj repozytorium i skopiuj plik.

Utwórz repozytorium Git – prywatne, ale dostępne

Moim zamiarem jest przechowywanie wszystkich moich plików konfiguracyjnych dla dnsmasq, httpd, i tak dalej, wszystko w Git. Konfiguracja jest wrażliwa, w tym nazwy użytkowników i hasła, więc oczywiście publiczne repozytorium GitHub nie jest najlepszym pomysłem. Jeśli chcesz zapłacić za prywatne repozytorium, zrób to. Zdecydowałem się utworzyć repozytorium na dedykowanym serwerze, który mam w publicznym Internecie, aby wszystkie inne serwery mogły je uzyskać.

cd /opt/ 
git init --bare ServerConfiguration.git

Nazwy katalogów oparte na DNS – łatwe do przeglądania

Chcę ułatwić sortowanie i strukturę mojej konfiguracji. Zdecydowałem się użyć nazw DNS serwerów dla katalogów . Zrobiłem to na swoich serwerach domowych;

git clone ssh://[email protected]/opt/ServerConfiguration.git
cd ServerConfiguration.git
mkdir -p example.com/server1/{httpd,dnsqmasq}

Po co przechowywać to w /opt? Zwykle używam tego katalogu do plików przechowywanych na serwerze, które są dla niego specyficzne. Jego zaletą jest to, że najczęściej jest to ten sam system plików, co / – co ułatwia łączenie plików. Przechodząc do następnego punktu;

Konfiguracja usług hardlinkowania w repozytorium Git

Możesz mieć oddzielne repozytorium Git na serwer lub nawet na usługę, ale bardzo szybko stanie się to niemożliwe do zarządzania. Raczej to repozytorium „ServerConfiguration” dla całego środowiska może z łatwością przechowywać konfigurację dla wielu różnych usług.

Jak więc możemy uzyskać Apache, dnsmasq i wszystkie inne usługi, aby z niego korzystać? Hardlinks to droga do zrobienia. Składnia to ln

ln /opt/ServerConfiguration/example.com/server1/httpd.conf /etc/httpd/conf/httpd.conf

Dlaczego nie dowiązania symboliczne? Cóż, zacząłem od dowiązań symbolicznych, ale odkryłem, że polityka SELinuksa dla rzeczy takich jak dnsmasq naprawdę skarżyła się na używanie pliku konfiguracyjnego poza oczekiwanym katalogiem. Wygląda na to, że SELinux pozwala dwóm oddzielnym dowiązaniom twardym mieć dwa oddzielne konteksty SELinuksa.

Łączenie symboliczne z konfiguracją wspólnej usługi

Mam kilka serwerów, które mają te same pliki konfiguracyjne. Katalog common ze względnymi linkami symbolicznymi działa tutaj dobrze.

cd /opt/ServerConfiguration 
mkdir -p example.com/common
cp /etc/httpd/conf/httpd.conf common/httpd.conf
ln -s "../common/httpd.conf" server1/httpd.conf
ln -s "../common/httpd.conf" server2/httpd.conf
...

Zatwierdzenie

Raz połączyłeś swoje pliki konfiguracyjne, nie zapomnij o git add i git commit swoich postępach.

cd /opt/ServerConfiguration
git add -A
git commit "Made some changes..."
git push

Zdobądź nawyk edytowania konfiguracji i dodawania, a następnie zatwierdzania zmian. Od czasu do czasu wypychaj te zmiany z powrotem na serwer źródłowy i ściągaj / aktualizuj w razie potrzeby. Uważam, że jest to zaraźliwe, a kiedy znajdę serwer, który nie jest pod kontrolą wersji konfiguracji Git, szybko zaczynam dodawać niezbędne konfiguracje do repozytorium.

Będzie to podstawa dla bardziej wyrafinowanych GitOps później w linia. Ale na razie ten proces ma już wiele zalet.

Jeśli szukasz samouczka, aby rozpocząć korzystanie z Git, bardzo polecam Git Book .

Gdzie mogę stąd przejść ?!

  1. Sklep production, test i configuration w różnych gałęziach i scal je między sobą.
  2. Wykonaj code reviews kiedy ludzie przesyłają – kto potrzebuje komitetu doradczego ds. zmian ?!
  3. Zapoznaj się z różnymi opcjami automatycznego stosowania tej konfiguracji podczas meldowania się – Jenkins Jobs, Ansible Tower, ArgoCD itp.

Zdjęcie: Min. rok na Unsplash