DEV Community

flisk
flisk

Posted on

Do Not Boot a Cluster to Change a Button

A local cluster feels like rigor. Often it is a tax.

kind and minikube give you a Kubernetes API on the laptop. They do not give you an inner loop. Helm, kubectl, Skaffold, or Tilt still has to sit on top. Flisk's comparison doc draws the line in the place most tool pages smudge it: if your software talks to that API, you need the cluster. If your software is a service, a page, a worker, or an agent, the cluster is an operational target, not a dependency of the edit you are making.

When the cluster is mandatory

Refuse Flisk, and refuse "just use Compose," when the thing you are building is the cluster:

  • an operator, a CRD, or a reconciler
  • an admission webhook
  • ServiceAccount RBAC you must see fail
  • a Pod disruption budget, a NetworkPolicy, a CNI plugin
  • a service mesh
  • a Helm chart or Kustomize overlay whose job is to install cleanly

Those are not local-dev preferences. A Docker network will not grow a kube-apiserver because you wanted parity. Skaffold is the better inner loop when the same pipeline should dev against a cluster and run in CI. DevSpace is the better inner loop when the code should execute inside a remote pod or a vcluster, especially if you need the file sync to run both ways.

Native Windows without WSL2 is a harder stop than a philosophy. The comparison doc says flisk up exits 1 on native Windows. Inspection still works: flisk --version, flisk doctor, flisk up --dry-run. Startup needs Ubuntu on WSL2. Compose does not have that cliff. If the team will not install WSL2, the evaluation is over.

When the cluster is a costume

The comparison doc's overhead claim should be quoted as a claim, not as a bench this repository measured. It says a local Kubernetes control plane typically consumes 4 GiB to 8 GiB before your application starts. Use that as a reason to measure your own minikube start, not as a number to put in a slide without the word "typically."

The costs that do not need a RAM chart:

  • You maintain Deployments, Services, and Ingress objects so a developer can hit a route.
  • On kind, a locally built image has to be loaded into the node. That load is part of the loop, not a footnote.
  • Ingress wants a controller, and sometimes MetalLB or minikube tunnel, before *.localhost has an equivalent.
  • A remote dev cluster adds network delay, someone else's namespace policy, and a cloud bill to an edit that did not need any of them.

Flisk's counter-offer is plain Docker, Tilt live update into the running container, Traefik on *.localhost, and flisk up <stack> instead of a namespace selector. Production stays on Helm, Kustomize, or Argo CD. The chart remains the thing you lint before merge. It stops being the thing you boot to change a button.

Plain Tilt is the other honest alternative. If the team already writes Starlark, deploys with k8s_yaml(), or runs host processes beside containers, Flisk is an abstraction over a file they meant to own. flisk eject points at the generated file if you want that ownership later:

tilt up -f .tdk/.tdk-out/Tiltfile -- --focus=<stack>
Enter fullscreen mode Exit fullscreen mode

The migration that does not throw the chart away

From kind or Skaffold to Flisk, keep the production manifests. Add service.json for the inner loop. Stop requiring every laptop to run kind create cluster before a UI change. Charts still install in CI. That is the correct place to discover that a template is wrong.

From Flisk back to a cluster, the work is the work you skipped: start the cluster, install the ingress or the operators, write the chart, deploy, forward a port. There is no command that turns a stack into a kind cluster. If that missing command is what you wanted, you wanted Skaffold.

Bring-your-own is the middle. A service that already has an image stays on that image. Flisk routes and health-checks it. The image your pipeline ships can be the image the laptop runs, which is the one parity that is worth paying for. Cluster API parity is a different bill.

A one-question filter

Ask what the next edit needs to be true.

If the edit needs a ServiceAccount, a CRD, or a NetworkPolicy to fail realistically, start the cluster and do not apologize. If the edit needs a handler, a query, a prompt, or a pixel, a control plane is time you will not get back. Boot the containers. Leave the API server for the pull request that is about the API server.

Top comments (0)