toc/projects/knative/knative-incubation-proposal.md

15 KiB
Raw Permalink Blame History

Knative project proposal

Name of the project

Knative

Description

Knative is a set of serverless API that provides higher level abstractions that enables developers to be more productive by simplifying and extending the Kubernetes interfaces for common stateless application patterns.

Knative consists of two sets of APIs Serving and Eventing and includes a reference implementation and conformance tests for both the Serving and Eventing components. These two components provide a simplified (easier to learn) and enriched (more features, less effort) experience for developers writing HTTP and event-driven applications when compared with baseline Kubernetes objects.

Knative has also been a proving ground for several interesting Kubernetes-related innovations: higher-level multi-provider HTTP abstractions beyond the Ingress API, automatic sharding and leader election of controllers using inversion of control, and polymorphic usage of Kubernetes API resources (aka “duck typing”) as an extension mechanism.

Features

Knative Serving builds on Kubernetes to manage all aspects of the serverless application and function lifecycle, from deployment to scaling, routing, and provisioning SSL certificates. The primary resources of Serving are the Service, Route, Configuration, and Revision objects, which provide a clean abstraction for defining lifecycle and routing operations on an application. A pluggable networking layer backs these applications and functions with support from projects such as Istio, Ambassador, Contour, Kourier, Gloo, and many others.

Knative Eventing enables developers to configure event-driven architectures based on the CloudEvents HTTP binding. Event-driven architectures enable teams to decouple internal services in both time and interface, and seamlessly integrate with external event providers. Knative has enabled an ecosystem of event sources with common routing infrastructure using Broker and Trigger abstractions over multiple transports, enabling delivery to multiple destinations, including Knative Services, Kubernetes resources, and even VMs.

In addition to Serving and Eventing, all other parts of the Knative project in Github will be transferred to the CNCF documents, a client implementation, a Kubernetes operator, and any other materials in the child Knative repos.

Sponsor / Advisor from TOC

Davanum Srinivas (dims)

License

Knative is licensed under the Apache 2.0 license

Source control repositories

The specifications, reference implementation, clients, and tests are stored in public Github repositories as children under https://github.com/knative and all of the Knative Sandbox projects under https://github.com/knative-sandbox/.

External dependencies

From knative/serving go.mod:

  • Apache-2.0 cloud.google.com/go
  • Apache-2.0 contrib.go.opencensus.io/exporter/ocagent
  • Apache-2.0 contrib.go.opencensus.io/exporter/prometheus
  • Apache-2.0 contrib.go.opencensus.io/exporter/zipkin
  • Apache-2.0 github.com/Azure/azure-sdk-for-go
  • Apache-2.0 github.com/Azure/go-autorest/autorest
  • Apache-2.0 github.com/Azure/go-autorest/autorest/adal
  • Apache-2.0 github.com/Azure/go-autorest/autorest/date
  • Apache-2.0 github.com/Azure/go-autorest/autorest/to
  • Apache-2.0 github.com/Azure/go-autorest/autorest/validation
  • Apache-2.0 github.com/Azure/go-autorest/logger
  • Apache-2.0 github.com/Azure/go-autorest/tracing
  • Apache-2.0 github.com/aws/aws-sdk-go
  • Apache-2.0 github.com/census-instrumentation/opencensus-proto
  • Apache-2.0 github.com/docker/cli
  • Apache-2.0 github.com/docker/distribution
  • Apache-2.0 github.com/docker/docker
  • Apache-2.0 github.com/go-logr/logr
  • Apache-2.0 github.com/golang/glog
  • Apache-2.0 github.com/golang/groupcache
  • Apache-2.0 github.com/google/go-containerregistry
  • Apache-2.0 github.com/google/go-containerregistry/pkg/authn/k8schain
  • Apache-2.0 github.com/google/gofuzz
  • Apache-2.0 github.com/google/mako
  • Apache-2.0 github.com/googleapis/gnostic
  • Apache-2.0 github.com/influxdata/tdigest
  • Apache-2.0 github.com/matttproud/golang_protobuf_extensions
  • Apache-2.0 github.com/modern-go/concurrent
  • Apache-2.0 github.com/modern-go/reflect2
  • Apache-2.0 github.com/opencontainers/go-digest
  • Apache-2.0 github.com/openzipkin/zipkin-go
  • Apache-2.0 github.com/prometheus/client_golang
  • Apache-2.0 github.com/prometheus/common
  • Apache-2.0 github.com/prometheus/procfs
  • Apache-2.0 github.com/prometheus/statsd_exporter
  • Apache-2.0 github.com/vdemeester/k8s-pkg-credentialprovider
  • Apache-2.0 go.opencensus.io
  • Apache-2.0 gomodules.xyz/jsonpatch/v2
  • Apache-2.0 google.golang.org/genproto
  • Apache-2.0 gopkg.in/yaml.v2
  • Apache-2.0 k8s.io/api
  • Apache-2.0 k8s.io/apiextensions-apiserver
  • Apache-2.0 k8s.io/apimachinery
  • Apache-2.0 k8s.io/cloud-provider
  • Apache-2.0 k8s.io/component-base
  • Apache-2.0 k8s.io/klog
  • Apache-2.0 k8s.io/klog/v2
  • Apache-2.0 k8s.io/kube-openapi
  • Apache-2.0 k8s.io/legacy-cloud-providers
  • Apache-2.0 knative.dev/caching
  • Apache-2.0 knative.dev/hack
  • Apache-2.0 knative.dev/networking
  • Apache-2.0 knative.dev/pkg
  • Apache-2.0 knative.dev/serving
  • BSD-2-Clause github.com/gorilla/websocket
  • BSD-3-Clause github.com/evanphx/json-patch
  • BSD-3-Clause github.com/evanphx/json-patch/v5
  • BSD-3-Clause github.com/gogo/protobuf
  • BSD-3-Clause github.com/google/go-cmp
  • BSD-3-Clause github.com/google/go-github/v27
  • BSD-3-Clause github.com/google/go-querystring
  • BSD-3-Clause github.com/google/uuid
  • BSD-3-Clause github.com/grpc-ecosystem/grpc-gateway
  • BSD-3-Clause golang.org/x/crypto
  • BSD-3-Clause golang.org/x/oauth2
  • BSD-3-Clause golang.org/x/sync
  • BSD-3-Clause golang.org/x/sys
  • BSD-3-Clause golang.org/x/text
  • BSD-3-Clause golang.org/x/time
  • BSD-3-Clause google.golang.org/api
  • BSD-3-Clause google.golang.org/protobuf
  • BSD-3-Clause gopkg.in/inf.v0
  • ISC github.com/davecgh/go-spew
  • MIT github.com/beorn7/perks
  • MIT github.com/blang/semver/v4
  • MIT github.com/cespare/xxhash/v2
  • MIT github.com/docker/docker-credential-helpers
  • MIT github.com/form3tech-oss/jwt-go
  • MIT github.com/go-kit/log
  • MIT github.com/go-logfmt/logfmt
  • MIT github.com/gobuffalo/flect
  • MIT github.com/josharian/intern
  • MIT github.com/json-iterator/go
  • MIT github.com/kelseyhightower/envconfig
  • MIT github.com/mailru/easyjson
  • MIT github.com/sirupsen/logrus
  • MIT github.com/tsenart/vegeta/v12
  • MIT go.uber.org/atomic
  • MIT go.uber.org/automaxprocs
  • MIT go.uber.org/multierr
  • MIT go.uber.org/zap
  • MIT gopkg.in/yaml.v3
  • MIT sigs.k8s.io/yaml
  • MPL-2.0-no-copyleft-exception github.com/hashicorp/golang-lru

