Co oferuje ApplicationSet?
W poprzednim wpisie na temat ArgoCD, opowiedziałem o tym do czego służy to narzędzie i jak je skonfigurować. Dzisiaj postaram się pokazać jak Argo adresuje problemy:
- wdrażania aplikacji na wiele klastrów
- wdrażanie wielu aplikacji bazując na konfiguracji w monorepo
- instalacji aplikacji multitenant
Mechanizmem pozwalającym rozwiązać powyższe problemy jest ApplicationSet. Domyślna instalacja ArgoCD zawiera dodatkowy controller, który dodaje wsparcie dla CRD (custom resource definition), jakim jest ApplicationSet. Ten nowy zasób pozwala na generowanie zbioru aplikacji za pomocą 7 predefiniowanych generatorów. Kilka przykładowych generatorów:
- list generator-bazuje na stałej liście klucz-wartość wpisanych w yaml-u (świetny przykład użycia jest w dokumentacji)
- cluster generator-bazuje na konfiguracji klastrów, jaką dodaliśmy do ArgoCD
- git generator-bazuje na projekcie git, który zawiera konfigurację wielu aplikacji
- matrix generator-łączy wykorzystanie dwóch lub więcej generatorów
Korzystając z powyższych generatorów możemy automatycznie wygenerować konfigurację aplikacji, jaką zrozumie ArgoCD. Potrafi to zaautomatyzować i ułatwić pracę przy bardziej skomplikowanej infrastrukturze.
Wdrożeniu wielu aplikacji z mono repo
W celu skorzystania z generatora aplikacji opartego o git utworzyłem w projekcie na git folder application-set-demo
w którym znajduje się konfiguracji zbioru aplikacji:
1 | apiVersion: argoproj.io/v1alpha1 |
Konfiguracja ta sięga do katalogu application-set-demo/apps
i wyszukuje w nim folderów z aplikacji. Mogą tam być wszystkie wspierane przez ArgoCD formaty (np. Kubernetes resource, Helm, Kustomize). Dla każdej z aplikacji, jaką ArgoCD znajdzie, zostanie utworzona konfiguracja, która pozwoli zarządzać aplikacją z poziomu ArgoCD. W moim przypadku w apps są dwa katalogi some-app
i another-app
w którym znajduje się plik z konfiguracją deploymentu kubernetes:
1 | apiVersion: apps/v1 |
Tak więc dla aplikacji some-app
i another-app
ApplicationSet wygeneruje konfigurację korzystając z szablonu, jaki został dostarczony w yamlu. Taka wygenerowana konfiguracja będzie wyglądać następująco:
1 | apiVersion: argoproj.io/v1alpha1 |
Żeby wszystko ruszyło zostało nam tylko podpiąć nasz zbiór aplikacji pod ArgoCD z wykorzystaniem CLI:
1 | argocd app create application-set-demo \ |
Na konsoli powinniśmy zobaczyć wszystkie aplikacje, jakie znajdują się w katalogu apps:
W analogiczny sposób możemy generować zbiory aplikacji dla wielu klastrów, czy też robić multitenant deployment. Proste a zarazem bardzo użyteczne narzędzie.