ArgoCD – Zarządzanie aplikacjami z wielu klastrów w jednym miejscu

W tym artykule zajmiemy się jednym z tematów GitOps, czyli zarządzaniem wieloma klastrami Kubernetes poprzez narzędzie ArgoCD.

W ramach artykułu poruszymy zagadnienia:

  • Zalety zarządzania aplikacjami z wielu klastrów w jednym miejscu,
  • ArgoCD – Instalacja CLI,
  • ArgoCD – Jak dodać klaster Kubernetes,
  • Co można zrobić więcej?

W dwóch poprzednich artykułach mojego autorstwa, wyjaśniłem, jak zautomatyzować ścieżkę zmian w projekcie — od wypchania kodu do repozytorium do publikacji usługi na k8s (DevOps + GitOps przy użyciu GitLab i ArgoCD – część pierwsza (CI) ; DevOps + GitOps przy użyciu GitLab i ArgoCD – część druga (CD)). W tym materiale natomiast skupię się na tym, jak wygląda zarządzanie aplikacjami z wielu klastrów w jednym miejscu. Temat równie istotny co poprzedni, tak więc zaczynamy…

Zalety zarządzania aplikacjami z wielu klastrów w jednym miejscu

Na samym początku odpowiedzmy sobie  na pytanie, co nam daje zarządzanie wieloma klastrami w jednym miejscu. Plusy, które zauważyłem, korzystając z takiego rozwiązania:

  • Efektywność i szybkość: Kontrola wszystkich aplikacji z jednego punktu eliminuje konieczność indywidualnego logowania się do każdego klastra, co przyspiesza procesy zarządzania i poprawia efektywność.
  • Jednolitość: Wszystkie aplikacje mogą być zarządzane w jednolity sposób, nawet jeśli są wdrażane na różnych klastrach. To pomaga utrzymać standardy (bezpieczeństwa, monitorowania, logowania itd.) i unikać błędów.
  • Przejrzystość: Z jednego miejsca można łatwo monitorować stan wszystkich aplikacji na wszystkich klastrach. Ułatwia to identyfikowanie problemów i szybkie reagowanie na nie.
  • Bezpieczeństwo: Centralizacja zarządzania pozwala na efektywniejsze egzekwowanie polityk bezpieczeństwa i upewnia się, że wszystkie aplikacje są zgodne z pożądanymi ustaleniami.
  • Skalowalność: Dodawanie dodatkowych klastrów i aplikacji do systemu zarządzania staje się prostsze i bardziej skalowalne, zapewniając łatwość obsługi rosnącej infrastruktury.
  • Zarządzanie konfiguracją: Zmiany konfiguracji aplikacji można łatwo propagować na wszystkie klastry, zapewniając spójność i upraszczając zarządzanie.
  • Kontrola wersji: Dzięki centralnemu zarządzaniu, zmiany w aplikacjach mogą być skontrolowane i zarejestrowane dla celów audytu, umożliwiając łatwe śledzenie zmian i rollbacki w razie potrzeby.

ArgoCD – Przypadki użycia wielu klastrów w ramach jednej instancji ArgoCD

Decyzja o podłączeniu wielu klastrów do jednej instancji i które to mogą być klastry,  jest uzależniona od wielu czynników. Takimi czynnikami są między innymi:

  • Skala przedsiębiorstwa – czym większa skala, tym więcej może być klastrów, które warto zarządzać z jednego miejsca.
  • Spójność polityk bezpieczeństwa – organizacja może mieć wspólną politykę dla wielu wielu klastrów i nie chce duplikować konfiguracji na wszystkich klastrach.
  • Multitenancy – organizacja może mieć wielu klientów, którzy są rozproszeni na wielu klastrach, ale ich konfiguracja jest bardzo podobna albo i taka sama (tylko że sparametryzowana).

? Wiele środowisk – organizacja może utrzymywać instancję produktu per klaster i wtedy bardzo dobrze sprawdza się jedna instancja ArgoCD na produkt, jako centralne miejsce do zarządzania produktem.

ArgoCD wiele środowisk

Co jeżeli to nie wystarczy? 