From knative/eventing go.mod:

  • Apache-2.0 cloud.google.com/go
  • Apache-2.0 cloud.google.com/go/storage
  • Apache-2.0 contrib.go.opencensus.io/exporter/ocagent
  • Apache-2.0 contrib.go.opencensus.io/exporter/prometheus
  • Apache-2.0 contrib.go.opencensus.io/exporter/zipkin
  • Apache-2.0 github.com/census-instrumentation/opencensus-proto
  • Apache-2.0 github.com/cloudevents/conformance
  • Apache-2.0 github.com/cloudevents/sdk-go/observability/opencensus/v2
  • Apache-2.0 github.com/cloudevents/sdk-go/v2
  • Apache-2.0 github.com/go-logr/logr
  • Apache-2.0 github.com/golang/glog
  • Apache-2.0 github.com/golang/groupcache
  • Apache-2.0 github.com/google/gofuzz
  • Apache-2.0 github.com/google/mako
  • Apache-2.0 github.com/googleapis/gnostic
  • Apache-2.0 github.com/influxdata/tdigest
  • Apache-2.0 github.com/matttproud/golang_protobuf_extensions
  • Apache-2.0 github.com/modern-go/concurrent
  • Apache-2.0 github.com/modern-go/reflect2
  • Apache-2.0 github.com/openzipkin/zipkin-go
  • Apache-2.0 github.com/prometheus/client_golang
  • Apache-2.0 github.com/prometheus/client_model
  • Apache-2.0 github.com/prometheus/common
  • Apache-2.0 github.com/prometheus/procfs
  • Apache-2.0 github.com/prometheus/statsd_exporter
  • Apache-2.0 github.com/spf13/cobra
  • Apache-2.0 github.com/wavesoftware/go-ensure
  • Apache-2.0 go.opencensus.io
  • Apache-2.0 go.opentelemetry.io/otel
  • Apache-2.0 gomodules.xyz/jsonpatch/v2
  • Apache-2.0 google.golang.org/genproto
  • Apache-2.0 google.golang.org/grpc
  • Apache-2.0 gopkg.in/yaml.v2
  • Apache-2.0 k8s.io/api
  • Apache-2.0 k8s.io/apiextensions-apiserver
  • Apache-2.0 k8s.io/apimachinery
  • Apache-2.0 k8s.io/apiserver
  • Apache-2.0 k8s.io/client-go
  • Apache-2.0 k8s.io/klog
  • Apache-2.0 k8s.io/klog/v2
  • Apache-2.0 k8s.io/kube-openapi
  • Apache-2.0 k8s.io/utils
  • Apache-2.0 knative.dev/eventing
  • Apache-2.0 knative.dev/hack
  • Apache-2.0 knative.dev/hack/schema
  • Apache-2.0 knative.dev/pkg
  • Apache-2.0 knative.dev/reconciler-test
  • Apache-2.0 sigs.k8s.io/structured-merge-diff/v4
  • BSD-2-Clause github.com/gorilla/websocket
  • BSD-2-Clause github.com/pkg/errors
  • BSD-3-Clause github.com/evanphx/json-patch
  • BSD-3-Clause github.com/evanphx/json-patch/v5
  • BSD-3-Clause github.com/fsnotify/fsnotify
  • BSD-3-Clause github.com/gogo/protobuf
  • BSD-3-Clause github.com/golang/protobuf
  • BSD-3-Clause github.com/google/go-cmp
  • BSD-3-Clause github.com/google/go-github/v27
  • BSD-3-Clause github.com/google/go-querystring
  • BSD-3-Clause github.com/google/uuid
  • BSD-3-Clause github.com/googleapis/gax-go/v2
  • BSD-3-Clause github.com/grpc-ecosystem/grpc-gateway
  • BSD-3-Clause github.com/imdario/mergo
  • BSD-3-Clause github.com/pmezard/go-difflib
  • BSD-3-Clause github.com/rickb777/date
  • BSD-3-Clause github.com/rickb777/plural
  • BSD-3-Clause github.com/rogpeppe/fastuuid
  • BSD-3-Clause github.com/spf13/pflag
  • BSD-3-Clause golang.org/x/crypto
  • BSD-3-Clause golang.org/x/net
  • BSD-3-Clause golang.org/x/oauth2
  • BSD-3-Clause golang.org/x/sync
  • BSD-3-Clause golang.org/x/sys
  • BSD-3-Clause golang.org/x/term
  • BSD-3-Clause golang.org/x/text
  • BSD-3-Clause golang.org/x/time
  • BSD-3-Clause golang.org/x/xerrors
  • BSD-3-Clause google.golang.org/api
  • BSD-3-Clause google.golang.org/protobuf
  • BSD-3-Clause gopkg.in/inf.v0
  • BSD-3-Clause gopkg.in/tomb.v1
  • ISC github.com/blendle/zapdriver
  • ISC github.com/davecgh/go-spew
  • MIT github.com/beorn7/perks
  • MIT github.com/blang/semver/v4
  • MIT github.com/go-kit/log
  • MIT github.com/go-logfmt/logfmt
  • MIT github.com/gobuffalo/flect
  • MIT github.com/josharian/intern
  • MIT github.com/json-iterator/go
  • MIT github.com/kelseyhightower/envconfig
  • MIT github.com/mailru/easyjson
  • MIT github.com/mitchellh/go-homedir
  • MIT github.com/nxadm/tail
  • MIT github.com/onsi/ginkgo
  • MIT github.com/pelletier/go-toml/v2
  • MIT github.com/robfig/cron/v3
  • MIT github.com/stretchr/testify
  • MIT github.com/tsenart/vegeta/v12
  • MIT github.com/valyala/bytebufferpool
  • MIT go.uber.org/atomic
  • MIT go.uber.org/automaxprocs
  • MIT go.uber.org/multierr
  • MIT go.uber.org/zap
  • MIT gopkg.in/yaml.v3
  • MIT sigs.k8s.io/yaml
  • MPL-2.0 github.com/hashicorp/golang-lru
  • MPL-2.0-no-copyleft-exception github.com/hashicorp/go-cleanhttp
  • MPL-2.0-no-copyleft-exception github.com/hashicorp/go-retryablehttp

