Hoppa till innehåll
Installation

Installera Argo CD

Håll det som körs i fas med det som står i Git, med klustret uppsatt först och en ärlig varning om att det här är samlingens svåraste verktyg.

Vad Argo CD är

Ett program som ser till att det som körs är samma sak som det som står i er kodkatalog. Ni ändrar en fil i Git, och Argo CD upptäcker ändringen och genomför den. Ändrar någon i stället direkt i systemet ser Argo CD att verkligheten har glidit isär från filen, och säger till.

Idén kallas GitOps och är enklare än namnet. Sanningen står i Git. Allt annat är en kopia som ska hållas i fas.

Var ärliga om nivån här. Det här är det svåraste verktyget i samlingen, för Argo CD kräver Kubernetes, och Kubernetes är ett eget ämne. Vill ni förstå hur riktiga driftsmiljöer fungerar är det här rätt väg. Vill ni få en webbshop i luften före jul finns kortare vägar, och Dokku är en av dem.

Ni behöver ett Kubernetes-kluster först

Argo CD körs inuti Kubernetes och kan inte installeras utan. Ni behöver alltså två saker innan ni börjar: ett kluster, och kommandoverktyget kubectl som pratar med det.

Enklaste klustret för att öva är Minikube, som startar ett litet kluster på er egen dator. Det kräver Docker, samma som i Installera Docker.

På Windows betyder Docker Desktop att ni också får WSL2, alltså Windows inbyggda Linux. Docker Desktop installerar det normalt själv, men blir ni tillfrågade ska ni svara ja. Utan WSL2 startar inget kluster.

Hämta Minikube från minikube.sigs.k8s.io, som har färdiga paket för både Windows och Linux. kubectl följer inte med Minikube, utan hämtas separat från kubernetes.io, som också har färdiga paket för båda systemen. Starta sedan klustret:

minikube start

Windows och Linux Mint

När klustret svarar är själva installationen två rader, och de är identiska på båda systemen:

kubectl create namespace argocd
kubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Första raden skapar ett eget utrymme i klustret så att Argo CD inte blandas ihop med era egna program. Andra hämtar och startar allt som behövs. Det tar ett par minuter, och ni följer med i kubectl get pods -n argocd tills alla rader står på Running.

Öppna sedan en väg in till gränssnittet:

kubectl port-forward svc/argocd-server -n argocd 8080:443

Låt fönstret stå öppet, för vägen finns bara så länge kommandot kör. Surfa till https://localhost:8080, användarnamnet är admin. Webbläsaren varnar för certifikatet, vilket är väntat på en lokal installation, och ni klickar er förbi.

Tre saker att göra först

  1. Hämta lösenordet, för det står ingenstans i gränssnittet. På Linux Mint:
    kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
    I PowerShell finns inget base64, så där avkodar ni med Windows egna medel:
    [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String((kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}")))
    Byt sedan lösenordet med kommandot argocd account update-password om ni installerat argocd-CLI, eller under User Info i webbgränssnittet om ni inte vill installera CLI:t, och radera hemligheten.
  2. Koppla in ett riktigt repo i stället för att läsa dokumentationen vidare. Projektet har ett övningsrepo på github.com/argoproj/argocd-example-apps. Tryck på Fork där och lägg upp er egen kopia som applikation i gränssnittet, inte originalet. Ni kan inte ändra i någon annans repo, och nästa steg går ut på just det. Tryck sedan på Sync.
  3. Ändra något i er kopia av repot och titta på vad som händer. Argo CD upptäcker skillnaden inom några minuter och markerar applikationen som OutOfSync. Sedan väntar den på att ni trycker på Sync, för automatisk synk är avstängd från början. Den bilden är hela poängen med verktyget, och den går inte att förstå genom att läsa om den.

Den vanligaste fällan

Att laga något genom att ändra direkt i klustret. Argo CD jämför hela tiden klustret med filerna i Git, så ändringen syns inom några minuter som OutOfSync på applikationen. Rättningen finns alltså bara i klustret och ingenstans i Git, vilket betyder att nästa Sync tar bort den.

Har ni dessutom slagit på automatisk synk med självläkning, alltså Automated sync och Self heal i applikationens inställningar, händer det av sig själv och utan att någon tryckt på något. Er rättning är borta, felet är tillbaka, och ingenting i loggen pekar tydligt på varför.

Regeln är därför enkel och tar ett tag att vänja sig vid: ändringar görs i Git, aldrig i klustret. Kommandot kubectl edit är ett felsökningsverktyg, inte ett sätt att rätta något.

En sak till om planeringen. Minikube på en vanlig bärbar dator klarar övningar utmärkt, men klustret ligger på er egen maskin och försvinner när ni stänger av den. Ska något vara igång dygnet runt behöver ni ett kluster hos en leverantör, och det kostar pengar. Räkna med det innan ni bygger något ni måste kunna lita på.