W niektórych przypadkach, gdy  skala przedsiębiorstwa lub produktu jest już bardzo duża, można zdecydować się na utrzymywanie wielu instancji ArgoCD np. pod każdy produkt. Takim przypadkiem można zarządzać dodatkowym narzędziem, które opisałem poniżej.

ArgoCD – Instalacja CLI

Abyśmy mogli zarządzać aplikacjami w ArgoCD z różnych klastrów, musimy podłączyć nowe klastry do istniejącej instancji ArgoCD. Jest kilka sposobów na wykonanie tego zadania, w zależności od systemu operacyjnego. Poniżej znajduje się link, który zawiera wszystkie niezbędne informacje na temat instalacji CLI: https://argo-cd.readthedocs.io/en/stable/cli_installation/

ArgoCD CLI pozwala nam na pisanie skryptów, integrację z narzędziami zewnętrznymi oraz dostęp do zaawansowanych funkcji. Oprócz dodania klastra, CLI ArgoCD oferuje wiele innych możliwości, w tym udostępnia komendy:

  • account: Zarządzanie ustawieniami konta;
  • admin: Zawiera zestaw komend przydatnych dla administratorów Argo CD;
  • app: Zarządzanie aplikacjami;
  • appset: Zarządzanie zestawami aplikacji;
  • cert: Zarządzanie certyfikatami repozytorium i wpisami hostów SSH;
  • cluster: Zarządzanie poświadczeniami klastra;
  • context: Przełączanie się między kontekstami;
  • gpg: Zarządzanie kluczami GPG używanymi do weryfikacji podpisu;
  • proj: Zarządzanie projektami;
  • repo/repocreds: Zarządzanie parametrami połączenia z repozytorium.

Korzystanie z CLI ArgoCD daje pełną kontrolę nad zarządzaniem i utrzymaniem klastrów Kubernetes w jednym miejscu. Można skryptować i automatyzować operacje, integrować CLI z narzędziami zewnętrznymi oraz korzystać z zaawansowanych funkcji.

ArgoCD – Jak dodać klaster Kubernetes

Jak już mamy zainstalowane CLI zostały tylko dwa kroki do zakończenia dodawania klastra do instancji ArgoCD. Należy zalogować się do ArgoCD i zarejestrować klaster.

Krok I. Logowanie za pomocą interfejsu wiersza poleceń (CLI)

Korzystając z nazwy użytkownika i hasła, zaloguj się na adres IP lub nazwę hosta Argo CD:

argocd login <ARGOCD_SERVER>

Krok II. Rejestracja klastra

1. Najpierw wyświetl listę kontekstów klastrów w bieżącym kubeconfig:

kubectl config get-contexts -o name

2. Wybierz nazwę kontekstu z listy i podaj ją jako argument dla argocd cluster add CONTEXTNAME. Na przykład dla kontekstu wkontenerach wykonaj:

argocd cluster add wkontenerach

3. Powyższe polecenie instaluje ServiceAccount (argocd-manager) w przestrzeni nazw kube-system tego kontekstu kubectl i powiązuje konto usługi z rolą klastra na poziomie administratora. Argo CD używa tokenu konta usługi do wykonywania zadań zarządzania (np. wdrażanie/monitorowanie).

4. Teraz można sprawdzić, czy wybrany klaster został poprawnie dodany, listując wszystkie klastry poleceniem:

argocd cluster list

lub poprzez Web UI:

ArgoCD – Wybór klastra w aplikacji

Po dodaniu klastra do instancji ArgoCD możemy już go wybrać podczas konfiguracji aplikacji zarówno z poziomu Web UI:

jak i sposobem deklaratywnym wstawiając nazwę klastra (spec/destination/name):

   apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: wkontanerach-dev
  finalizers:
    - resources-finalizer.argocd.argoproj.io/foreground
spec:
  project: default
  source:
    path: envs/dev
    repoURL: <https://github.com/test/wkontanerach-deploy>
    targetRevision: HEAD
  destination:
    name: dev-cluster
    namespace: dev
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
      allowEmpty: false
    syncOptions:
      - PrunePropagationPolicy=foreground
      - Replace=false
      - PruneLast=false
      - Validate=true
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=false
      - ServerSideApply=true
      - RespectIgnoreDifferences=false

