Hey folks!
To develop on most of our infrastructure applications, we use a tool called tiny-stage which is based on Vagrant, to run a few virtual machines with the authentication stack and a few common tools. The apps themselves all have a Vagrant VM for development that is setup to call the Tinystage VMs for authentication and the rest. This setup has worked well for us but it has shortcomings:
- the VMs take up quite a bit of RAM. We try to colocalize the apps on some VMs but we usulally need at least two, IPA and the auth stack.
- Vagrant is not Free software anymore, and it doesn’t look like any of the forks have gathered enough traction
- This setup has been said to make it harder to contribute to our applications (please say something about that if it’s your case)
- Almost all our applications are deployed as containers in Openshift, so there’s an opportunity here to make the dev environment closer to the prod environment
The Vagrant setup does have a few qualities that I would like to keep:
- the apps have a fixed DNS name that can be reached by the host and by other apps in VMs outside of tinystage
- it’s easy to modify the code of applications in tinystage and restart the service without having to rebuild anything (this seems harder to do in containers, although I’ve heard of containers that start services using systemd, which can then be restarted, etc)
- files are synced between the host and the virtualized app. Vagrant uses sshfs for that but I suppose a container volume mount would do the same?
I’m looking into alternatives to this setup. What are people using these days? Do you have suggestions? At this point I’ve heard of or had a quick look at the following options:
- bcd, @adamwill 's solution for Bodhi, based on Ansible playbooks starting containers with Podman
- k3s, minikube, minishift and microshift, which are all kubernetes distributions targeted at lower-resources devices
- CRC, an OpenShift/Microshift deployment optimized for development and testing purposes (looks interesting!)
- podman-compose, an implementation of docker-compose for podman, to describe and run multiple containers.
- quadlet, a systemd-based solution to run containers
- Dev Containers, a spec to make it easier to do development on containers, with a reference CLI implementation and IDE extensions
Am I missing important options?
I don’t think we need to have actual k8s distributions for this use case, with scaling, redundency, etc, so k3s, and {mini,micro}{kube,shift}
seem a bit too much.
I would really like to keep having a setup with shared resources such as authentication, and a separated development setup (possibly run by the same tool?) that hooks into it, because I would like to avoid having to stand up multiple instances of IPA/Ipsilon/FASJSON when I’m hacking on mutiple applications at the same time.
Any ideas? Are you using or did you use some of those tools? Feedbacks?
Or is there a completely different approach that I haven’t considered?
My main goal is to make it easier for newcomers to contribute to our apps without making it too hard for existing developers that regularly contribute to many of those apps.
Thanks!