DHH: Make Software Simple Again
shiftmag.dev
shiftmag.dev
Extremely basic, context-less example; If I want to have my EC2 boot from an image, I build an AMI, then I put that ARN into a config file or similar and off we go. As a once off thing I would also need to configure some other basic stuff like a VPC, security groups, gateways etc but there's not necessarily any ongoing overheads from that. We're looking at a few config files in total without any specialist knowledge being necessary.
If I want my Supermicro/Quanta/Dell to boot from an image in a similar fashion I have to build the image, I have to host the image, I have to make it available on the network, I have to configure DHCP, I have to configure the BMC (and Redfish is probably not implemented quite right, lets be honest here), then I can boot from it.
Once that's done I've also got to maintain; the host, the BMC and it's firmware, credentials for said BMC (securely), other firmware on the system, the entire network (securely) and a bunch of other stuff I probably haven't even considered. All requiring at least one, arguably two additional domains of knowledge on top of what a normal developer would typically have + a significant up front and ongoing time commitment.
Running your own machine is definitely simpler because you can debug a problem all the way down to bare metal. Not easier, but simpler.
That said, the more I do this stuff, the more I want simple, not easy. Easy is good when you're on the happy path, but as soon as something goes wrong, you wish it was simple instead.
In an ideal world, all the guts are exposed, but in the clearest, most organized way possible, where you always have an option to go one level deeper if you want. This would be great to have in both software interfaces and software design (code).
I think a more fair example is that you somehow provision your VM’s semi-automatically, and you may or may not have Proxmox/Hyper-V/ESX image to populate your physical servers. If you go to maintaining your own infra, you’d still use virtual machines for the actual workloads probably.
But do you need to boot a custom image?
37signal's move off of cloud revolved around the idea of shoving everything into containers and deploying the containers using something like a cross between docker-compose and capistrano. The host OS barely matters at this point.
A scenario like yours is more the outlier than the norm, at least from my experience.
You still need to boot from something custom or otherwise, and that something needs to be updated and maintained. Realistically it's probably going to be slightly more on the custom side once you take into account drivers for special snowflake stuff like fancy NIC's and storage controllers.
The OS itself is largely irrelevant, but managing the consistency its state (or lack thereof) and configuration across a fleet is quite important IMO. When you're talking bare metal you have a lot of other security holes you need to deal with as well; BMC's, firmware, drivers etc all need to be kept up to date (and tested).
> As a once off thing I would also need to configure some other basic stuff like a VPC, security groups, gateways etc
In a simple setup, you don't really need to do that either, except for a basic reverse proxy setup.
> If I want my Supermicro/Quanta/Dell to boot from an image in a similar fashion I have to build the image, I have to host the image,
Or just download the latest LTS Ubuntu image from their site and dd it to a USB drive. I've done it dozens of times for production systems. If you want to get fancy, you can do PXE boot, but it's IMO not worth it until you get past hundreds of servers. You really don't need to do this.
> I have to make it available on the network, I have to configure DHCP
So plug in the some cables and... change nothing in the settings? Pretty much every Linux OS image expects DHCP out of the box. You might need to configure a static IP if your DC doesn't provide a DHCP server for you, but realistically this isn't a problem.
> I have to configure the BMC (and Redfish is probably not implemented quite right, lets be honest here), then I can boot from
You still don't need to do this. Pretty much every BNC lets you directly upload an image to boot from one time. It's not something worth doing unless you're at a pretty massive scale.