Możemy też podać url do klastra na którym ma być wdrożona aplikacja (spec/destination/server):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: wkontanerach-dev
  finalizers:
    - resources-finalizer.argocd.argoproj.io/foreground
spec:
  project: default
  source:
    path: envs/dev
    repoURL: <https://github.com/test/wkontanerach-deploy>
    targetRevision: HEAD
  destination:
    server: https://api.crc.testing:6443
    namespace: dev
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
      allowEmpty: false
    syncOptions:
      - PrunePropagationPolicy=foreground
      - Replace=false
      - PruneLast=false
      - Validate=true
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=false
      - ServerSideApply=true
      - RespectIgnoreDifferences=false

Co można zrobić więcej?

Jeśli w pewnym momencie zdecydujesz się nie tylko zarządzać klastrami w jednym miejscu, ale również zarządzać wieloma instancjami ArgoCD, możesz skorzystać z platformy codefresh.io. Jest to platforma DevOps, która oferuje wiele funkcji, w tym integrację z ArgoCD.

Korzystając z tego narzędzia, możesz skonfigurować i zarządzać wieloma instancjami ArgoCD w jednym miejscu. Dzięki temu będziesz mieć pełną kontrolę nad swoimi projektami, niezależnie od liczby klastrów i instancji ArgoCD.

Platforma ta umożliwia łatwe tworzenie i zarządzanie konfiguracją klastrów, a także automatyzację procesów wdrażania i aktualizacji aplikacji. Możesz skonfigurować powiązania między różnymi instancjami ArgoCD, dzięki czemu zmiany w kodzie będą automatycznie wdrażane na odpowiednich klastrach.

Dzięki integracji codefresh.io z ArgoCD możesz skupić się na rozwijaniu aplikacji, podczas gdy platforma zapewnia efektywne zarządzanie klastrami i procesami wdrażania. Możesz również korzystać z zaawansowanych funkcji, takich jak testowanie ciągłe, wersjonowanie i automatyczne skalowanie, aby zoptymalizować swoje procesy wdrażania.

Warto zaznaczyć, że narzędzie to oferuje również integrację z innymi narzędziami DevOps, takimi jak systemy kontroli wersji, monitorowanie aplikacji i narzędzia do zarządzania konfiguracją. Dzięki temu masz pełną elastyczność i kontrolę nad swoim środowiskiem DevOps.

Podsumowanie

ArgoCD oferuje efektywne rozwiązania dla zarządzania i utrzymania klastrów Kubernetes. Poprzez centralizację zarządzania, ArgoCD eliminuje konieczność logowania do każdego klastra, co przyspiesza procesy zarządzania i poprawia ich efektywność. Jednolite zarządzanie aplikacjami na różnych klastrach pomaga utrzymać standardy i unikać błędów. Dodatkowo, ArgoCD zapewnia przejrzystość poprzez możliwość monitorowania stanu wszystkich aplikacji na wszystkich klastrach, ułatwiając identyfikację problemów i szybką reakcję.

ArgoCD jest potężnym narzędziem do zarządzania aplikacjami na wielu klastrach Kubernetes, zapewniając spójność, efektywność i kontrolę. Integracja z platformą codefresh.io dodaje dodatkowe możliwości i elastyczność w zarządzaniu wieloma instancjami ArgoCD w jednym miejscu.


Autor

Emil Juchnikowski - autor artykułu DevOps + GitOps przy użyciu Gitlab i ArgoCD - część I (CI)

Emil Juchnikowski — pracuje jako Architekt Oprogramowania. Swoją karierę rozpoczął jako .NET Developer ponad 10 lat temu. Teraz już z technologią .NET ma bardzo mało wspólnego. Rozwija się w technologiach JS, w różnych kierunkach: frontend Angular i Ionic, backend NodeJS i NestJS, bazy danych MongoDB. Poza tym zajmuje się też zagadnieniami DevOps, GitOps opartymi o konteneryzację w Kubernetes. Poza pracą lubi biegać na długie dystanse oraz trenuje boks. Jego motto to: Jedynym ograniczeniem jest nasza wyobraźnia… a niektórzy twierdzą, że jeszcze czas i pieniądze.







.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *