Convert Figma logo to code with AI

knative logoserving

Kubernetes-based, scale-to-zero, request-driven compute

5,543
1,154
5,543
208

Top Related Projects

15,712

Application Kernel for Containers

An open and reliable container runtime

109,710

Production-Grade Container Scheduling and Management

35,857

Connect, secure, control, and observe services.

23,940

Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

24,977

OpenFaaS - Serverless Functions Made Simple

Quick Overview

Knative Serving is an open-source Kubernetes-based platform for deploying and managing serverless workloads. It provides a set of objects as Kubernetes Custom Resource Definitions (CRDs) for defining and controlling how your serverless workloads behave on the cluster. Knative Serving focuses on the deployment and automatic scaling of containerized applications.

Pros

  • Automatic scaling, including scale-to-zero functionality
  • Traffic splitting and blue/green deployments
  • Integration with various cloud providers and on-premises environments
  • Simplified developer experience for deploying serverless applications

Cons

  • Steep learning curve for those new to Kubernetes
  • Requires a Kubernetes cluster, which can be complex to set up and maintain
  • May be overkill for simple applications or small-scale deployments
  • Limited support for stateful applications

Getting Started

To get started with Knative Serving, follow these steps:

  1. Install Kubernetes on your cluster or local machine
  2. Install Knative Serving using the following commands:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.10.1/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.10.1/serving-core.yaml
  1. Install a networking layer (e.g., Kourier):
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.10.0/kourier.yaml
kubectl patch configmap/config-network \
  --namespace knative-serving \
  --type merge \
  --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
  1. Deploy a sample application:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go
          env:
            - name: TARGET
              value: "World"

Save this YAML to a file (e.g., service.yaml) and apply it with:

kubectl apply -f service.yaml

This will deploy a simple "Hello World" application using Knative Serving.

Competitor Comparisons

15,712

Application Kernel for Containers

Pros of gVisor

  • Provides stronger isolation and security for containerized applications
  • Offers a lightweight alternative to full virtual machines
  • Supports running unmodified Docker containers

Cons of gVisor

  • May introduce performance overhead compared to native containers
  • Limited compatibility with certain system calls and kernel features
  • Requires specific configuration and setup for integration

Code Comparison

gVisor (runsc):

func (c *Container) Start(ctx context.Context) error {
    c.mu.Lock()
    defer c.mu.Unlock()
    return c.startLocked(ctx)
}

Knative Serving:

func (r *Reconciler) reconcile(ctx context.Context, rev *v1.Revision) error {
    logger := logging.FromContext(ctx)
    rev.Status.InitializeConditions()
    return r.reconcileDigest(ctx, rev)
}

Key Differences

  • gVisor focuses on container runtime security, while Knative Serving is a serverless platform for Kubernetes
  • gVisor operates at a lower level, providing a sandboxed environment for containers
  • Knative Serving abstracts away infrastructure management for deploying and scaling applications

Use Cases

  • gVisor: Enhancing security for multi-tenant container environments
  • Knative Serving: Building and deploying serverless applications on Kubernetes

Community and Adoption

  • Both projects have active communities and are widely used in production environments
  • gVisor is primarily maintained by Google, while Knative has a broader set of contributors

An open and reliable container runtime

Pros of containerd

  • Lower-level container runtime with broader ecosystem support
  • More lightweight and focused on core container operations
  • Widely adopted in production environments, including Kubernetes

Cons of containerd

  • Lacks built-in serverless capabilities
  • Requires additional components for advanced deployment features
  • Less opinionated, potentially requiring more configuration

Code Comparison

containerd (simplified container creation):

client, _ := containerd.New("/run/containerd/containerd.sock")
image, _ := client.Pull(ctx, "docker.io/library/redis:alpine")
container, _ := client.NewContainer(ctx, "redis-server", containerd.WithNewSpec(oci.WithImageConfig(image)))

Knative Serving (simplified service deployment):

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go
          env:
            - name: TARGET
              value: "World"

Summary

containerd is a lower-level container runtime focusing on core container operations, while Knative Serving provides a higher-level abstraction for serverless deployments. containerd offers broader ecosystem support and is more lightweight, but Knative Serving provides built-in serverless capabilities and simplified deployment configurations out of the box.

109,710

Production-Grade Container Scheduling and Management

