diff --git a/.gitignore b/.gitignore index a8cc8b1..4a0aad9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,9 @@ roadmap.md # Vagrant .vagrant/ +# IDEs +.idea/ +.vscode/ + # macOS .DS_Store diff --git a/README.md b/README.md index 63c426e..a9dad83 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,25 @@ ArgoCD, MetalLB, Ingress-Nginx, and Tekton — all on a local single-node k3s cl ### Requirements -- [VirtualBox 7.x](https://www.virtualbox.org/wiki/Downloads) -- [Vagrant 2.4.x](https://developer.hashicorp.com/vagrant/downloads) -- Git -- 12 GB RAM free on your laptop, ~15 GB disk +Install all three **before** the workshop (ideally the day before — downloads are large): + +| Tool | Install | +|--------------------|------------------------------------------------------------------| +| **VirtualBox 7.x** | https://www.virtualbox.org/wiki/Downloads — reboot after install | +| **Vagrant 2.4.x** | https://developer.hashicorp.com/vagrant/downloads | +| **Git** | https://git-scm.com/downloads | + +12 GB RAM free, ~15 GB disk. On Apple Silicon (M1/M2/M3/M4), download the **Apple Silicon build** of VirtualBox — see [docs/vm-setup.md](docs/vm-setup.md). + +Quick check — all three must print a version: +```bash +VBoxManage --version && vagrant --version && git --version +``` ### 1. Start the VM ```bash -git clone https://github.com/innspire/ops-demo.git +git clone https://github.com/paulharkink/ops-demo.git cd ops-demo vagrant up # first run: ~10–15 min vagrant ssh @@ -38,14 +48,14 @@ Then follow the exercises in order. ## Exercises -| # | Exercise | Guide | Type | Est. Time | -|---|----------|-------|------|-----------| -| 01 | Bootstrap ArgoCD | [docs/01-argocd-bootstrap.md](docs/01-argocd-bootstrap.md) | Core | 30 min | -| 02 | Deploy podinfo via GitOps | [docs/02-deploy-podinfo.md](docs/02-deploy-podinfo.md) | Core | 30 min | -| 03 | MetalLB + Ingress-Nginx | [docs/03-metallb-ingress.md](docs/03-metallb-ingress.md) | Core | 45 min | -| 04 | Tekton pipeline | [docs/04-tekton-pipeline.md](docs/04-tekton-pipeline.md) | Core | 45 min | -| 05 | App upgrade + reflection | [docs/05-app-upgrade.md](docs/05-app-upgrade.md) | Core | 15 min | -| 06 | Prometheus + Grafana | [docs/06-monitoring.md](docs/06-monitoring.md) | Bonus | 60 min | +| # | Exercise | Guide | Type | Est. Time | +|----|---------------------------|------------------------------------------------------------|-------|-----------| +| 01 | Bootstrap ArgoCD | [docs/01-argocd-bootstrap.md](docs/01-argocd-bootstrap.md) | Core | 30 min | +| 02 | Deploy podinfo via GitOps | [docs/02-deploy-podinfo.md](docs/02-deploy-podinfo.md) | Core | 30 min | +| 03 | MetalLB + Ingress-Nginx | [docs/03-metallb-ingress.md](docs/03-metallb-ingress.md) | Core | 45 min | +| 04 | Tekton pipeline | [docs/04-tekton-pipeline.md](docs/04-tekton-pipeline.md) | Core | 45 min | +| 05 | App upgrade + reflection | [docs/05-app-upgrade.md](docs/05-app-upgrade.md) | Core | 15 min | +| 06 | Prometheus + Grafana | [docs/06-monitoring.md](docs/06-monitoring.md) | Bonus | 60 min | **Beginners**: aim for Exercises 01–03 (~1h45m). **Everyone else**: target 01–05 for the full core loop. @@ -54,15 +64,15 @@ Then follow the exercises in order. ## Stack -| Component | Purpose | Version | -|-----------|---------|---------| -| k3s | Kubernetes | v1.31.4 | -| ArgoCD | GitOps engine | v2.13.x (chart 7.7.11) | -| MetalLB | Bare-metal LoadBalancer | v0.14.9 | -| Ingress-Nginx | HTTP routing | chart 4.12.0 | -| Tekton | CI pipeline | v0.65.1 | -| podinfo | Demo app | 6.6.2 → 6.7.0 | -| kube-prometheus-stack | Observability (bonus) | chart 68.4.4 | +| Component | Purpose | Version | +|-----------------------|-------------------------|------------------------| +| k3s | Kubernetes | v1.31.4 | +| ArgoCD | GitOps engine | v2.13.x (chart 7.7.11) | +| MetalLB | Bare-metal LoadBalancer | v0.14.9 | +| Ingress-Nginx | HTTP routing | chart 4.12.0 | +| Tekton | CI pipeline | v0.65.1 | +| podinfo | Demo app | 6.6.2 → 6.7.0 | +| kube-prometheus-stack | Observability (bonus) | chart 68.4.4 | --- @@ -77,14 +87,14 @@ git fetch origin git show origin/solution/03-metallb-ingress:manifests/networking/metallb/metallb-config.yaml ``` -| Branch | State | -|--------|-------| -| `solution/01-argocd-bootstrap` | ArgoCD running | -| `solution/02-deploy-podinfo` | podinfo synced via ArgoCD | -| `solution/03-metallb-ingress` | LAN access via MetalLB + Ingress | -| `solution/04-tekton-pipeline` | Full GitOps CI loop | -| `solution/05-app-upgrade` | podinfo at v6.7.0 | -| `solution/06-monitoring` | Prometheus + Grafana running | +| Branch | State | +|--------------------------------|----------------------------------| +| `solution/01-argocd-bootstrap` | ArgoCD running | +| `solution/02-deploy-podinfo` | podinfo synced via ArgoCD | +| `solution/03-metallb-ingress` | LAN access via MetalLB + Ingress | +| `solution/04-tekton-pipeline` | Full GitOps CI loop | +| `solution/05-app-upgrade` | podinfo at v6.7.0 | +| `solution/06-monitoring` | Prometheus + Grafana running | --- diff --git a/apps/apps/podinfo.yaml b/apps/apps/podinfo.yaml index 4c0a779..f692ae1 100644 --- a/apps/apps/podinfo.yaml +++ b/apps/apps/podinfo.yaml @@ -8,7 +8,7 @@ metadata: spec: project: workshop source: - repoURL: https://github.com/innspire/ops-demo.git + repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD path: manifests/apps/podinfo destination: diff --git a/apps/argocd.yaml b/apps/argocd.yaml index 3fc68b5..3abfe3b 100644 --- a/apps/argocd.yaml +++ b/apps/argocd.yaml @@ -21,7 +21,7 @@ spec: helm: valueFiles: - $values/manifests/argocd/values.yaml - - repoURL: https://github.com/innspire/ops-demo.git + - repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD ref: values destination: diff --git a/apps/ci/pipeline.yaml b/apps/ci/pipeline.yaml index 593b434..54f92ca 100644 --- a/apps/ci/pipeline.yaml +++ b/apps/ci/pipeline.yaml @@ -8,7 +8,7 @@ metadata: spec: project: workshop source: - repoURL: https://github.com/innspire/ops-demo.git + repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD path: manifests/ci/pipeline destination: diff --git a/apps/ci/tekton.yaml b/apps/ci/tekton.yaml index d3358f4..8f62994 100644 --- a/apps/ci/tekton.yaml +++ b/apps/ci/tekton.yaml @@ -8,7 +8,7 @@ metadata: spec: project: workshop source: - repoURL: https://github.com/innspire/ops-demo.git + repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD path: manifests/ci/tekton kustomize: {} diff --git a/apps/monitoring/prometheus-grafana.yaml b/apps/monitoring/prometheus-grafana.yaml index f28ef73..5df96c5 100644 --- a/apps/monitoring/prometheus-grafana.yaml +++ b/apps/monitoring/prometheus-grafana.yaml @@ -14,7 +14,7 @@ spec: helm: valueFiles: - $values/manifests/monitoring/values.yaml - - repoURL: https://github.com/innspire/ops-demo.git + - repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD ref: values destination: diff --git a/apps/networking/ingress-nginx.yaml b/apps/networking/ingress-nginx.yaml index 502b047..873c369 100644 --- a/apps/networking/ingress-nginx.yaml +++ b/apps/networking/ingress-nginx.yaml @@ -14,7 +14,7 @@ spec: helm: valueFiles: - $values/manifests/networking/ingress-nginx/values.yaml - - repoURL: https://github.com/innspire/ops-demo.git + - repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD ref: values destination: diff --git a/apps/networking/metallb-config.yaml b/apps/networking/metallb-config.yaml index 1c8c89f..8ffaf84 100644 --- a/apps/networking/metallb-config.yaml +++ b/apps/networking/metallb-config.yaml @@ -8,7 +8,7 @@ metadata: spec: project: workshop source: - repoURL: https://github.com/innspire/ops-demo.git + repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD path: manifests/networking/metallb directory: diff --git a/apps/networking/metallb.yaml b/apps/networking/metallb.yaml index 500ffeb..0794416 100644 --- a/apps/networking/metallb.yaml +++ b/apps/networking/metallb.yaml @@ -14,7 +14,7 @@ spec: helm: valueFiles: - $values/manifests/networking/metallb/values.yaml - - repoURL: https://github.com/innspire/ops-demo.git + - repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD ref: values destination: diff --git a/apps/root.yaml b/apps/root.yaml index e79e0b7..f3d0476 100644 --- a/apps/root.yaml +++ b/apps/root.yaml @@ -6,7 +6,7 @@ metadata: spec: project: workshop source: - repoURL: https://github.com/innspire/ops-demo.git + repoURL: https://github.com/paulharkink/ops-demo.git targetRevision: HEAD path: apps destination: diff --git a/docs/vm-setup.md b/docs/vm-setup.md index f02aa4c..801c933 100644 --- a/docs/vm-setup.md +++ b/docs/vm-setup.md @@ -7,6 +7,8 @@ This page walks you through starting the VM and verifying it is healthy before t ## Requirements (install on your laptop before the workshop) +> **Do this the day before** — downloads can be slow on conference WiFi. + | Tool | Version | Download | |------|---------|----------| | VirtualBox | 7.x | https://www.virtualbox.org/wiki/Downloads | @@ -16,12 +18,28 @@ This page walks you through starting the VM and verifying it is healthy before t **RAM**: The VM uses 8 GB. Your laptop should have at least 12 GB total RAM free. **Disk**: ~15 GB free (Vagrant box ~1 GB + k3s images ~5 GB + workspace). +> **Apple Silicon (M1/M2/M3/M4)**: VirtualBox 7.1+ supports Apple Silicon — make sure +> to download the **"macOS / Apple Silicon hosts"** build from the VirtualBox download page, +> not the Intel build. + +### Verify your installs before continuing + +```bash +# All three must return a version number — if any fail, install it first +VBoxManage --version # e.g. 7.1.4r165100 +vagrant --version # e.g. Vagrant 2.4.3 +git --version # e.g. git version 2.x.x +``` + +If `VBoxManage` is not found after installing VirtualBox, reboot your laptop — +VirtualBox installs a kernel extension that requires a restart. + --- ## Step 1 — Clone the repo ```bash -git clone https://github.com/innspire/ops-demo.git +git clone https://github.com/paulharkink/ops-demo.git cd ops-demo ``` @@ -138,6 +156,7 @@ vagrant destroy # delete the VM entirely (start fresh) | Symptom | Fix | |---------|-----| +| `vagrant up`: "No usable default provider" | VirtualBox is not installed — install it and reboot, then retry | | `vagrant up` fails: VT-x/AMD-V not enabled | Enable virtualisation in BIOS/UEFI settings | | `vagrant up` fails: port conflict | Another VM may be using the host-only range; stop it | | `kubectl get nodes` shows NotReady | k3s is still starting; wait 30–60 s | diff --git a/manifests/ci/pipeline/pipeline.yaml b/manifests/ci/pipeline/pipeline.yaml index 63eff39..b8682de 100644 --- a/manifests/ci/pipeline/pipeline.yaml +++ b/manifests/ci/pipeline/pipeline.yaml @@ -13,7 +13,7 @@ spec: - name: repo-url type: string description: URL of the ops-demo git repository - default: https://github.com/innspire/ops-demo.git + default: https://github.com/paulharkink/ops-demo.git - name: new-tag type: string description: New podinfo image tag to set (e.g. 6.7.0) diff --git a/manifests/ci/pipeline/pipelinerun.yaml b/manifests/ci/pipeline/pipelinerun.yaml index 09eec4b..e96f544 100644 --- a/manifests/ci/pipeline/pipelinerun.yaml +++ b/manifests/ci/pipeline/pipelinerun.yaml @@ -12,7 +12,7 @@ spec: serviceAccountName: pipeline-runner params: - name: repo-url - value: https://github.com/innspire/ops-demo.git + value: https://github.com/paulharkink/ops-demo.git - name: new-tag value: "6.7.0" - name: git-user-name