Chapter 2. Tackling the Code
Kubernetes is a system for containerized apps. It allows us to decouple our apps from their scheduling layer, but it asks for discipline from us in return. A big benefit of Kubernetes is being able to declaratively specify what you want and let the “brain” of Kubernetes handle the heavy lifting of ensuring everything gets arranged correctly. The effort to port applications to the Kubernetes model eventually starts paying off quite quickly, but a Kubernetes migration can’t be performed in a day—there are several hurdles your team will have to clear first.
In this section, we’ll discuss the practical concerns your team will encounter as you move forward with tackling the challenges of a technical rollout of containers and how to address them.
Separation of Concerns
Traditionally, the applications you were responsible for and the manner in which you ran them in production tended to get conflated, with fuzzy separation between how the app was defined and how the app was run. For instance, vital configuration might live inside a database table instead of in a version-controlled system. Because traditional deployments often become a mishmash of code that is over-specific to the environment they’re run in, porting applications from one environment to another can require a massive investment of engineering resources. When the underlying platform is not cleanly designed, the temptation is strong to make architectural compromises and reach directly into backing ...