Issue tracker

Serving: https://github.com/knative/serving/issues

Eventing: https://github.com/knative/eventing/issues

See the github issue lists under each Knative Sandbox project: https://github.com/knative-sandbox/

Initial committers

Reference https://github.com/knative/community/tree/main/OWNERS_ALIASES and https://github.com/knative/community/tree/main/peribolos/knative.yaml

Infrastructure requirements (CI / CNCF Cluster)

Currently using Prow infrastructure donated by Google and GitHub Actions; plan to migrate to community-owned Prow instances and (where possible) prefer GitHub Actions for automation.

In addition to the above infrastructure, nightly and release images (and test logs) are stored in gcr.io and Google Cloud Storage

Statement on alignment with CNCF mission

Knative's mission is to build a cloud-native layer for serverless workloads on top of Kubernetes. This mission is closely aligned with the CNCF's mission to make cloud-native computing ubiquitous. We also believe that fostering a vendor-neutral project with open governance will lead to the most innovation and that we can make serverless workloads accessible to all. CNCFs definition of cloud native technologies (“Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds”) is exactly the area that Knative targets by making it easy to build scalable applications in virtually any environment.

Communication channels

Mailing lists:

Knative.team GSuite domain and shared folder

https://slack.knative.dev/

Website

https://knative.dev/

Release methodology and mechanics

Release is automated via Prow jobs which trigger on the presence of release branches. Configuration is here:

Documentation is here: https://github.com/knative/release (this is a project-wide release train)

The current release versioning mechanism is described in this document. The TL;DR:

Releases branches are created as release-1.x, and tagged as knative-1.x.y for release artifacts and v0.27+x.y for go module imports to avoid semantic versioning problems.

Specifications

Security processes

See Vulnerability Disclosure Response Policy

Roadmap

Each Working Group maintains its own roadmap; the Knative TOC reviews working group roadmaps and status on a quarterly basis (rotating, week-by-week)

Social media account

Twitter: https://twitter.com/KnativeProject

YouTube: https://www.youtube.com/c/KnativeProject

Community size

As of Nov 16, 2021 Knative has over 1893 contributors to the projects repository.

Vendors like Google, IBM, Red Hat, SAP, TriggerMesh, and VMware, plus staff from more than 40 additional companies are actively engaged with the project and its community.

Adopters include Blue Origin, DeepC, Liquidx, Optum, Puppet and many other companies. See ADOPTERS.MD for a list of over 20 publicly-announced adopters and read Knative Case Studies on its website.

Knative project has over 7,500 GitHub stars across its repositories.

The project also hosts monthly community meetups with 20-30 of attendees.