An application that receives occasional requests may not need to run the same number of containers all day. Serverless platforms hide some server management from application developers and can adjust application capacity as work arrives. When you run one on Kubernetes, your team still needs to operate the underlying cluster or use a managed service for it.

Knative Serving deploys and routes traffic to containerized services and can scale them with incoming requests, including to zero when configured for it. KEDA connects event sources such as queues to workload scaling. These are different jobs: choose Knative when you need its request-serving behavior; use KEDA when workers should scale according to waiting events. Neither removes the need to handle retries or to measure how long a stopped application takes to start.

Separate functions from the platform they require

Serverless on Kubernetes still leaves someone operating the cluster, networking, scaling and observability. Decide whether the workload needs an event-triggered function, request-driven scale-to-zero, a job runner or an inference service before comparing platforms.

Knative Serving and event-driven scaling tools solve different parts of this space. Kubeless is no longer actively maintained by its original upstream. Review current project ownership and deployment requirements for every historical entry. Measure cold starts, request buffering, retry/idempotency and idle infrastructure cost. A function working once is not proof that repeated events or scale-down will preserve work.

The original record

Historical Kubedex content

Original publication: 2018-09-16T14:57:33+00:00. Preserved for context. Commands, versions, prices and results below reflect the original research.

Kubeless vs Fission vs OpenFaas vs Nuclio vs Knative vs Fn vs Apache OpenWhisk

Running serverless applications on Kubernetes is quite new. Most of the options available are still under major development.

You can find the ever growing number of FaaS platforms that run on top of Kubernetes in our FaaS category.

Historical illustration

At lot of the value proposition people are seeing from using AWS Lambda, to quickly string together batch operations, don’t transfer well to Kubernetes. It is currently quicker and easier to simply use containers for this scenario. Similarly, pushing functions straight to Kubernetes provides little more value than wrapping kubectl deployments.

I expect this to change over time as interfaces standardise. Until that happens I’m taking a bit of a back seat and observing while continuing to play with the technology.

If you’re looking for an in-depth comparison of the current state of serverless right now then TheNewStack has produced a great eBook on the subject. I’d suggest that you download this and use that to form your opinion. This picture came from the eBook, and there are many other interesting data points inside.

Historical illustration unavailable.

Kubeless and OpenFaas seem to be neck and neck. This lines up with my experience when browsing forum posts.

OpenLambda doesn’t seem to be Kubernetes specific but it’s interesting that people are voting for it. Similarly, AppScale appears to be better suited to running on cloud instances.

Dispatch is actually a framework. It will let you write functions that deploy on top of Knative. Similar to how the serverless framework will abstract where you can deploy to.

Lunchbadger looks like a paid product. They have a cool name so it may be worth taking a look.

 

Platforms I’m evaluating

You may have heard about Knative which is a new platform from Google built on top of Istio.

OpenFaas has a great community and lots of activity and is backed by VMWare.

Apache OpenWhisk is incubating but according to popularity stats this has the most contributors currently.

Kubeless, Fission, Fn and Nuclio all have very interesting integrations and architectures.

Platforms I’m not testing (yet)

Rainbond is being developed by a Chinese team but looks like it’s under constant development.

BlueNimble, Gestalt and Riff look really early in development. I’ll try these out when they become more mature and have more contributors.

Sanfran and Iron Functions look abandoned or temporarily stalled.

 

My Recomendation

I’d just wait and see what becomes the standard. If I was a gambling man I’d put money on Google with their Knative framework in the long run. If forced at gunpoint to install something tomorrow it would probably be Kubeless although I don’t really see the value beyond appeasing a manager who has fallen for the hype.

 

Historical workbook values; blanks mean unknown, not No. Prices, versions, maturity labels and feature claims are not current recommendations.

Kubernetes FaaS / Sheet1 (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes FaaS / Sheet1 (historical)
Feature / source labelAWS LambdaKnativeOpenFaaSOpenWhiskFissionKubelessNucliofn
Supported LanguagesJava, NodeJS, C#, Python, GoUnknownAnyNodeJS, Swift, Java, Go, Scala, Python, PHP and Ruby. Or Docker and native binary (any)UnknownUnknownUnknownUnknown
PackageZipUnknownDockerUnknownUnknownUnknownUnknownUnknown
PlatformAWSUnknownKubernetes, Docker SwarmKubernetes, Mesos, ComposeUnknownUnknownUnknownUnknown
CLIYesUnknownYesYesUnknownUnknownUnknownUnknown
Web UIYesUnknownYesNoUnknownUnknownUnknownUnknown
AutoscaleYesUnknownYesYesUnknownUnknownUnknownUnknown
Prometheus IntegrationYesUnknownYesNoUnknownUnknownUnknownUnknown
Written In-UnknownGoScalaUnknownUnknownUnknownUnknown
License-UnknownMITApache2UnknownUnknownUnknownUnknown
SecurityIAMUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Event Source MappingYesUnknownNoUnknownUnknownUnknownUnknownUnknown
Scheduled EventsYesUnknownNoYesUnknownUnknownUnknownUnknown
Async FunctionsYesUnknownYesUnknownUnknownUnknownUnknownUnknown
Multi TenantUnknownUnknownUnknownYesUnknownUnknownUnknownUnknown
Remote Debug3rd partyUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Independent Function SchedulerYesNoNoUnknownYesNoUnknownUnknown
Max timeout5 minUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Temporary disk space (/tmp)512 MBUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Metricssome (CloudWatch Metrics)UnknownUnknownUnknownUnknownUnknownUnknownUnknown
Centralized logsCloudWatch LogsUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Fine-grained authorizationIAMUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Group functionsnoUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Included librariesAWS SDKUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Max. code package size (compressed)50 MBUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Online IDErich (Cloud9)UnknownUnknownUnknownUnknownUnknownUnknownUnknown
Local deployment toolSAMUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Edge capabilitiesyesUnknownUnknownUnknownUnknownUnknownUnknownUnknown
VPC supportyesUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Shared file system supportnoUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Disable Internet access explicitly (non VPC)noUnknownUnknownUnknownUnknownUnknownUnknownUnknown
GitCodeCommitUnknownUnknownUnknownUnknownUnknownUnknownUnknown
AuthenticationCognitoUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Platform eventsCloudWatch EventsUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Platform governanceConfigUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Voice assistantAlexaUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Conversational InterfacesLexUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Infrastructure as CodeCloudFormationUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Programmable buttonIoT ButtonUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Centralized logsCloudWatch LogsUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Fine-grained authorizationIAMUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Group functionsnoUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Included librariesAWS SDKUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Max. code package size (compressed)50 MBUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Online IDErich (Cloud9)UnknownUnknownUnknownUnknownUnknownUnknownUnknown
Local deployment toolSAMUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Edge capabilitiesyesUnknownUnknownUnknownUnknownUnknownUnknownUnknown
VPC supportyesUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Shared file system supportnoUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Disable Internet access explicitly (non VPC)noUnknownUnknownUnknownUnknownUnknownUnknownUnknown
https://cloudonaut.io/comparing-serverless-offerings-from-alibaba-cloud-and-awsUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknown

50 rows

Sources & further reading

  1. Knative Serving
  2. Kubeless lifecycle notice
  3. KEDA scaling concepts
  4. Recovered historical source
  5. Kubernetes FaaS: historical workbook

Spotted something that needs another look?

Help improve this page →