ops-demo/docs/01-argocd-bootstrap.md

151 lines
3.3 KiB
Markdown

# Oefening 01 — ArgoCD bootstrappen
**Tijd**: ~30 minuten
**Doel**: ArgoCD aan de praat krijgen op je cluster en de App-of-Apps opzetten.
---
## Wat je leert
- ArgoCD installeren via Helm
- Het App-of-Apps patroon: één ArgoCD Application die alle andere beheert
- Hoe ArgoCD je Git-repo in de gaten houdt en de cluster-staat synchroniseert
---
## Vereisten
De VM draait en je bent ingelogd:
```bash
vagrant ssh
cd /vagrant
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# ops-demo Ready control-plane,master ...
```
---
## Stappen
### 1. Bootstrap-script uitvoeren
```bash
./scripts/bootstrap.sh
```
Het script doet het volgende:
1. Detecteert de URL van jouw fork op basis van `git remote`
2. Maakt de `argocd` namespace aan
3. Installeert ArgoCD via Helm
4. Past `apps/project.yaml` toe
5. Genereert `apps/root.yaml` met jouw fork-URL en past het toe
Aan het einde zie je het admin-wachtwoord. **Kopieer het nu.**
---
### 2. ArgoCD UI openen
In een tweede terminal op je laptop:
```bash
kubectl port-forward svc/argocd-server -n argocd 8080:443
```
Open **https://localhost:8080** (accepteer het self-signed certificaat).
Login: `admin` / het wachtwoord uit de output van het script.
---
### 3. root.yaml committen en pushen
Het bootstrap-script heeft `apps/root.yaml` aangemaakt met jouw fork-URL. Dit bestand moet in je repo staan zodat ArgoCD het kan synchroniseren:
```bash
git add apps/root.yaml
git commit -m "feat: add root app-of-apps"
git push
```
---
### 4. De root Application bekijken
In de ArgoCD UI zie je nu de **root** application verschijnen. Klik erop.
- Hij kijkt naar de `apps/` directory in jouw fork
- Alles wat je daar commit, pikt ArgoCD automatisch op
Controleer ook via de CLI:
```bash
kubectl get applications -n argocd
```
---
### 5. ArgoCD zichzelf laten beheren (optioneel maar mooi)
Maak `apps/argocd.yaml` aan:
```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "0"
spec:
project: workshop
sources:
- repoURL: https://argoproj.github.io/argo-helm
chart: argo-cd
targetRevision: "7.7.11"
helm:
valueFiles:
- $values/manifests/argocd/values.yaml
- repoURL: JOUW_FORK_URL
targetRevision: HEAD
ref: values
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
```
Vervang `JOUW_FORK_URL` door jouw fork-URL (staat ook in `apps/root.yaml`). Commit en push — ArgoCD beheert zichzelf vanaf nu via Git.
---
## Verwacht resultaat
```
NAME SYNC STATUS HEALTH STATUS
root Synced Healthy
argocd Synced Healthy
```
---
## Probleemoplossing
| Symptoom | Oplossing |
|----------|-----------|
| root Application toont "Unknown" | Nog niet gepusht, of ArgoCD kan de repo nog niet bereiken — even wachten |
| Helm install time-out | `kubectl get pods -n argocd` — waarschijnlijk nog images aan het downloaden |
| UI toont "Unknown" sync status | Klik **Refresh** op de application |
---
## Volgende stap
In Oefening 02 deploy je je eerste echte applicatie via GitOps — geen `kubectl apply`, alleen een YAML-bestand in Git.