Skip to content

Knative Serving release v0.2.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@mattmoor mattmoor released this 30 Oct 20:59
· 8 commits to release-0.2 since this release

Meta

Pluggability:

We have made significant progress “under the hood” encapsulating the major subsystems of knative/serving in an effort to support pluggability (e.g. replace Istio). Our core resources now configure these subsystems: Networking, Autoscaling, and Caching via new internal APIs.

Looser Coupling:

We have spent considerable effort working to ensure that all knative components are usable in isolation, and splitting out our release artifacts into the smallest units we can. For instance, you can now install and use knative/serving without knative/build, and even plug in alternative Build CRDs!

Our release now consists of:

  • serving.yaml: just the knative/serving components.
  • build.yaml: just knative/build’s 0.2.0 release
  • monitoring*.yaml: a number of different configurations of our monitoring stack.
  • istio*.yaml: two configurations of our Istio stack, one with sidecar injection and one without.
  • release*.yaml: similar bundles to last release

Autoscaling

New shared autoscaler (special thanks to @glyn @markusthoemmes)

We have replaced the previous per-Revision autoscalers with a single shared autoscaler. This autoscaler is based on the same logic as the previous autoscaler, but has evolved to be purely metrics driven (including 0->1->0), eliminating the unnecessary Revision servingState field.

Introduced the ContainerConcurrency field

We have replaced ConcurrencyModel (Single or Multi) with an integer ContainerConcurrency field. This allows limiting concurrency to values other than 1 for certain use cases (e.g. limited thread pools).

  • 1 is the new Single.
  • 0 is the new Multi (no limit).

Example:

spec:
  containerConcurrency: 1
  container:
    image: docker.io/{username}/helloworld-go

ContainerConcurrency is now used to determine the autoscaler target concurrency.

Core API

Decoupled Build (special thanks to @imikushin)

Build is no longer required to run Serving, unless you plan to use it. The old style of expressing builds inline is still supported when Build is installed, but deprecated in favor of:

spec:
  build:
    apiVersion: build.knative.dev/v1alpha1
    kind: Build
    spec:
      # What was previously directly under "build:"

In addition, alternative Build implementations may be plugged in, the only requirement is that those Build resources indicate completion via:

status:
  conditions:
  - type: Succeeded
    status: True | False | Unknown

Revision GC (special thanks to @greghaynes)

A Configuration will now reclaim unroutable Revisions based on a few criteria:

  • Time since its creation
  • Time since it was last observed to be routable (via serving.knative.dev/lastPinned annotation heartbeat)
  • Age (e.g. keep the last N)
  • Is it the LatestReadyRevision of the Configuration?
  • These knobs can be configured in config/config-gc.yaml.

Misc Features

  • Service now supports the release and manual modes.
  • Short names for Knative resources
  • Custom columns in kubectl output (K8s 1.11+ only)
  • Longer "resync" periods, with global resyncs on (some) configmap changes
  • We now create caching.internal.knative.dev/Image resources to signal the images that are important to cache. Operators must install an extension to leverage these hints.

Networking

ClusterIngress abstraction (special thanks to @lichuqiang)

Route no longer depends directly on VirtualService, but an intermediate resource ClusterIngress which could be reconciled differently for different network platforms.

Istio Updates

  • Moved to Istio 1.0.2.
  • Hacks & workarounds needed due to 0.8.0 bugs are removed.
  • Cluster-local access to Route (through route.ns.svc.cluster.local name) no longer requires the istio sidecar.

Bug fixes

Monitoring

The monitoring namespace has changed to knative-monitoring

Bug fixes:

  • #2255 Zipkin install without Elasticsearch
  • #2201 Add service label to revisions (@pivotal-nader-ziada)
  • #1474 Switch the fluentd configmap to one-per-Revision