In the course of moving our applications to Kubernetes, we noticed a few analogies to parenthood.
Applications start small and need little space to be happy: a small bare-metal server
is more than enough. It's easy to access them, they're usually at the same place you left them. A quick ping
will check they're doing OK, and if you want to find out what's going on behind the front-end then a brief ssh
is all you need.
As they start to grow these enclosures become too small. Initially you applaud their development and help them explore new geographies with a couple of new servers. Complexity is almost the same, and it actually helps you address concerns such as disaster-recovery location diversification
But they keep growing. The more they want to break free, the more you doubt the next move. It all seems so complicated. What if they get lost and have a problem? Will you be able to help? Will you even find them? Finally, you take the leap and let them get onto a container orchestrator
Life changes... Communication is harder: now you need to announce yourself with ingresses
and interact through weird deployment
facades. You never know where they are, you're not even sure how many there are, it seems like a small miracle when they respond after 3-4 service
bounces. They're more distant than before. Gone are the days when you would access their command line. Now it's all about keeping secrets
, predefined configmaps
and resource quotas
But goodness: the things they can do
! They scale at the flick of a variable, they become resilient to hardware failures, they seamlessly jump from local machine to private cloud, they're never off even when they upgrade. In short they turn into something you don't quite comprehend, that scares you a bit, but that also makes you proud.