December 11, 2018 | Written by: Jason McGee
Categorized: Compute Services
Share this post:
Unifying containers, apps, and functions
At KubeCon in December 2018, Jason McGee, IBM Fellow, VP, and CTO of the IBM Cloud Platform, delivered an address about how IBM is unifying containers, functions, and apps through the IBM Cloud Kubernetes Service and key open source projects like Knative and Istio. This blog post is a summary of Jason’s address:
Cloud-native developers today have to decide between three separate container platforms. Some choose the flexibility of containers with Kubernetes, others the velocity of an opinionated platform like Cloud Foundry, and some believe the future is all about serverless functions. How do you know which ones to use? And should you have to pick?
I want to share with you a vision for the marriage of containers, apps, and functions—driven by Kubernetes, Istio, and the emergence of Knative—into a single combined container application platform. It’s time to break down the silos and see how these projects’ paths are converging to solve real microservice dilemmas: security, scale, and operations.
The platform challenge
I started my career 20+ years ago working on Java Application Servers. Application servers provided a platform for developers to efficiently build and run applications without having to solve all the plumbing problems. This might seem like a long time ago, but today, this community is solving the same platform challenge in the era of cloud. And we are doing it together in open source.
In any realistic application development project, you have different requirements that drive your different solution models. Some components of your application might be stateless web applications. Some components are stateful databases. Some are more event-oriented. Some components need high flexibility and some are simpler.
An effective runtime platform lets you handle all these requirements. In the cloud-native world today, we support three main styles of application components:
- 12–factor applications
There are open and proprietary solutions addressing each style, from Cloud Foundry for 12-factor applications, to Kubernetes with container management, and OpenWhisk, AWS Lambda, and others for functions. The challenge is that we have mostly been building these three styles as three independent stacks. This has forced developers to pick sides. It has forced technology to get more complex as it attempts to handle all three styles at the same time. And it has complicated development projects as people try to mix dissimilar systems.
Over the last few years, we have made a lot of progress on joining forces and agreeing to some common elements in the stack, including container runtimes (docker, garden, runc, Rkt -> Containerd) and container orchestration (Docker Swarm, Nomad, Mesos, etc -> Kubernetes).
And we have quickly agreed on new things together, including open service brokers/service catalog and service mesh and sidecars with Istio and Envoy
What about apps and functions? Most of our work and agreements have been at the level of containers on down. What’s next is to complete the stack with a common view for applications and functions.
Cloud Foundry (CF) is already the most prominent application platform for cloud-native. It’s already aligned on containerd, it pioneered service brokers, and it is in the process of incorporating Istio. With the Eirini project, Cloud Foundry will be able to better leverage Kubernetes as its orchestration layer. That is critical to getting us to a single stack.
What’s missing is alignment around a build model that works for CF and for Kubernetes . . .
With functions, the landscape is fragmented. There are many products and projects, each with different approaches for handling concurrency and scale. Some are aligned around Kubernetes, but many aren’t. Among the main cloud providers, everyone has a Functions-as-a-Service (FaaS) offering: AWS Lambda, IBM Cloud Functions, Azure Functions, and Google Cloud Functions. In the open source community, there are many active projects: OpenFaaS, Nuclio, Effe, Pivotal Functions, Fn Project, Kubeless, OpenWhisk, Fission, Iron.io, Gestalt, OpenLambda, etc.
Some of these, like IBM Cloud Functions, OpenFaaS, Kubeless, etc., run on top of Kubernetes. Some don’t. What’s missing is alignment around a build and run model that takes advantage of Kubernetes.
And that’s where Knative fits in.
Knative and running serverless platforms on Kubernetes
Knative gives us the building blocks for serverless platforms to run on top of Kubernetes. The Knative project is an opportunity for the community to work together on bringing apps and functions into the stack in a common way and reducing fragmentation for developers.
“In July, we introduced Knative, an open source serverless platform based on Kubernetes that provides critical building blocks for modern serverless applications,” said Oren Teich, Director of Product Management, Google Cloud. “In the four months since then, we have seen tremendous enthusiasm from contributing companies, many of whom are furthering Knative as the serverless standard for hybrid and multicloud users. IBM has been a contributor to Knative from the start, and the expanded support for Knative through the IBM Cloud Kubernetes Service is a key outcome of our joint open source efforts.”
Knative focuses on the “boring but difficult” parts that everyone needs, but no one benefits from doing over and over again on their own. This, in turn, frees developers to spend more time writing application code, not worrying about how they are going to build, deploy, monitor, and debug it.
A unified container application platform
The end state is a unified container application platform that lets developers leverage the best of containers, apps, and functions in a single integrated way without edges and lets us, as a community, work together to enable the next 20 years of applications.
Kubernetes is the core of IBM Cloud. We’ve spent the past year migrating many of our core IBM Cloud services to Kubernetes. Now is the time to leverage Kubernetes and unify containers, apps, and functions using technology like Knative and Istio. At IBM Cloud, we are excited to help make this vision a reality. With services like the IBM Cloud Kubernetes Service, Cloud Foundry Enterprise Environment, IBM Cloud Functions, and IBM Cloud Private, we are delivering this modern stack today in our public and private clouds.
Come and give it a try.