| client | ||
| cmd/kubelwagen | ||
| fs | ||
| vendor | ||
| .gitignore | ||
| filesystem.go | ||
| fs.go | ||
| fs_file.go | ||
| fuse.go | ||
| Gopkg.lock | ||
| Gopkg.toml | ||
| http.go | ||
| LICENSE | ||
| README.md | ||
| request.go | ||
| serve.go | ||
| wsconn.go | ||
kubelwagen
Getting your dev environment to the front lines
It's great to have a consistent environment in containers, and it's great to have services run on Kubernetes, but it's a pain to build dev containers to be run as pods on Kubernetes. git pull on pod creation helps, but it still requires you commit and push the code, and restart the pod.
It would be great if your live development working directory could be mounted into a running pod on the powerful metal in the cloud. Plus, it would obviate the need for workaround services such as ngrok to share a running WIP instance, as it would have a valid service on the dev cluster, complete with Ingress resources and everything. Plus, it's running in-cluster; so all the configurations and access controls and service discoveries are available to your dev instance. With the absolute latest, WIP code from your laptop.
Use it in tandem with automatically refreshing dev environments -- JS auto-reloaders for frontend devs, entr for general reloads, or any other tooling you like.
Kubelwagen is a sidecar (hah) container that provides a FUSE directory to the running pod that is mounted in from a client connecting in over an HTTPS websocket.
FUSE over Websockets? Are you insane?
It's a dev tool, HTTPS is pretty good, relax. Yeah, it'll be slow... but with appropriate caching, a few extra automatic reload milliseconds of the code you just changed is preferable to rebuilding a container or rescheduling a pod. Faster iteration times == happier devs. Closer parity to your laptop and production == happier ops.
Setting it up
kubelwagen serve [TARGET DIRECTORY]
kubelwagen connect [TARGET ADDRESS] [SOURCE DIRECTORY]
Status & Todo
Status
First mounting! ls over the internet to your heart's content!
Todo
- Implement all the methods!
- XAttrs
- File handles
- Caching
- INotify
- Overlay (serve local directory when not connected)
Licensing
Distributed under the GPL, as it's a dev tool and not meant as a product. Use it internally. Share alike.
Why call it kubelwagen?
I was on vacation and read The Last Battle: When U.S. and German Soldiers Joined Forces in the Waning Hours of World War II in Europe in one sitting, and noticed a word, starting with kube, that fit themeatically, with an idea I already had.