11 KiB
Sessions Log
Per-session progress notes. Newest entry first.
2026-03-03 — Tryout reset and handoff ready for Exercise 03 (SESSION 6)
Session goal: Prepare ops-demo-tryout so workshop flow can resume directly from Exercise 03.
Completed this session:
- In
ops-demo-tryout:- destroyed and recreated VM (
vagrant destroy -f,vagrant up) - hard reset
maintoupstream/main - merged
upstream/solution/01-argocd-bootstrapandupstream/solution/02-deploy-podinfo - created tags:
tryout-after-solution-01tryout-after-solution-02
- destroyed and recreated VM (
- Patched repo URLs for tryout fork:
apps/root.yamlapps/argocd.yamlapps/apps/podinfo.yaml- URL set to
https://github.com/paulharkink/ops-demo-tryout.git
- Bootstrapped from host and re-registered Argo repository secret for tryout repo.
- Forced Argo refresh after initial auth-cache miss; root then synced and child apps were created.
- Verified handoff state:
rootapp:Synced/Healthypodinfoapp:Synced/Healthypodinfoworkload:1/1 Running
- Committed tryout URL patch in tryout repo:
9208d45chore: point argo apps to ops-demo-tryout repo
- Added tag for resume point:
tryout-ready-assignment-03
Notes:
- First podinfo pull on fresh VM can take longer; manual
k3s ctr images pullconfirmed/fixed delayed image availability during this run.
2026-03-01 — Full end-to-end validation + out-of-box hardening (SESSION 5)
Session goal: Run the complete workshop flow in a clean tryout repo/VM and close all blockers until 01→06 works out of the box.
Validated flow:
- Fresh baseline in
ops-demo-tryout:- force-reset to
upstream/main vagrant destroy -f && vagrant up- bootstrap + Argo repo registration + root commit
- force-reset to
- Progressive exercise validation completed through 01→06.
- Final runtime state confirmed:
- all Argo apps
Synced/Healthy - podinfo image at
ghcr.io/stefanprodan/podinfo:6.7.0 - URLs responding: podinfo
200, tekton dashboard200, grafana302(login redirect)
- all Argo apps
Critical blockers found and fixed:
-
Tekton TaskRuns rejected by Pod Security Admission
Symptom:PodAdmissionFailedintekton-pipelinesnamespace.
Fix:manifests/ci/tekton/kustomization.yamlnow patches existing Namespace- new
manifests/ci/tekton/namespace-podsecurity-patch.yaml - docs/04 updated with explicit rationale (what PSA means and why this trade-off is used in workshop)
-
Pipeline validate step required unintended RBAC Symptom:
validatetask failed withForbiddenon reads inpodinfonamespace.
Fix:- switched validate command from
kubectl apply --dry-run=clienttokubectl create --dry-run=client(pure client-side validation)
- switched validate command from
-
Workspace file ownership/mode mismatch between task images Symptom:
bump-image-tagfailed with permission denied writingdeployment.yaml.
Fix:- clone task now runs
chmod -R a+rwX .so subsequent task images/users can write.
- clone task now runs
-
Git push URL credential embedding failed Symptom:
git-commit-pushfailed with URL parse error (Port number was not a decimal number...).
Fix:- clone/push now use
http.extraHeader=Authorization: Basic ...instead of embedding credentials in remote URL.
- clone/push now use
Docs hardened:
docs/04-tekton-pipeline.mdonmainexpanded with practical explanations:- clear PSA meaning (
enforce=privilegeddoes not mean pods must be privileged) - why namespace patch is needed in this workshop
- task-level explanation and stronger troubleshooting guidance
- clear PSA meaning (
- removed obsolete troubleshooting about
validate Forbiddenafter validate-step fix.
Branches updated:
main:f7a54b6docs(ex04): clarify PodSecurity patch meaning and rationale2ef3baedocs(ex04): align validate explanation with client-side check
solution/04-tekton-pipeline:acf6be0fix(ex04): patch Tekton namespace pod-security label09262dcdocs(ex04): clarify PodSecurity patch meaning and rationale- includes validated pipeline runtime fixes (validate mode, workspace perms, auth header clone/push)
Notes:
- Tryout required repoURL substitutions to its fork URL where solution manifests referenced
ops-demo. - No unresolved runtime blockers remained at end of session.
2026-03-01 — Assignment clarity pass + Tekton docs hardening (SESSION 4)
Session goal: Remove ambiguity in exercise instructions and align docs with real execution flow.
Completed this session:
- Exercise 03 expanded with explanatory text around key manifests:
- MetalLB speaker/tolerations explanation
- IPAddressPool + L2Advertisement purpose
- Argo app split and sync-wave reasoning
- Ingress intent for podinfo and ArgoCD
- Exercise 04 clarified and hardened:
- Explicitly states
apps/ci/pipeline.yamlis only an Argo wrapper - Makes
set-git-credentials.sha mandatory pre-step - Added Tekton Dashboard + ingress walkthrough in assignment text
- Added troubleshooting for common Tekton/root drift
- Explicitly states
- Command-context UX improved across assignments:
- Shell snippets now clearly labeled
VMorHOSTin quote-style blocks - Removed oversized top callout blocks from exercise pages per user preference
- Shell snippets now clearly labeled
scripts/vm/set-git-credentials.shimproved:- Next-step output now prints a usable PipelineRun manifest path (
manifests/...or/vagrant/...) depending on where the script is run.
- Next-step output now prints a usable PipelineRun manifest path (
Key commits pushed (main):
83d227adocs(ex04): document tekton kustomize drift fixa2c15d6docs(ex04): add Tekton Dashboard UI + ingress walkthrough0212f4bdocs: clarify command context and workshop flow
Open follow-up:
- If dashboard setup should be mandatory in
solution/04, validate in tryout and backport explicitly to that branch.
2026-02-28 — Workflow hardening + docs alignment (SESSION 3)
Session goal: Fix operator-facing workflow issues, prevent wrong-cluster mistakes, and align docs/solutions with real usage.
Completed this session:
- Host/VM script split is now the working model in docs and flow:
- host:
scripts/host/bootstrap-from-host.*,scripts/host/argocd-ui-tunnel.* - vm:
scripts/vm/bootstrap.sh,scripts/vm/set-git-credentials.sh,scripts/vm/argocd-port-forward.sh
- host:
- Bootstrap safety improved:
- cluster target checks enforced in
scripts/vm/bootstrap.sh - recursive app discovery fix merged (
cc0d36b)
- cluster target checks enforced in
- README and exercise docs updated multiple times for:
vagrant sshusage- Argo repo registration requirement
- GitHub PAT guidance (fine-grained token path and permissions context)
- host/VM execution clarity and troubleshooting
- MetalLB OutOfSync drift investigated and fixed:
- root cause: CRD webhook
caBundledrift behavior in Argo comparison - validated against
pms15-clusterbehavior solution/03-metallb-ingressupdated to ignore CRDcaBundledrift generically (not single CRD name)- docs/03 troubleshooting updated on main
- root cause: CRD webhook
- Formatting pass landed for markdown readability (
fc0eb1b), then targeted wording corrections. CLAUDE.mdrefreshed to current architecture and branch model.
Key commits pushed (main):
c68292edocs: clarify VM access via vagrant ssh only71c1f79improve bootstrap safety + host-side Argo access scripts4d77c82fix host KUBECONFIG leakage in host/vm scriptscb912cfsplit host/vm scripts + Argo tunnel workflow fixd59818ddocs refinements (workshop flow + Argo repo credentials)cc0d36bbootstrap: recursive app discovery in root appfc0eb1bmarkdown formatting/readability0dc7062ex03 docs: Metallb CRD drift troubleshooting
Key commit pushed (solution branch):
solution/03-metallb-ingress:2e6b4fb(ignore Metallb CRDcaBundledrift across CRDs)
Notes / follow-up:
- Keep
sessions.md/roadmap.mdin sync after every significant change. - Verify all solution branches still obey "standalone per exercise" constraints before next content edits.
2026-02-28 — Branching restructure + Dutch translation (SESSION 2, INCOMPLETE)
Session goal: Restructure branches, translate docs to Dutch, rebuild solution branches off thin main.
Completed this session:
reference-solutionbranch created from old main (full working solution) ✓- Solution files removed from
main(staged, NOT committed) ✓ scripts/bootstrap.shrewritten: Dutch, auto-detects fork URL (SSH→HTTPS), generates apps/root.yaml ✓README.mdrewritten in Dutch ✓docs/vm-setup.mdrewritten in Dutch ✓docs/01-argocd-bootstrap.mdthroughdocs/06-monitoring.mdrewritten in Dutch ✓docs/presentation/final-talk.md— STILL EMPTY (1 line) — NOT YET DONE- Old solution/NN-* branches NOT yet deleted/recreated
- NOTHING COMMITTED on new main yet
Git status on main:
- STAGED: deletions of all solution files (apps/apps/, apps/ci/, etc., manifests/apps/, etc.)
- UNSTAGED MODIFIED: README.md, all docs/*.md, scripts/bootstrap.sh
- UNTRACKED: none relevant
What to do next session:
- Write
docs/presentation/final-talk.mdin Dutch (translate from reference-solution branch, natural dev-Dutch) git add -A+ ONE commit on main (all deletions + Dutch docs + new bootstrap.sh)- Delete old solution branches: solution/01 through solution/06
- Recreate solution/01-argocd-bootstrap through solution/06-monitoring cumulatively off new thin main, each with ONE commit
- Push everything to GitHub (paulharkink/ops-demo)
- Continue smoke-testing exercises 02–05
Key Dutch translation rules (user was very clear):
- Natural dev-Dutch, written as if Paul wrote it
- Technical terms stay English: "branches", "cluster", "pipeline", "deployment", "namespace", etc.
- "takken" is NEVER acceptable
- No Apple Silicon warnings
- No "Co-Authored-By: Claude" in commits
2026-02-28 — Initial implementation (SESSION 1)
Session goal: Full repo scaffold from implementation plan.
Completed:
- Phase 1: CLAUDE.md, sessions.md, roadmap.md, Vagrantfile, scripts/bootstrap.sh,
apps/root.yaml, apps/project.yaml, apps/argocd.yaml, manifests/argocd/values.yaml
→
solution/01-argocd-bootstrapbranch created - Phase 2: apps/apps/podinfo.yaml, manifests/apps/podinfo/, docs/01-argocd-bootstrap.md,
docs/02-deploy-podinfo.md
→
solution/02-deploy-podinfobranch created - Phase 3: MetalLB + Ingress-Nginx apps/manifests, podinfo ingress, ArgoCD ingress,
docs/03-metallb-ingress.md
→
solution/03-metallb-ingressbranch created - Phase 4: Tekton app/manifests, pipeline resources, scripts/set-git-credentials.sh,
docs/04-tekton-pipeline.md
→
solution/04-tekton-pipelinebranch created - Phase 5: docs/05-app-upgrade.md →
solution/05-app-upgradebranch (deployment at 6.7.0) - Phase 6: Monitoring app/manifests, docs/06-monitoring.md →
solution/06-monitoringbranch - Phase 7: docs/vm-setup.md, README.md, docs/presentation/final-talk.md
Vagrantfile fixes applied:
- yq arch-aware: ARCH=$(dpkg --print-architecture)
- Tekton images: ghcr.io (not gcr.io)
- Docker Hub images: docker.io/ prefix required for k3s ctr
- kubeconfig chmod 600
Not yet verified: Full end-to-end smoke test pending.