How do you deal with the few minutes of downtime when you do kernel/OS/software upgrades?
Depending on the deployment and any SLAs, I either don't worry about it (just do a late night rollout when nobody is on the system) or rely on my deployment architecture's sibling checks (I can see when a given machine is still versioning and requeue subsequent rollouts to other machines).
I’m pretty sure for most systems that does not matter in the slightest.
You spin up a second host and load balance
How is this an issue in a world where load balancers exist? I was part of a Unicorn that ran prod on 8 boxes and literally never had customer facing outages due to infrastructure updates.
You put nginx or Haproxy in front of the hosts, drop the one that needs maint from the pool, and re-add once it’s ready.