Ter lering ende vermaeck, een simpele applicatie die deployed wordt met ArgoCD. Vanuit een GitOps oogpunt gezien is een git-repository de ‘single source of truth‘ en van daaruit wordt de applicatie op de Kubernetes cluster niet alleen uitgerold maar ook ge-update.
Om een Kubernetes cluster toe te voegen aan ArgoCD, kan de CLI-tool van ArgoCD geïnstalleerd worden, bijvoorbeeld op MacOS met brew:
$ brew install argocd
daarna kan vanaf de cli ingelogd worden op de argocd-server, met dezelfde credentials als in de GUI van ArgoCD.
$ argocd login argocd.server --uername admin --password [wachtwoord] 'admin:login' logged in successfully
Indien ArgoCD op dezelfde cluster staat als de applicatie die toegevoegd gaat worden, kan de standaard connectie gebruikt worden. Deze is tijdens de installatie toegevoegd als https://kubernetes.default.svc. Andere Kubernetes clusters kunnen vanaf de CLI toegevoegd worden met de Kubernetes contexts-name, bijvoorbeeld:
$ argocd cluster add [clustername]
ArgoCD heeft een aantal voorbeelden op Github staan en hiervan gebruiken we nu de Guestbook app.
Vanaf de cli met ‘argocd’
$ argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
Zoals je ziet wordt vanuit de Git-repo de helm-guestbook directory gebruikt waarin de deployment en de service voor het guestbook staan. Ze worden in de default namespace geplaatst. Ter controle:
$ argocd app get helm-guestbook Name: helm-guestbook Project: default Server: https://kubernetes.default.svc Namespace: default URL: https://argocd.digitalinfo.nl/applications/helm-guestbook Repo: https://github.com/argoproj/argocd-example-apps.git Target: Path: helm-guestbook SyncWindow: Sync Allowed Sync Policy: Sync Status: OutOfSync from (53e28ff) Health Status: Missing GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default helm-guestbook OutOfSync Missing apps Deployment default helm-guestbook OutOfSync Missing
Zoals te zien is in het resultaat is de app nog niet gesyncroniseerd en (dus) missing op het cluster. Om de app te sync’en naar het cluster:
$ argocd app sync helm-guestbook Message: successfully synced (all tasks run) GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default helm-guestbook Synced Healthy service/helm-guestbook created apps Deployment default helm-guestbook Synced Healthy deployment.apps/helm-guestbook created
en daarmee is de app helm-guestbook geïnstalleerd op het cluster.
In de GUI van ArgoCD
De applicatie is terug te vinden in ‘Applications’, met de status ervan:
De guestbook-app kan benaderd worden op TCP port 80 en deze kan met kubectl ge-forward worden op bv. port 8080 op localhost:
$ kubectl port-forward svc/helm-guestbook 8080:80
Vervolgens kan een browser gebruikt worden om naar het guest-book te gaan:
Wijzigingen die ge-pushed worden naar deze GitHub repository worden nu automatisch door ArgoCD opgepakt en verwerkt.