Install
One binary covers all three surfaces — the CLI, the MCP server
(lookout mcp), and the sentinel (lookout watch). Installing means
getting that binary where you need it:
-
On a workstation — for the CLI and the MCP server — download a prebuilt binary from the latest release (v0.13.0 and later; Linux and macOS on amd64/arm64, Windows on amd64 — Windows archives are
.zip):Terminal window gh release download -R go-steer/k8s-lookout -p 'lookout_*_linux_amd64.tar.gz'tar -xzf lookout_*_linux_amd64.tar.gz && sudo install lookout /usr/local/bin/The
lookout-gke_*assets are the same binary with the GKE/GCP provider compiled in (see the flavor guide below). Or build from source with Go 1.26+:Terminal window go install github.com/go-steer/k8s-lookout/cmd/lookout@latestEither way that is the whole install;
lookout healthagainst your current kubeconfig works immediately (First reads is the next page). -
In a cluster — for the sentinel — use the container images below; Deploy the sentinel applies the shipped manifests with one
kubectl apply -k, no clone needed.
Container images
Section titled “Container images”Images are published at ghcr.io/go-steer/lookout — multi-arch
(amd64 + arm64), distroless static, running as nonroot, Sigstore-signed:
docker pull ghcr.io/go-steer/lookout:latest # default: GCP-free, runs on any conformant clusterdocker pull ghcr.io/go-steer/lookout:latest-gke # same binary + GKE/GCP provider (-tags allproviders)Which flavor you need:
- Default (
:latest,:vX.Y.Z) — links zero GCP SDKs, by design (a conformance test in CI keeps it that way). Most of the suite is pureclient-go: the entiretriagegroup,state edges|webhooks|volumes,stab drift|drain,bundle,health,net probe, and the sentinel sourcesk8s-events,object-state,rollout,saturation,degradation,expiry, andtoken-burn. Provider-gated commands in this image never break or lie — they emit an explicitcloud.unavailablefinding and exit 0 (see Troubleshooting). -gke(:latest-gke,:vX.Y.Z-gke) — the same binary compiled with the GKE/GCP cloud provider. Required for thecloudcommand group,state wi, theperf probemetric packs, thequotasource, and the capacity source’s GKE scale-decision sub-source. Same flags, same signing; only the compiled-in cloud provider differs. Project-tier deployments (the one sentinel per GCP project that enables thequotasource) must pin this flavor —--sources=…,quotain the default image refuses at startup, loudly and correctly.
Verify signatures
Section titled “Verify signatures”cosign verify ghcr.io/go-steer/lookout:vX.Y.Z \ --certificate-identity-regexp '^https://github.com/go-steer/k8s-lookout' \ --certificate-oidc-issuer https://token.actions.githubusercontent.comcosign verify works identically against the -gke tags.
Read the bill of materials
Section titled “Read the bill of materials”Every image carries an SPDX SBOM attestation per platform, signed keyless with the same identity as the signature — so the “who built this” and “what is in it” questions verify through one flow and one trust root:
cosign verify-attestation ghcr.io/go-steer/lookout:vX.Y.Z \ --type spdxjson \ --certificate-identity-regexp '^https://github.com/go-steer/k8s-lookout' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ | jq -r '.payload | @base64d | fromjson | .predicate' > sbom.spdx.jsonTwo attestations come back, one per platform (linux/amd64,
linux/arm64) — a multi-arch index scanned without a platform
silently describes whichever child matched the scanner’s host. This is
also the checkable form of the GCP-free
guarantee: the default flavor’s SBOM contains
no cloud SDK, and the -gke flavor’s does.
Release binaries are covered by a keyless-signed checksums file attached to each release:
cosign verify-blob lookout_vX.Y.Z_SHA256SUMS \ --bundle lookout_vX.Y.Z_SHA256SUMS.sigstore.json \ --certificate-identity-regexp '^https://github.com/go-steer/k8s-lookout' \ --certificate-oidc-issuer https://token.actions.githubusercontent.comsha256sum -c lookout_vX.Y.Z_SHA256SUMS --ignore-missingGKE Autopilot: both flavors run on Autopilot, with one platform
limitation — Warden denies nodes/proxy to every principal, so the
saturation source’s PVC dimension is disabled there (CPU/memory
forecasting still works). The sentinel reports this at startup; see
Concepts → Portability.
Building with a cloud provider
Section titled “Building with a cloud provider”go install builds the GCP-free default. For a provider-enabled binary,
build with tags — -tags gke for the GKE provider alone,
-tags allproviders for everything (what the -gke image ships):
go build -tags allproviders ./cmd/lookoutEntrypoint
Section titled “Entrypoint”The image’s entrypoint is ["/lookout", "watch"], so a Deployment’s bare
args: splice in behind watch (no explicit command: needed). The
sentinel’s core flag surface is pinned by CI contract tests, so an
existing deployment can upgrade the image with zero config change.
To run a read-path command from the image (rather than the sentinel),
override the entrypoint — e.g. --entrypoint /lookout with docker run,
or command: ["/lookout"] in a pod spec. On a workstation the natural
path is the plain binary: every read command works against your current
kubeconfig context, which is the next page.