Knative Serving release v0.2.0
Pre-releaseMeta
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 theknative/serving
components.build.yaml
: justknative/build
’s 0.2.0 releasemonitoring*.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
- #2276 Route status incorrect for named traffic targets having the same revision #2234 Activator headers getting forwarded prevent scaling from 0 (@trisberg, @scothis)
- #2046 Activator can activate the wrong Service (@markusthoemmes)
- #2043 Activator leaks metrics publicly (@scothis, @tanzeeb)
- #1931 Queue-proxy does not work with custom cluster domain (@cizixs,@arvtiwar)
- #1907 Activator retries its own requests (@markusthoemmes).
- #1637 Placeholder k8s service reconciliation doesn't take defaulter into account #1229 Activator should retry with backoff (@markusthoemmes).
- #837 Activator deal with multiple ports (@markusthoemmes).
Monitoring
The monitoring
namespace has changed to knative-monitoring