To Kube or probably not to kube No images? Click here A recruitment client of mine, a startup helping automate some time-consuming tasks with ML are looking for Elixir developers anywhere within timezones from -8 to +2 (so US to EU timezones). They are listed as Mystery Startup on this form. If you are interested, apply through this and I'll send you an email about it. For a bit of background on the company you can read this blog post I did with their first Elixir dev. Imperfect abstractionContinuing on the previous issue about friction and trade-offs, correctness and confidence. I think there is another angle as well. Do you keep a system simple or do you lean on high levels of abstraction? If I were to deploy a small SaaS today I would probably run a dedicated server, Elixir, Phoenix, SQLite and Litestream and try my darndest to make the deployment process simplistic. I want very little mystery at the cost of needing to twiddle many of the knobs myself. The other approach would be something like Fly.io or Heroku which is a highly abstracted environment that takes care of many things for you. This is roughly the same level of abstraction as Kubernetes (kube or k8s for short) or similar massive infrastructure and operations management systems. Fly and Heroku are meant to take that work off of your plate and not show you the underpinnings. If you run k8s yourself you are also dealing with the underpinnings. Compared to the network stack or the OS kernel which are mostly abstractions that don't get in your way and that you rarely need to care about as an application developer I find managing things this way to be fairly leaky. Heroku straight up limits what you can do in a number of interesting ways. They compromised on developer capability for a smooth ops experience. Probably smart. Fly provides more capability but not quite as smooth an experience. Early days there, we'll see what their end-game trade-offs are. They also expose more knobs so you can't quite ignore the underpinnings the same way. And from what I gather from having tried to get going with k3s as a Kubernetes setup, it is not an experience of working with the abstraction. You are trying to make the abstraction happen. This is why most people recommend having someone manage k8s for you. If you don't manage it yourself you are ideally, mostly, dealing with the abstractions. I think this leakiness is an intrinsic property of operations and deployment. However, it could also be that we have not hit the right abstraction yet. This doesn't make k8s bad or wrong. A leaky and fiddly abstraction might not be fully satisfying but it can still provide tons of value. There are just a lot more trade-offs to consider there. Most of us don't consider whether we should use the network stack or an OS kernel. We take it as a given unless we're doing something very particular. Some people work in circumstances where doing k8s is a given, potentially with good reason, potentially not. I think people who consider it simpler are deluding themselves a bit, missing all the learning they've done to make it that comfortable. For most of us, this type of thing is a very real trade-off we should consider. K8s is an example here. We can scale this down to whether one should use containers. How one should go about CI/CD. The whole field of devops and ops is moving a lot and there is definitely some progress and some common mindshare building. From what I gather though is that there isn't a clear-cut best practice. Containers are mostly a given now. Like git has been a given for some time. Git is also not a perfect design or tool, but good enough that it can be taken for granted and is not a choice you typically have to think about. Containers are close to that but they are a source of pain and confusion in my experience. If it is the case that the messiness of deployment, operations and infrastructure is intrinsic to that part of the work I'm pretty keen on knowing the mess I deal with. Others will stack up abstractions until they mostly don't see the core mess. Both can be valid. It helps to know what you like. Do you kube? How do you get software onto servers? Let me know at lars@underjord.io or on Twitter where I'm @lawik. I appreciate you. Thank you for your time. - Lars Wikman |