Sync the self-hosting stack

This commit is contained in:
2026-08-31 23:54:09 +02:00
parent 127664379d
commit bf65fc28f6
2 changed files with 47 additions and 3 deletions
+41
View File
@@ -9,6 +9,47 @@ one of them changed. An entry says which artefact and which version, so `web 0.1
Every version published to a channel appears here. Nothing is written from memory afterwards: a build
cannot be published without its entry.
## 2026-09-01 — Jarvis administers Kubernetes clusters `api 0.105.0` `web 0.128.0`
**Register a cluster the way you register a server, and ask for the work in words.** A Kubernetes
cluster is now a kind of asset, under **Virtualization & containers**, reached either by pasting a
kubeconfig into the vault or by pointing Jarvis at the API server with a ServiceAccount token. Any
conformant cluster: k3s, RKE2, kubeadm, EKS, AKS, GKE.
**What it can read.** Workloads (pods, deployments, statefulsets, daemonsets, replicasets, jobs,
cronjobs), nodes, namespaces, networking, storage, events, pod logs — including the previous
container's log, which on a CrashLoopBackOff is the only copy holding the error — live CPU and
memory where metrics-server is installed, and the Helm releases with their revision and status. The
output is shaped like `kubectl`, because that is what everyone reading the transcript already knows.
**What it can do.** Scale, restart a rollout, delete a pod so its controller replaces it, cordon and
uncordon a node, drain one, suspend and resume a CronJob. Draining uses the eviction API, so a
PodDisruptionBudget refuses an eviction that would take a service below its floor instead of the
drain quietly ignoring it.
**And, for what no fixed list covers:** read any API path (which is how custom resources —
cert-manager, Argo CD, CloudNativePG — are reached), apply a manifest with server-side apply, and
run a command inside a container. Those three are marked as tools whose operation the assistant
composes itself, so an access grant has to admit them deliberately rather than inheriting them from
a risk level.
**Risk is judged per call, not per tool.** Scaling is an ordinary change; scaling to zero takes the
service down and asks first. An apply is an ordinary change; an apply carrying RBAC, an admission
webhook, a CRD or anything at all into `kube-system` asks first, and says which of those it found.
Deleting anything always asks. Applying a namespace with the deployment that goes in it does not —
an approval on every deploy is an approval nobody reads.
**Two things it will not do.** No tool reads a Secret: the resource lists exclude them, and the Helm
tool reads the release index rather than decoding a release, which would carry the values a chart was
installed with. And a kubeconfig whose credential comes from running a program (`exec` /
`auth-provider` — the EKS and GKE default) is refused by name, with the ServiceAccount route named as
the answer, rather than failing later as an authentication error.
**Testing a connection records what the cluster is** on the asset: version, distribution, node count,
total capacity and node addresses.
Take both images. The schema gains one enum value and the migration is uneventful.
## 2026-08-31 — The Tasks panel now looks like the rest of the workspace `web 0.127.0`
**And its actions menu is reachable with a mouse again**, which is the part that was not merely