Skip to content

docs: make the admin guide usable by a university that is not TUM - #9

Merged
Mtze merged 1 commit into
mainfrom
docs/admin-guide-for-external-adopters
Aug 27, 2026
Merged

Mtze merged 1 commit into
mainfrom
docs/admin-guide-for-external-adopters

Conversation

@Mtze

@Mtze Mtze commented Aug 27, 2026

Copy link
Copy Markdown
Member

Stacked on #8. Depends on EduIDE-Helm#28 — the admin-token page documents service.adminApiTokenSecret.external, which that PR introduces.

An audit of all 16 admin pages against the current charts found the section largely describes the platform before the 2.0.0 restructure. 11 of 16 pages hardcoded a namespace that no longer exists, and roughly 70 commands would fail as written.

Two new pages — the ones an adopter needs first, and neither existed

Cluster Prerequisites. Gateway API, a Gateway controller, cert-manager with enableGatewayAPI=true (without it, HTTP-01 challenges never complete), storage, node disk budget for preloaded images, minimum Kubernetes version. Pinned commands throughout.

Certificates and DNS. Four hostnames per installation, one of them a wildcard. Why ACME cannot issue that over HTTP-01 — it's the specification, not a cert-manager limitation — and both remedies written out end to end: a DNS-01 solver, or bring your own certificate.

Verification gets its own section, because Gateway API never compares a certificate's names against the listener hostname. A wrong certificate reports Programmed=True. The only symptom is a browser warning, then the landing page silently failing its cross-origin call to its own REST service.

Two errors the docs were actively causing

  • Only two of four Keycloak redirect URIs were listed. Login appears to work, then webviews fail to authenticate — surfacing days later as "previews are broken".
  • ephemeralStorage was presented as an opt-in for demos. It defaults to true. A reader following that page believes student work persists when it does not.

Pages rewritten

Page Why
provisioning.md Stated the new truth then contradicted it on the same screen — seven deleted charts, deleted workflows, deleted directory layout. 202 lines → 60
upgrades.md Duplicated the rollback and release-policy pages and got both wrong
intro.md Environment table wrong in every column; never linked to the install pages
monitoring-basics.md Built on a deleted chart and a Rancher-only stack; ServiceMonitors that are PodMonitors
garbage-collection.md Documented as a standalone install; it is a subchart whose values are silently ignored if nested wrongly
admin-api-tokens.md Assumed GitHub Actions; a CLI installer had no path at all

Commands that could never have worked

  • kubectl logs -l app=oauth2-proxy — there is no such Deployment; it is a per-session sidecar
  • kubectl get pvc --field-selector=status.phase=Released — Released is a PersistentVolume phase, so this always returns nothing
  • kubectl rollout restart deployment/operator — it is operator-deployment
  • Defaults stated wrongly: operator.replicas 3→1 (two pages had you paging yourself over a healthy cluster), sessionsPerUser 10→1, requestsMemory 2000M→500M

Added

Runbooks for the two newest failure surfaces — Gateway/HTTPRoute and a certificate that does not cover a hostname — and a decommissioning procedure, which was missing entirely.

Verified: structure check passes, every relative link resolves, all factual claims re-checked against charts/eduide/values.yaml directly.

An audit against the current charts found the admin section largely describes
the platform as it was before the 2.0.0 restructure. Eleven of sixteen pages
hardcoded a namespace that no longer exists, and around seventy commands would
fail as written.

Two new pages, which are what an external adopter actually needs first and
neither of which existed:

  Cluster Prerequisites - Gateway API, a Gateway controller, cert-manager WITH
  enableGatewayAPI=true (without it HTTP-01 never completes), storage, node disk
  for preloaded images, and a minimum Kubernetes version. With pinned commands.

  Certificates and DNS - four hostnames per installation, one a wildcard,
  why ACME cannot issue that over HTTP-01 (the specification, not a cert-manager
  limitation), both remedies written out, and how to verify. Verification
  matters because Gateway API never compares a certificate's names against the
  listener hostname, so a wrong certificate reports Programmed=True and the only
  symptom is a browser warning - followed by the landing page silently failing
  its cross-origin call to its own REST service.

Two errors the docs were actively causing:

  Only two of four Keycloak redirect URIs were listed. Login appears to work and
  then webviews fail to authenticate, which surfaces days later as "previews are
  broken".

  ephemeralStorage was presented as an opt-in for demos. It defaults to TRUE, so
  a reader believes student work persists when it does not.

provisioning.md stated the new truth and then contradicted it on the same
screen: a seven-chart install order, deleted workflows, a deleted directory
layout. Cut from 202 lines to 60. upgrades.md duplicated the rollback and
release-policy pages and got both wrong; rewritten. intro.md's environment table
was wrong in every column, and it never linked to the install pages at all.

Across operations and security: the deleted theia-monitoring chart, PodMonitors
described as ServiceMonitors, the garbage collector documented as a standalone
install when it is a subchart whose values are silently ignored if nested
wrongly, an oauth2-proxy log command for a Deployment that does not exist
(it is a per-session sidecar), and `kubectl get pvc --field-selector=
status.phase=Released`, which always returns nothing because Released is a
PersistentVolume phase.

Added: runbooks for the two newest failure surfaces, Gateway/HTTPRoute and a
certificate that does not cover a hostname; a CLI path for the admin API token,
which previously assumed GitHub Actions; and a decommissioning procedure, which
was missing entirely.

Depends on EduIDE-Helm#28 - the admin token page documents
service.adminApiTokenSecret.external, which that PR introduces.
@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5423903b-0e19-4355-b98d-2ed518da4389

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Mtze
Mtze changed the base branch from docs/orphans-and-admin-guides to main August 27, 2026 13:09
@Mtze
Mtze merged commit 80e9d13 into main Aug 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant