I’m going to start by apologizing for not saying anything new. This blog is not going to change how you view the world. Everything here has been said in some form someplace else. So why write it? Because we felt that since we think these things are important we should say so. (Oh, and this is a photo from a real business called “Containerland”. Cross my heart. The Internet is a wonderful thing.)
Image credit: Yelp
So, with that, off we go…
As you probably have experienced yourselves, with the rise of containers and Kubernetes, IT has seen an upleveling of the operational environment on which applications can be deployed while developers have seen a boost in velocity. This kind of upleveling was a natural partner to the heterogeneity of infrastructure brought about by cloud — developers and operators needed the kind of portability that containers provided to ensure that applications could be run in multiple environments. Kubernetes has emerged as the de facto container cluster management technology and provides the operational underpinning for robust distributed systems, which provide the foundation of a growing percentage of new scalable application workloads. This means that developers can focus more on business logic and less on complex distributed system engineering.
However, there is a cost in the form of additional complexity in IT. With all the environments that are available to enterprises, how do you determine where to deploy a specific application, let alone manage different environments, APIs, image formats, best practices, and governance? Also, while Kubernetes is a great technology, who provides a full production ready solution? Production ready enterprise solutions provide options and assurances for the “boring” stuff that is critical to keeping systems alive — logging, monitoring, alerting, backup/recovery, persistent storage, networking integrations, security, lifecycle management, etc.
While the enterprise IT landscape has shifted, a need to be enterprise grade has not. What does that mean in this Kubernetes controlled container world?
- End-to-end solutions only need apply: Kubernetes provides an upleveled and highly dynamic operational environment for application deployment. This exacerbates the existing infrastructure needs for logging, monitoring, alerting, backup / restore, and network provider integration. And, while workloads may be ephemeral, data is not; there is still a need for persistent data stores. A complete end-to-end solution needs to combine container goodies with the tools to make them work.
- Integration flexibility is needed because your enterprise is different from their enterprise: While there are enterprise container management platforms that target production-ready Kubernetes, many of these solutions are highly opinionated. “Batteries included” is a valuable design principle to ensure that any enterprise can see value quickly with a platform, but batteries (and other piece parts) should be easy to swap out. For example, an enterprise may want to use their own corporate standard security hardened base OS; they may want to run it on bare metal, instead of requiring vCenter or KVM; they may want to integrate with their own load balancer solutions such as F5 or Avi Networks to maintain operational consistency or cross visibility with other application stacks. A modern platform needs to let users control the composition of the system that they deploy.
- Everybody deserves “as a service”-style lifecycle management: Kubernetes has a vibrant technology community, so the release life cycle is fast. Every quarter there is a new release to bring in new features, and in between there are additional patch releases. However, this means that releases become obsolete and unsupported by the community quickly. A true enterprise-ready container management platform needs to allow users to consume the platform as a service, with the upgrades, management, and maintenance part of the core offering, rather than a burden that you have to plan around.
- Scale is a new fact of life and container management systems need to be built for it: Managing and maintaining single Kubernetes clusters is difficult enough, but many enterprises don’t have just one cluster. In addition to managing and maintaining a single cluster well, a modern container management platform needs to scale to all your clusters no matter where they are, helping you ensure governance and policy consistency and the best performance for your application.
- A cloud is a cloud is a cloud: Kubernetes is a technology that is equally at home in the various public and private clouds that enterprises utilize. A modern solution needs to appreciate this fact and simplify user lives by treating each deployment option as an extension of the user’s overall operating environment.
- Security is… important: While this statement shouldn’t require explanation in principle, providing security in a complex platform is a multilayered endeavor and your solutions should be built and maintained that way.
So with all that, did you learn anything new here? Probably not. But hopefully at the end of it you said some form of, “yeah, I believe a lot of that, too”.