Pros of Kubernetes

  • More mature and widely adopted platform for container orchestration
  • Offers greater flexibility and control over infrastructure and workloads
  • Extensive ecosystem with a large number of tools and integrations

Cons of Kubernetes

  • Steeper learning curve and more complex setup
  • Requires more manual configuration and management
  • Higher resource overhead for smaller deployments

Code Comparison

Kubernetes manifest example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest

Knative Serving manifest example:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: myapp
spec:
  template:
    spec:
      containers:
      - image: myapp:latest

Knative Serving simplifies the deployment process by abstracting away many of the lower-level Kubernetes concepts, resulting in more concise configuration files. However, this abstraction may limit fine-grained control over certain aspects of the deployment compared to native Kubernetes manifests.

35,857

Connect, secure, control, and observe services.

Pros of Istio

  • More comprehensive service mesh capabilities, including traffic management, security, and observability
  • Broader ecosystem support and integration with various cloud platforms
  • More mature project with a larger community and extensive documentation

Cons of Istio

  • Higher complexity and steeper learning curve
  • Increased resource overhead due to its extensive feature set
  • May be overkill for simpler microservices architectures

Code Comparison

Istio (Traffic routing):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service
  http:
  - route:
    - destination:
        host: my-service
        subset: v1
      weight: 75
    - destination:
        host: my-service
        subset: v2
      weight: 25

Knative Serving (Traffic splitting):

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-service
spec:
  traffic:
  - revisionName: my-service-00001
    percent: 75
  - revisionName: my-service-00002
    percent: 25

Both projects offer traffic management capabilities, but Istio provides more granular control over routing and load balancing, while Knative Serving focuses on simplifying deployment and scaling of serverless applications.

23,940

Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Pros of Dapr

  • More comprehensive microservices framework, covering state management, pub/sub, and more
  • Language-agnostic with SDKs for multiple programming languages
  • Easier to get started with for developers new to microservices

Cons of Dapr

  • Less mature and battle-tested compared to Knative Serving
  • Potentially more complex setup due to its broader feature set
  • May introduce additional overhead in some scenarios

Code Comparison

Dapr:

from dapr.clients import DaprClient

with DaprClient() as client:
    # Using Dapr's state management
    client.save_state(store_name="statestore", key="mykey", value="myvalue")

Knative Serving:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go
          env:
            - name: TARGET
              value: "World"

This comparison highlights the different focus areas of the two projects. Dapr provides a more comprehensive microservices framework with built-in features like state management, while Knative Serving concentrates on serverless deployments and autoscaling of containers.

24,977

OpenFaaS - Serverless Functions Made Simple

Pros of OpenFaaS

  • Simpler setup and deployment process
  • Supports multiple languages and platforms out-of-the-box
  • Easier to get started for developers new to serverless

Cons of OpenFaaS

  • Less integrated with Kubernetes ecosystem
  • Fewer advanced features for complex scenarios
  • Smaller community and ecosystem compared to Knative

Code Comparison

OpenFaaS function example:

version: 1.0
provider:
  name: openfaas
  gateway: http://127.0.0.1:8080
functions:
  hello-world:
    lang: python
    handler: ./hello-world
    image: hello-world:latest

Knative service example:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello-world
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go
          env:
            - name: TARGET
              value: "World"

Both examples show how to define a simple function or service. OpenFaaS uses a custom YAML format, while Knative leverages Kubernetes-native resources. OpenFaaS focuses on simplicity, while Knative provides more advanced configuration options within the Kubernetes ecosystem.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Knative Serving

go.dev reference Go Report Card Releases LICENSE Slack Status codecov CII Best Practices

Knative Serving builds on Kubernetes to support deploying and serving of applications and functions as serverless containers. Serving is easy to get started with and scales to support advanced scenarios.

The Knative Serving project provides middleware primitives that enable:

  • Rapid deployment of serverless containers
  • Automatic scaling up and down to zero
  • Routing and network programming
  • Point-in-time snapshots of deployed code and configurations

For documentation on using Knative Serving, see the serving section of the Knative documentation site.

For documentation on the Knative Serving specification, see the docs folder of this repository.

If you are interested in contributing, see CONTRIBUTING.md and DEVELOPMENT.md. For a list of all help wanted issues across Knative, take a look at CLOTRIBUTOR.