ArgoCD App-of-Apps: Jak efektywnie zarządzać aplikacjami w Kubernetes?
W świecie Kubernetes, zarządzanie rosnącą liczbą aplikacji i ich konfiguracjami staje się wyzwaniem. Tradycyjne podejścia często prowadzą do powielania konfiguracji i trudności w utrzymaniu spójności w różnych środowiskach (staging i production). Właśnie tutaj z pomocą przychodzi wzorzec App-of-Apps (aplikacja aplikacji) w ArgoCD, który pozwala na skalowalne zarządzanie całym ekosystemem aplikacji z jednego, centralnego miejsca.
Wzorzec ArgoCD App-of-Apps polega na tym, że jedna, główna aplikacja (parent application) zarządza cyklem życia wielu innych aplikacji (child applications). Zamiast konfigurować każdą aplikację z osobna, definiujemy je wszystkie w jednej, nadrzędnej aplikacji, która następnie synchronizuje i monitoruje ich stan. To kluczowy element podejścia GitOps z ArgoCD.
Architektura i struktura katalogów dla GitOps z ArgoCD
Aby w pełni wykorzystać wzorzec App-of-Apps, kluczowa jest przemyślana struktura katalogów w repozytorium Git. Umożliwia ona spójne definiowanie konfiguracji dla różnych środowisk.
.
├── app-of-apps
│ ├── values-production.yaml # Globalne wartości dla produkcji
│ └── values-staging.yaml # Globalne wartości dla stagingu
├── apps
│ ├── cert-manager
│ │ ├── Chart.yaml # Definicja Helm chart dla cert-manager
│ │ ├── values-production.yaml # Wartości dla produkcji
│ │ └── values-staging.yaml # Wartości dla stagingu
│ └── fluent-bit
│ ├── Chart.yaml # Definicja Helm chart dla fluent-bit
│ ├── values-production.yaml # Wartości dla produkcji
│ └── values-staging.yaml # Wartości dla stagingu
W tej strukturze:
app-of-apps
: Katalog zawiera główne plikivalues.yaml
dla każdego środowiska. Te pliki kontrolują, które aplikacje i z jakimi parametrami mają zostać wdrożone w danym środowisku.apps
: Katalog, w którym znajdują się definicje (w moim przypadku Helm Charts) każdej z aplikacji (child applications). Każda aplikacja ma swój własny podkatalog z plikiemChart.yaml
i specyficznymi plikamivalues.yaml
dla różnych środowisk.
Konfiguracja Helm Chart jako zależności
W naszym przykładzie, cert-manager jest wdrażany jako Helm Chart, ale zamiast kopiować cały kod, definiujemy go jako zależność (dependencies) w pliku Chart.yaml
:
apiVersion: v2
name: cert-manager
description: Helm chart for cert-manager
type: application
version: 0.1.0
appVersion: 1.0.0
dependencies:
- name: cert-manager
alias: certmanager
version: 1.16.2
repository: https://charts.jetstack.io
Dzięki temu podejściu, nasza główna aplikacja ArgoCD instaluje cert-managera
z oficjalnego repozytorium Jetstack. My natomiast, w pliku values-production.yaml
, możemy łatwo dostosować jego konfigurację za pomocą aliasu certmanager
:
certmanager:
namespace: cert-manager
crds:
enabled: true
replicaCount: 2
podDisruptionBudget:
enabled: true
To bardzo elastyczne zarządzanie aplikacjami, ponieważ pozwala na dostosowanie konfiguracji zewnętrznego charta bez modyfikowania go bezpośrednio, a jednocześnie utrzymanie wszystkich specyficznych dla środowiska parametrów w jednym miejscu.
Podsumowanie i korzyści
Używanie wzorca App-of-Apps w ArgoCD, w połączeniu z dobrze zorganizowaną strukturą katalogów, przynosi liczne korzyści dla Twojego zarządzania infrastrukturą:
- Standaryzacja: Konfiguracje dla różnych środowisk są spójne i łatwe do zarządzania.
- Łatwość zarządzania: Zmiany wprowadzane są w jednym miejscu, co minimalizuje błędy.
- Skalowalność: Dodawanie nowych aplikacji jest proste.
- Automatyzacja: ArgoCD automatycznie wykrywa i wdraża zmiany, zapewniając spójność stanu klastra.