====== ArgoCD (GitOps pro Kubernetes) ====== **ArgoCD** je deklarativní nástroj pro průběžné doručování (Continuous Delivery) určený výhradně pro [[kubernetes|Kubernetes]]. Implementuje metodologii **GitOps**, kde Git slouží jako "jediný zdroj pravdy" (Single Source of Truth) pro stav infrastruktury. ArgoCD běží jako kontrolér uvnitř Kubernetes clusteru a neustále porovnává stav definovaný v Gitu se stavem skutečně běžícím v clusteru. ===== Základní principy GitOps s ArgoCD ===== * **Deklarativní definice:** Veškerá konfigurace (YAML, Helm, Kustomize) je uložena v Gitu. * **Verzování:** Každá změna v infrastruktuře prochází přes Code Review (Pull Requesty) a je dohledatelná v historii Gitu. * **Automatická synchronizace:** ArgoCD detekuje rozdíl (Out of Sync) a automaticky (nebo na vyžádání) upraví cluster tak, aby odpovídal Gitu. ===== Klíčové komponenty ===== * **API Server:** Poskytuje rozhraní pro webovou konzoli, CLI a externí systémy. * **Repository Server:** Udržuje lokální cache Git repozitářů a generuje výsledné Kubernetes manifesty. * **Application Controller:** Sleduje běžící aplikace a porovnává je s definicí v Gitu. ===== Stav aplikace v ArgoCD ===== ArgoCD používá dva základní ukazatele pro stav aplikace: ^ Stav ^ Popis ^ | **Synced** | Stav v clusteru přesně odpovídá tomu, co je v Gitu. | | **Out of Sync** | V Gitu je novější verze nebo někdo ručně změnil konfiguraci v clusteru. | | **Healthy** | Všechny prostředky (Pody, Services) běží v pořádku. | | **Degraded** | Některé části aplikace selhaly (např. CrashLoopBackOff). | ===== Podporované formáty konfigurace ===== ArgoCD není omezeno jen na čisté YAML soubory. Podporuje: * **Helm Charts:** Populární balíčkovací systém pro K8s. * **Kustomize:** Nástroj pro úpravu YAML šablon bez jejich přepisování. * **Jsonnet:** Šablonovací jazyk pro komplexní konfigurace. ===== Praktická ukázka: Definice aplikace ===== V ArgoCD definujete objekt typu ''Application'', který říká: "Vezmi tento kód z tohoto Gitu a nasaď ho do tohoto clusteru". apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: moje-aplikace namespace: argocd spec: project: default source: repoURL: https://github.com/firma/web-app.git targetRevision: HEAD path: overlays/production destination: server: https://kubernetes.default.svc namespace: prod-namespace syncPolicy: automated: prune: true selfHeal: true ===== Výhody oproti tradičnímu CI/CD ===== * **Pull-based model:** Cluster si sám stahuje změny. Není nutné otevírat firewall pro externí CI nástroje (jako Jenkins nebo GitHub Actions) směrem do clusteru. * **Ochrana proti "Configuration Drift":** Pokud administrátor ručně změní něco v clusteru pomocí ''kubectl'', ArgoCD to zjistí a díky funkci **Self-Healing** změnu přepíše zpět podle Gitu. * **Multi-cluster správa:** Z jedné instance ArgoCD můžete spravovat stovky oddělených Kubernetes clusterů. > **Bezpečnostní poznámka:** Protože má ArgoCD plná práva k zápisu do clusteru, je kritické správně nastavit RBAC (Role-Based Access Control) a SSO (Single Sign-On). [[it_encyklopedie:vyvoj_a_devops|Zpět na DevOps]]