Skip to content

Releases: knative/serving

Knative Serving release v0.9.0

17 Sep 15:38
Compare
Choose a tag to compare
Pre-release

Meta

This is “Serving v1” RC2

There is discussion ongoing within the community about how we will message and document that Serving (within constraints) is ready for production workloads, and how we coordinate this with the rest of Knative, which is not yet there.

v1 API

The v1 API shape and endpoint is available starting in this release. Due to potential minimum version constraints this release can be deployed with either just the v1alpha1 endpoint or with all endpoints (v1alpha1, v1beta1, and v1) endpoints enabled. The v1 API shape is usable through all endpoints.

To use the v1beta1 or v1 endpoints, a minimum Kubernetes version of 1.14 is required (1.13.10 also had the fix backported). The minimum required Kubernetes version will become 1.14 in the next release of Knative.

autoscaling.knative.dev/minScale now only applies to routable revisions

We have changed the behavior of minScale to only apply to Revisions that are referenced by a Route. This addresses a long-standing pain point where users used minScale, but Revisions would stick around until garbage collected, which takes at least 10 hours.

Cold Start improvements

We have made some improvement to our cold-start latency, which should result in a small net improvement across the board, but also notably improves:

  • Cold-starts that are sequenced (e.g. front-end calls back-end and both cold-start)
  • Events with responses (e.g. passing events back to the broker with each hop cold starting)
  • The long tail of cold-start latency (this should now be reliably under 10s for small container images)

Autoscaling

Cold Start Improvements #4902 and #3885 (thanks @greghaynes)

The Activator will now send requests directly to the pods when the ClusterIP is not yet ready, providing us with ~200ms latency from the time the pod is ready to the time we send the first request, compared to up to 10s before.
This also fixes a problem where cold start was subject to the 1iptables-min-sync-period of the kubelet (10s on GKE), which created a relatively high floor for cold start times under certain circumstances.

RPS autoscaling #3416 (thanks @yanweiguo and @taragu)

It is possible to drive autoscaling not only by concurrency but also by RPS/QPS/OPS metric, which is a better metric for short and light weight requests (@yanweiguo)
Report RPS metrics (@taragu)

minScale only applies to routable revisions #4183 (thanks @tanzeeb)

Previously Revisions would keep around the minScale instance even when they were no longer routable.
Added Reachability concept to the PodAutoscaler.

Continuous benchmarks are live at https://mako.dev (thanks @mattmoor, @srinivashegde86, @Fredy-Z, @vagababov)

Autoscaler scaledown rate #4993 (thanks @vagababov)

The rate at which the autoscaler scales down revisions can now be limited to a rate configured in config-autoscaler.

Various bug fixes/improvements:

Core API

v1 API #5483, #5259, #5337, #5439, #5559 (thanks @dgerd, @mattmoor)

The v1 API shape and endpoint is available starting in this release. See the "Meta" section for more details.

Validate system annotations #4995 (thanks @shashwathi)

Webhook validation now ensures that serving.knative.dev annotations have appropriate values.

Revisions now have the service.knative.dev/route label #5048 (thanks @mattmoor)

Revisions are now labeled by the referencing Route to enable querying.

Revision GC refactored into its own reconciler #4876 (thanks @taragu)

Revision reconciliation now occurs separately from Configuration reconciliation.

Surface Deployment failures to Revision status #5077 (thanks @jonjohnsonjr)

DeploymentProgressing and DeploymentReplicaFailure information is propagated up to Revision status. An event is no longer emitted when the deployment times out.

Validate VolumeSources and VolumeProjections #5128 (thanks @markusthoemmes)

We now validate the KeyToPath items in the webhook to ensure that both Key and Path are specified. This prevents potential pod deployments problems.

ContainerConcurrecy default is now configurable #5099 (thanks @taragu, @Zyqsempai)

ContainerConcurrency is now configured through the config-defaults ConfigMap. Unspecified values will receive the default value, and explicit zero values will receive 'unlimited' concurrency.

Apply Route's labels to the child Ingress #5467 (thanks @nak3)

Labels on the Route will be propagated to the Ingress owned by the Route.

Jitter global resyncs to improve performance at scale #5275 (thanks @mattmoor)

Global resyncs no longer enqueue all objects at once. This prevents latency spikes in reconciliation time and improves the performance of larger clusters.

Improved error messages for readiness probes #5385 (thanks @nak3)

Bug Fixes:

  • Fix Revisions stuck in updating when scaled-to-zero #5106 (thanks @tanzeeb)
  • Fix Service reconcile when using named Revisions #5547 (thanks @dgerd)
  • Skip copying kubectl.kubernetes.io/last-applied-configuration annotation #5202 (thanks @skaslev)
  • Image repository credentials now work for image pulling #5477 (thanks @jonjohnsonjr)
  • Error earlier if using invalid autoscaling annotations #5412 (thanks @savitaashture)
  • Fix potential NPE in Route reconciler #5333 (thanks @mjaow)
  • Fix timeoutSeconds=0 to set default timeout #5224 (thanks @nak3)
  • Consistent update for Ingress ObservedGeneration #5250 (thanks @taragu)

Test Improvements:

Networking

Cold start improvement

The activator sends request directly to Pod #3885 #4902 (thanks @greghaynes)

Disable and remove ClusterIngress resources #5024 (thanks @wtam)

Various bug fixes

  • Prober ignore Gateways that can’t be probed #5129 (thanks @JRBANCEL)
  • Make port name in Gateway unique by adding namespace prefix #5324 (thanks @nak3)
  • Activator to handle graceful shutdown correctly #5364 (thanks @mattmoor)
  • Route cluster-local visibility should take precedence over placeholder Services #5411 (thanks @tcnghia)

Monitoring

Knative Serving release v0.8.1

27 Aug 22:06
Compare
Choose a tag to compare
Pre-release

Meta

This release is our first “release candidate” for Serving v1

We are burning down remaining issues here, but barring major issues we will declare 0.9 the “v1” release of knative/serving.

Istio minimum version is now 1.1.x

In order to support #4755 we have to officially remove support for Istio 1.0.x (which is end-of-life).

Route/Service Ready actually means Ready!

Route now only reports Ready if it is accessible from the Istio Ingress. This allows users to start using a Service/Route the moment it reports Ready.

Target Burst Capacity (TBC) support

The activator can now be used to shield user services at smaller scales (not just zero!), where it will buffer requests until adequate capacity is available. This is configurable on cluster and revision level; it is currently off by default.

Migrate to knative.dev/serving import path

We have migrated github.com/knative/serving import paths to use knative.dev/serving.

Autoscaling

Target Burst Capacity (TBC) support #4443, #4516, #4580, #4758 (thanks @vagababov)

The activator can now be used to shield user services at smaller scales (not just zero!), where it will buffer requests until adequate capacity is available. This is configurable on cluster and revision level; it is currently off by default.

Activator HPA and performance improvements #4886, #4772 (thanks @yanweiguo)

With the activator on the dataplane more often (for TBC), several performance and scale problems popped up. We now horizontally scale the activator on CPU, and have made several latency improvements to its request handling.

Faster Scale Down to 0 #4883, #4949, #4938, etc (thanks @vagababov)

We will now elide the scale-to-zero “grace period” when the activator was already in the request path (this is now possible through the use of “target burst capacity”).
The scale-to-zero “grace period” is now computed from the time the activator was confirmed on the data path vs. a fixed duration.

Metrics Resource #4753, #4894, #4895, #4913, #4924 (thanks @markusthoemmes)

Autoscaling metrics are now full-fledged resources in Knative, this enables new autoscalers to plug in from out-of-process.

HPA is a separate controller now #4990 (thanks @markusthoemmes)

This proves that the metrics resource model enables a fully capable autoscaler outside of the main autoscaling controller.

Stability and performance (thanks to many):

  • Improvements to test flakiness
  • Better validation of annotation and config maps is performed
  • Autoscaler will wait for a reasonable population of metrics to be collected before scaling user pods down after it has been restarted.

Core API

Readiness probe cold-start improvements #4148, #4649, #4667, #4668, #4731 (thanks @joshrider, @shashwathi)

The queue-proxy sidecar will now evaluate both user specified readiness probes and the (default) TCP probe. This enables us to much more aggressively probe the user-provided container for readiness (vs. K8s default second granularity).
The default periodSeconds for the readinessProbe is now 0 which enables a system defined sub-second readiness check.
This contains a breaking change for users relying on the default periodSeconds while specifying either timeoutSeconds or failureThreshold. Services using these values should remove them to enable the benefits of faster probing, or they should specify a periodSeconds greater than 0 to restore previous behavior.

Enable specifying protocol without port number #4515 (thanks @tanzeeb)

Container ports can now be specified without a port number. This allows for specifying just a name (i.e. "http1", "h2c") to select the protocol.

Tag-to-digest resolution now works with AWS ECR #4084 (thanks @jonjonshonjr)

Knative has been updated to use the new AWS credential provider to enable pulling images from AWS ECR.

Revisions annotated with serving.knative.dev/creator #4526 (thanks @nak3)

Annotation Validations #4560, #4656, #4669, #4888, #4879, #4763 (thanks @vagababov, @markusthoemmes, @savitaashture , @shashwathi)

System annotations (autoscaling.knative.dev/* and serving.knative.dev/*) are now validated by the webhook for correctness and immutability (where applicable). This improves visibility to errors in annotations, and ensures annotations on Knative objects are accurate and valid.

ServiceAccountName Validation #4733, #4919 (thanks @shashwathi)

Service account names are now validated to be a valid kubernetes identifier to improve the time to error and reduce potential impact of an incorrect identifier.

Fixes

  • Tag resolution for schema 1 images #4432 (thanks @jonjohnsonjr )
  • Don't display user-defined template for cluster-local #4615 (thanks @duglin)
  • Fix error message when multiple containers are specified #4709 (thanks @nak3)
  • Update observedGeneration even when Route fails #4594 (thanks @taragu)

Tests:

Docs:

  • Remove misuse of RFC2119 keywords #4550 (thanks @duglin)
  • Add links to conformance tests from Runtime Contract #4428 (thanks @dgerd)
  • New API Specification document docs#1642 (thanks @dgerd)

Networking

Honest Route/Service Readiness (#1582, #3312) (thanks @JRBANCEL)

Route now only reports Ready if it is accessible from the Istio Ingress. This allows users to start using a Service or Route the moment it reports Ready.

Remove cluster scoping of ClusterIngress (#4028) (thanks @wtam)

networking.internal.knative.dev/ClusterIngress is now replaced by networking.internal.knative.dev/Ingress, which is a cluster-scoped resource. The ClusterIngress resource will be removed in 0.9.

Enable visibility settings for sub-Route (#3419) (thanks @andrew-su)

Each sub Route (tags) can have their own visibility setting by labelling the corresponding placeholder K8s Service.

Correct split percentage for inactive Revisions (#882, #4755) (thanks @tcnghia)

We no longer just route to the biggest inactive split, when there are more than one inactive traffic splits. To support this fix we now officially remove support for Istio 1.0 (which was announced to be EOL).

Integration with Gloo Ingress (thanks @scottweiss and Solo.io team)

Knative-on-Gloo now has its own continuous build to ensure good integration.
Gloo now officially supports networking.internal.knative.dev/Ingress (see #4028).

Ambassador officially announces Knative support (thanks @richarddli and Ambassador team)

blog post

Fixes

  • Fix activator crash due to trailing dot in resolv.conf (#4407) (thanks @tcnghia)
  • Activator to wait for active requests to drain before terminating (#4654) (thanks @vagababov)
  • Fix cluster-local Service URL (#4204) (thanks @duglin)
  • Remove cert-manager controller from default serving.yaml install (#4120) (thanks @ZhiminXiang)

Monitoring

Automate cold-start timing collection #2495 (thanks @greghaynes)

Record the time spent broken down into components during cold-start including “how much time is spent before we ask our deployment to scale up” and “how much time is spent before our user application begins executing”.

Dash in controller name cause metrics to be dropped #4716 (thanks @JRBANCEL)

Fixed an issue where some controller metrics were not getting into Prometheus due to invalid characters in their component names,

Knative Serving release v0.8.0 (aka "v1rc1")

06 Aug 16:17
Compare
Choose a tag to compare

Meta

This release is our first “release candidate” for Serving v1

We are burning down remaining issues here, but barring major issues we will declare 0.9 the “v1” release of knative/serving.

Istio minimum version is now 1.1.x

In order to support #4755 we have to officially remove support for Istio 1.0.x (which is end-of-life).

Route/Service Ready actually means Ready!

Route now only reports Ready if it is accessible from the Istio Ingress. This allows users to start using a Service/Route the moment it reports Ready.

Target Burst Capacity (TBC) support

The activator can now be used to shield user services at smaller scales (not just zero!), where it will buffer requests until adequate capacity is available. This is configurable on cluster and revision level; it is currently off by default.

Migrate to knative.dev/serving import path

We have migrated github.com/knative/serving import paths to use knative.dev/serving.

Autoscaling

Target Burst Capacity (TBC) support #4443, #4516, #4580, #4758 (thanks @vagababov)

The activator can now be used to shield user services at smaller scales (not just zero!), where it will buffer requests until adequate capacity is available. This is configurable on cluster and revision level; it is currently off by default.

Activator HPA and performance improvements #4886, #4772 (thanks @yanweiguo)

With the activator on the dataplane more often (for TBC), several performance and scale problems popped up. We now horizontally scale the activator on CPU, and have made several latency improvements to its request handling.

Faster Scale Down to 0 #4883, #4949, #4938, etc (thanks @vagababov)

We will now elide the scale-to-zero “grace period” when the activator was already in the request path (this is now possible through the use of “target burst capacity”).
The scale-to-zero “grace period” is now computed from the time the activator was confirmed on the data path vs. a fixed duration.

Metrics Resource #4753, #4894, #4895, #4913, #4924 (thanks @markusthoemmes)

Autoscaling metrics are now full-fledged resources in Knative, this enables new autoscalers to plug in from out-of-process.

HPA is a separate controller now #4990 (thanks @markusthoemmes)

This proves that the metrics resource model enables a fully capable autoscaler outside of the main autoscaling controller.

Stability and performance (thanks to many):

  • Improvements to test flakiness
  • Better validation of annotation and config maps is performed
  • Autoscaler will wait for a reasonable population of metrics to be collected before scaling user pods down after it has been restarted.

Core API

Readiness probe cold-start improvements #4148, #4649, #4667, #4668, #4731 (thanks @joshrider, @shashwathi)

The queue-proxy sidecar will now evaluate both user specified readiness probes and the (default) TCP probe. This enables us to much more aggressively probe the user-provided container for readiness (vs. K8s default second granularity).
The default periodSeconds for the readinessProbe is now 0 which enables a system defined sub-second readiness check.
This contains a breaking change for users relying on the default periodSeconds while specifying either timeoutSeconds or failureThreshold. Services using these values should remove them to enable the benefits of faster probing, or they should specify a periodSeconds greater than 0 to restore previous behavior.

Enable specifying protocol without port number #4515 (thanks @tanzeeb)

Container ports can now be specified without a port number. This allows for specifying just a name (i.e. "http1", "h2c") to select the protocol.

Tag-to-digest resolution now works with AWS ECR #4084 (thanks @jonjonshonjr)

Knative has been updated to use the new AWS credential provider to enable pulling images from AWS ECR.

Revisions annotated with serving.knative.dev/creator #4526 (thanks @nak3)

Annotation Validations #4560, #4656, #4669, #4888, #4879, #4763 (thanks @vagababov, @markusthoemmes, @savitaashture , @shashwathi)

System annotations (autoscaling.knative.dev/* and serving.knative.dev/*) are now validated by the webhook for correctness and immutability (where applicable). This improves visibility to errors in annotations, and ensures annotations on Knative objects are accurate and valid.

ServiceAccountName Validation #4733, #4919 (thanks @shashwathi)

Service account names are now validated to be a valid kubernetes identifier to improve the time to error and reduce potential impact of an incorrect identifier.

Fixes

  • Tag resolution for schema 1 images #4432 (thanks @jonjohnsonjr )
  • Don't display user-defined template for cluster-local #4615 (thanks @duglin)
  • Fix error message when multiple containers are specified #4709 (thanks @nak3)
  • Update observedGeneration even when Route fails #4594 (thanks @taragu)

Tests:

Docs:

  • Remove misuse of RFC2119 keywords #4550 (thanks @duglin)
  • Add links to conformance tests from Runtime Contract #4428 (thanks @dgerd)
  • New API Specification document docs#1642 (thanks @dgerd)

Networking

Honest Route/Service Readiness (#1582, #3312) (thanks @JRBANCEL)

Route now only reports Ready if it is accessible from the Istio Ingress. This allows users to start using a Service or Route the moment it reports Ready.

Remove cluster scoping of ClusterIngress (#4028) (thanks @wtam)

networking.internal.knative.dev/ClusterIngress is now replaced by networking.internal.knative.dev/Ingress, which is a cluster-scoped resource. The ClusterIngress resource will be removed in 0.9.

Enable visibility settings for sub-Route (#3419) (thanks @andrew-su)

Each sub Route (tags) can have their own visibility setting by labelling the corresponding placeholder K8s Service.

Correct split percentage for inactive Revisions (#882, #4755) (thanks @tcnghia)

We no longer just route to the biggest inactive split, when there are more than one inactive traffic splits. To support this fix we now officially remove support for Istio 1.0 (which was announced to be EOL).

Integration with Gloo Ingress (thanks @scottweiss and Solo.io team)

Knative-on-Gloo now has its own continuous build to ensure good integration.
Gloo now officially supports networking.internal.knative.dev/Ingress (see #4028).

Ambassador officially announces Knative support (thanks @richarddli and Ambassador team)

blog post

Fixes

  • Fix activator crash due to trailing dot in resolv.conf (#4407) (thanks @tcnghia)
  • Activator to wait for active requests to drain before terminating (#4654) (thanks @vagababov)
  • Fix cluster-local Service URL (#4204) (thanks @duglin)
  • Remove cert-manager controller from default serving.yaml install (#4120) (thanks @ZhiminXiang)

Monitoring

Automate cold-start timing collection #2495 (thanks @greghaynes)

Record the time spent broken down into components during cold-start including “how much time is spent before we ask our deployment to scale up” and “how much time is spent before our user application begins executing”.

Dash in controller name cause metrics to be dropped #4716 (thanks @JRBANCEL)

Fixed an issue where some controller metrics were not getting into Prometheus due to invalid characters in their component names,

Knative Serving release v0.7.1

02 Jul 10:25
Compare
Choose a tag to compare
Pre-release

Meta

serving.knative.dev/v1beta1 (requires K8s 1.14+ due to #4533)

  • In 0.6 we expanded our v1alpha1 API to include our v1beta1 fields. In this release, we are contracting the set of fields we store for v1alpha1 to that subset (and disallowing those that don’t fit). With this, we can leverage the “same schema” CRD-conversion supported by Kubernetes 1.11+ to ship v1beta1.

HPA-based scaling on concurrent requests

  • We previously supported using the HPA “class” autoscaler to enable Knative services to be scaled on CPU and Memory. In this release, we are adding support for using the HPA to scale them on the same “concurrent requests” metrics used by our default autoscaler.
  • HPA still does not yet support scaling to zero, and more work is needed to expose these metrics to arbitrary autoscaler plugins, but this is exciting progress!

Non-root containers

  • This release, all of the containers we ship run as a “nonroot” user. This includes the queue-proxy sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.

Breaking Changes

  • Previously deprecated status fields are no longer populated.
  • Build and Manual (deprecated in 0.6) are now unsupported
  • The URLs generated for Route tags by default have changed, see the tagTemplate section below for how to avoid this break.

Autoscaling

Support concurrency-based scaling on the HPA (thanks @markusthoemmes).

Metric-scraping and decision-making has been separated out of the Knative internal autoscaler (KPA). The metrics are now also available to the HPA.

Dynamically change autoscaling metrics sample size based on pod population (thanks @yanweiguo).

Depending on how many pods the specific revision has, the autoscaler now scrapes a computed number of pods to gain more confidence in the reported metrics while maintaining scalability.

Fixes:

  • Added readiness probes to the autoscaler #4456 (thanks @vagababov)
  • Adjust activator’s throttling behavior based on activator scale (thanks @shashwathi and @andrew-su).
  • Revisions wait until they have reached “minScale” before they are reported “Ready” (thanks @joshrider).

Core API

Expose v1beta1 API #4199 (thanks @mattmoor)

This release exposes resources under serving.knative.dev/v1beta1.

Non-root containers #3237 (thanks @bradhoekstra and @dprotaso)

This release, all of the containers we ship run as a “nonroot” user. This includes the queue-proxy sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.

Allow users to specify their container name #4289 (thanks @mattmoor)

This will default to user-container, which is what we use today, and that default may be changed for config-defaults to a Go template with access to the parent resource’s (e.g. Service, Configuration) ObjectMeta fields.

Projected volume support #4079 (thanks @mattmoor)

Based on community feedback, we have added support for mounting ConfigMaps and Secrets via the projected volume type.

Drop legacy status fields #4197 (thanks @mattmoor)

A variety of legacy fields from our v1alpha1 have been dropped in preparation to serve these same objects over v1beta1.

Build is unsupported #4099 (thanks @mattmoor)

As mentioned in the 0.6 release notes, support for just-in-time builds has been removed, and requests containing a build will now be rejected.

Manual is unsupported #4188 (thanks @mattmoor)

As mentioned in the 0.6 release notes, support for manual mode has been removed, and requests containing it will now be rejected.

V1beta1 clients and conformance testing #4369 (thanks @mattmoor)

We have generated client libraries for v1beta1 and have a v1beta1 version of the API conformance test suite under ./test/conformance/api/v1beta1.

Defaulting based conversion #4080 (thanks @mattmoor)

Objects submitted with the old v1alpha1 schema will be upgraded via our “defaulting” logic in a mutating admission webhook.

New annotations for queue-proxy resource limits #4151 (thanks @raushan2016)

The queue.sidecar.serving.knative.dev/resourcePercentage annotation now allows setting the percetnage of user container resources to be used for the queue-proxy.

Annotation propagation #4363, #4367 (thanks @vagababov)

Annotations now propagate from the Knative Service object to Route and Configuration.

Fixes:

Test:

Networking

Reconcile annotations from Route to ClusterIngress #4087 (thanks @vagababov)

This allows ClusterIngress class annotation to be specified per-Route instead of cluster wide through a config-network setting.

Introduce tagTemplate configuration #4292 (thanks @mattmoor)

This allows operators to configure the names that are given to the services created for tags in Route.
This also changes the default to transpose the tag and route name, which is a breaking change to the URLs these received in 0.6. To avoid this break, you can set tagTemplate: {{.Name}}-{{.Tag}} in config-network.

Enable use of annotations in domainTemplate #4210 (thanks @raushan2016)

User can now provide custom subdomain via label serving.knative.dev/subDomain.

Allow customizing max allowed request timeout #4172 (thanks @mdemirhan)

This introduces a new config entry max-revision-timeout-seconds in config-defaults to set the max allowed request timeout.

Set Forwarded header on request #4376 (thanks @tanzeeb)

The Forwarded header is constructed and appended to the headers by the queue-proxy if only legacy x-forwarded-* headers are set.

Fixes:

  • Enable short names for cluster-local Service without relying on sidecars #3824 (thanks @tcnghia)
  • Better surfacing of ClusterIngress Status #4288 #4144 (thanks @tanzeeb, @nak3)
  • SKS private service uses random names to avoid length limitation #4250 (thanks @vagababov)

Monitoring

Set memory request for zipkin pods #4353 (thanks @sebgoa)

This lowers the memory necessary to schedule the zipkin pod.

Collect /var/log without fluentd sidecar #4156 (thanks @JRBANCEL)

This allows /var/log collection without the need to load fluentd sidecar, which is large and significantly increases pod startup time.

Enable queue-proxy metrics scraping by Prometheus. #4111 (thanks @mdemirhan)

The new metrics exposed by queue proxy are now exposed as part of the pod spec and Prometheus can now scrape these metrics.

Fixes:

  • Fix 'Revision CPU and Memory Usage' Grafana dashboard #4106 (thanks @JRBANCEL)
  • Fix 'Scaling Debugging' Grafana dashboard. #4096 (thanks @JRBANCEL)
  • Remove embedded jaeger-operator and include as dependency instead #3938 (thanks @objectiser)
  • Fix HTTP request dashboards #4418 (thanks @mdemirhan)

Knative Serving release v0.7.0

25 Jun 15:25
Compare
Choose a tag to compare
Pre-release

Meta

serving.knative.dev/v1beta1 (requires K8s 1.14+ due to #4533)

  • In 0.6 we expanded our v1alpha1 API to include our v1beta1 fields. In this release, we are contracting the set of fields we store for v1alpha1 to that subset (and disallowing those that don’t fit). With this, we can leverage the “same schema” CRD-conversion supported by Kubernetes 1.11+ to ship v1beta1.

HPA-based scaling on concurrent requests

  • We previously supported using the HPA “class” autoscaler to enable Knative services to be scaled on CPU and Memory. In this release, we are adding support for using the HPA to scale them on the same “concurrent requests” metrics used by our default autoscaler.
  • HPA still does not yet support scaling to zero, and more work is needed to expose these metrics to arbitrary autoscaler plugins, but this is exciting progress!

Non-root containers

  • This release, all of the containers we ship run as a “nonroot” user. This includes the queue-proxy sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.

Breaking Changes

  • Previously deprecated status fields are no longer populated.
  • Build and Manual (deprecated in 0.6) are now unsupported
  • The URLs generated for Route tags by default have changed, see the tagTemplate section below for how to avoid this break.

Autoscaling

Support concurrency-based scaling on the HPA (thanks @markusthoemmes).

Metric-scraping and decision-making has been separated out of the Knative internal autoscaler (KPA). The metrics are now also available to the HPA.

Dynamically change autoscaling metrics sample size based on pod population (thanks @yanweiguo).

Depending on how many pods the specific revision has, the autoscaler now scrapes a computed number of pods to gain more confidence in the reported metrics while maintaining scalability.

Fixes:

  • Added readiness probes to the autoscaler #4456 (thanks @vagababov)
  • Adjust activator’s throttling behavior based on activator scale (thanks @shashwathi and @andrew-su).
  • Revisions wait until they have reached “minScale” before they are reported “Ready” (thanks @joshrider).

Core API

Expose v1beta1 API #4199 (thanks @mattmoor)

This release exposes resources under serving.knative.dev/v1beta1.

Non-root containers #3237 (thanks @bradhoekstra and @dprotaso)

This release, all of the containers we ship run as a “nonroot” user. This includes the queue-proxy sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.

Allow users to specify their container name #4289 (thanks @mattmoor)

This will default to user-container, which is what we use today, and that default may be changed for config-defaults to a Go template with access to the parent resource’s (e.g. Service, Configuration) ObjectMeta fields.

Projected volume support #4079 (thanks @mattmoor)

Based on community feedback, we have added support for mounting ConfigMaps and Secrets via the projected volume type.

Drop legacy status fields #4197 (thanks @mattmoor)

A variety of legacy fields from our v1alpha1 have been dropped in preparation to serve these same objects over v1beta1.

Build is unsupported #4099 (thanks @mattmoor)

As mentioned in the 0.6 release notes, support for just-in-time builds has been removed, and requests containing a build will now be rejected.

Manual is unsupported #4188 (thanks @mattmoor)

As mentioned in the 0.6 release notes, support for manual mode has been removed, and requests containing it will now be rejected.

V1beta1 clients and conformance testing #4369 (thanks @mattmoor)

We have generated client libraries for v1beta1 and have a v1beta1 version of the API conformance test suite under ./test/conformance/api/v1beta1.

Defaulting based conversion #4080 (thanks @mattmoor)

Objects submitted with the old v1alpha1 schema will be upgraded via our “defaulting” logic in a mutating admission webhook.

New annotations for queue-proxy resource limits #4151 (thanks @raushan2016)

The queue.sidecar.serving.knative.dev/resourcePercentage annotation now allows setting the percetnage of user container resources to be used for the queue-proxy.

Annotation propagation #4363, #4367 (thanks @vagababov)

Annotations now propagate from the Knative Service object to Route and Configuration.

Fixes:

Test:

Networking

Reconcile annotations from Route to ClusterIngress #4087 (thanks @vagababov)

This allows ClusterIngress class annotation to be specified per-Route instead of cluster wide through a config-network setting.

Introduce tagTemplate configuration #4292 (thanks @mattmoor)

This allows operators to configure the names that are given to the services created for tags in Route.
This also changes the default to transpose the tag and route name, which is a breaking change to the URLs these received in 0.6. To avoid this break, you can set tagTemplate: {{.Name}}-{{.Tag}} in config-network.

Enable use of annotations in domainTemplate #4210 (thanks @raushan2016)

User can now provide custom subdomain via label serving.knative.dev/subDomain.

Allow customizing max allowed request timeout #4172 (thanks @mdemirhan)

This introduces a new config entry max-revision-timeout-seconds in config-defaults to set the max allowed request timeout.

Set Forwarded header on request #4376 (thanks @tanzeeb)

The Forwarded header is constructed and appended to the headers by the queue-proxy if only legacy x-forwarded-* headers are set.

Fixes:

  • Enable short names for cluster-local Service without relying on sidecars #3824 (thanks @tcnghia)
  • Better surfacing of ClusterIngress Status #4288 #4144 (thanks @tanzeeb, @nak3)
  • SKS private service uses random names to avoid length limitation #4250 (thanks @vagababov)

Monitoring

Set memory request for zipkin pods #4353 (thanks @sebgoa)

This lowers the memory necessary to schedule the zipkin pod.

Collect /var/log without fluentd sidecar #4156 (thanks @JRBANCEL)

This allows /var/log collection without the need to load fluentd sidecar, which is large and significantly increases pod startup time.

Enable queue-proxy metrics scraping by Prometheus. #4111 (thanks @mdemirhan)

The new metrics exposed by queue proxy are now exposed as part of the pod spec and Prometheus can now scrape these metrics.

Fixes:

  • Fix 'Revision CPU and Memory Usage' Grafana dashboard #4106 (thanks @JRBANCEL)
  • Fix 'Scaling Debugging' Grafana dashboard. #4096 (thanks @JRBANCEL)
  • Remove embedded jaeger-operator and include as dependency instead #3938 (thanks @objectiser)
  • Fix HTTP request dashboards #4418 (thanks @mdemirhan)

Knative Serving release v0.6.1

11 Jun 09:45
Compare
Choose a tag to compare
Pre-release

Meta

New API Shape

We have approved a proposal for the “v1beta1” API shape for knative/serving. These changes will make the Serving resources much more familiar for experienced Kubernetes users, unlock the power of Route to users of Service, and enable GitOps scenarios with features like “bring-your-own-Revision-name”. We will be working towards this over the next few releases.

In this release we have backported the new API surface to the v1alpha1 API as the first part of the transition to v1beta1 (aka “lemonade”). The changes that will become breaking in 0.7+ are:

  • Service and Configuration will no longer support “just-in-time” Builds.
  • Service will no longer support “manual” mode.

You can see the new API surface in use throughout our samples in knative/docs, but we will continue to support the majority of the legacy surface via v1alpha1 until we turn it down.

Overhauled Scale-to-Zero

We have radically changed the mechanism by which we scale to zero. The new architecture creates a better separation of concerns throughout the Serving resource model with fewer moving parts, and enables us to address a number of long-standing issues (some in this release, some to come). See below for more details.

Auto-TLS (alpha, opt-in)

We have added support for auto-TLS integration! The default implementation builds on cert-manager to provision certificates (e.g. via Let’s Encrypt), but similar to how we have made Istio pluggable, you can swap out cert-manager for other certificate provisioning systems. Currently certificates are provisioned per-Route, but stay tuned for wildcard support in a future release. This feature requires Istio 1.1, and must be explicitly enabled.

Moar Controller Decoupling

We have started to split the “pluggable” controllers in Knative into their own controller processes so that folks looking to replace Knative sub-systems can more readily remove the bundled default implementation. For example, to install Knative Serving without the Istio layer run:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/ingress-provider!=istio

Note that we may see some error due to kubectl not understanding the yaml for Istio objects (even if they are filtered out by the label selector). It is safe to ignore the errors no matches for kind "Gateway" in version "networking.istio.io/v1alpha3".

You can also use this to omit the optional Auto-TLS controller based on cert-manager with:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/certificate-provider!=cert-manager

Autoscaling

Move the Knative PodAutoscaler (aka “KPA”) from the /scale sub-resource for scaling to a PodScalable “duck type”. This enables us to leverage informer caching, and the expanded contract will enable the ServerlessService (aka “SKS”) to leverage the PodSpec to do neat optimizations in future releases. (Thanks @mattmoor)

We now ensure that our “activator” component has been successfully wired in before scaling a Revision down to zero (aka “positive hand-off”, #2949). This work was enabled by the Revision-managed activation work below. (Thanks @vagababov)

New annotations autoscaling.knative.dev/window, autoscaling.knative.dev/panicWindowPercentage, and autoscaling.knative.dev/panicThresholdPercentage allow customizing the sensitivity of KPA-class PodAutoscalers (#3103). (Thanks @josephburnett)

Added tracing to activator to get more detailed and persistently measured performance data (#2726). This fixes #1276 and will enable us to troubleshoot performance issues, such as cold start. (Thanks @greghaynes).

Fixed a Scale to Zero issue with Istio 1.1 lean installation (#3987) by reducing the idle timeouts in default transports (#3996) (Thanks @vagababov) which solves the k8's service not being terminated when the endpoint changes.

Resolved an issue which prevented disabling Scale to Zero (#3629) with fix (#3688) (Thanks @yanweiguo) which takes enable-scale-to-zero from configmap into account in KPA reconciler when doing scale. If minScale annotation is not set or set to 0 and enable-scale-to-zero is set to false, keep 1 pod as minimum.

Fix the autoscaler bug that make rash decision when the autoscaler restarts (#3771). This fixes issues #2705 and #2859. (Thanks @hohaichi)

Core API

We have an approved v1beta1 API shape! As above, we have started down the path to v1beta1 over the next several milestones. This milestone landed the v1beta1 API surface as a supported subset of v1alpha1. See above for more details. (Thanks to the v1beta1 task force for many hours of hard work on this).

We changed the way we perform validation to be based on a “fieldmask” of supported fields. We will now create a copy of each Kubernetes object limited to the fields we support, and then compare it against the original object; this ensures we are deliberate with which resource fields we want to leverage as the Kubernetes API evolves. (#3424, #3779) (Thanks @dgerd). This was extended to cleanup our internal API validations (#3789, #3911) (Thanks @mattmoor).

status.domain has been deprecated in favor of status.url. (#3970) (Thanks @mattmoor) which uses the apis.URL for our URL status fields, resolving the issue "Unable to get the service URL" (#1590)

Added the ability to specify default values for the matrix of {cpu, mem} x {request, limit} via our configmap for defaults. This also removes the previous CPU limit default so that we fallback on the configured Kubernetes defaults unless this is specifically specified by the operator. (#3550, #3912) (Thanks @mattmoor)

Dropped the use of the configurationMetadataGeneration label (#4012) (thanks @dprotaso), and wrapped up the last of the changes transitioning us to CRD sub-resources (#643).

Networking

Overhauled the way we scale-to-zero! (Thanks @vagababov) This enables us to have Revisions managing their own activation semantics, implement positive hand-off when scaling to zero, and increase the autoscaling controller’s resync period to be consistent with our other controllers.

Added support for automatically configuring TLS certificates! (Thanks @ZhiminXiang) See above for more details.

We have stopped releasing Istio yamls. It was never our intention for knative/serving to redistribute Istio, and prior releases exposed our “dev”-optimized Istio yamls. Users should consult either the Istio or vendor-specific documentation for how to get a “supported” Istio distribution. (Thanks @mattmoor)

We have started to adopt a flat naming scheme for the named sub-routes within a Service or Route. The old URLs will still work for now, but the new URLs will appear in the status.traffic[*].url fields. (Thanks @andrew-su)

Support the installation of Istio 1.1 (#3515, #3353) (Thanks @tcnghia)

Fixed readiness probes with Istio mTLS enabled (#4017) (Thanks @mattmoor)

Monitoring

Activator now reports request logs (#3781) with check-in (#3927) (Thanks @mdemirhan)

Test and Release

Assorted Fixes

  • label serving.knative.dev/release: devel should have the release name/number instead of devel (#3626) fixed with Export TAG to fix our annotation manipulation. (#3995) (Thanks @mattmoor)

  • Always install istio from HEAD for upgrade tests (#3522) (Thanks @jonjohnsonjr) fixing errors with upgrade / downgrade testing of knative (#3506)

  • Additional runtime conformance test coverage (9 new tests), improvements to existing conformance tests, and v1beta1 coverage. (Thanks @andrew-su, @dgerd, @yt3liu, @mattmoor, @tzununbekov)

Knative Serving release v0.6.0

14 May 14:47
Compare
Choose a tag to compare
Pre-release

Meta

New API Shape

We have approved a proposal for the “v1beta1” API shape for knative/serving. These changes will make the Serving resources much more familiar for experienced Kubernetes users, unlock the power of Route to users of Service, and enable GitOps scenarios with features like “bring-your-own-Revision-name”. We will be working towards this over the next few releases.

In this release we have backported the new API surface to the v1alpha1 API as the first part of the transition to v1beta1 (aka “lemonade”). The changes that will become breaking in 0.7+ are:

  • Service and Configuration will no longer support “just-in-time” Builds.
  • Service will no longer support “manual” mode.

You can see the new API surface in use throughout our samples in knative/docs, but we will continue to support the majority of the legacy surface via v1alpha1 until we turn it down.

Overhauled Scale-to-Zero

We have radically changed the mechanism by which we scale to zero. The new architecture creates a better separation of concerns throughout the Serving resource model with fewer moving parts, and enables us to address a number of long-standing issues (some in this release, some to come). See below for more details.

Auto-TLS (alpha, opt-in)

We have added support for auto-TLS integration! The default implementation builds on cert-manager to provision certificates (e.g. via Let’s Encrypt), but similar to how we have made Istio pluggable, you can swap out cert-manager for other certificate provisioning systems. Currently certificates are provisioned per-Route, but stay tuned for wildcard support in a future release. This feature requires Istio 1.1, and must be explicitly enabled.

Moar Controller Decoupling

We have started to split the “pluggable” controllers in Knative into their own controller processes so that folks looking to replace Knative sub-systems can more readily remove the bundled default implementation. For example, to install Knative Serving without the Istio layer run:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/ingress-provider!=istio

Note that we may see some error due to kubectl not understanding the yaml for Istio objects (even if they are filtered out by the label selector). It is safe to ignore the errors no matches for kind "Gateway" in version "networking.istio.io/v1alpha3".

You can also use this to omit the optional Auto-TLS controller based on cert-manager with:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/certificate-provider!=cert-manager

Autoscaling

Move the Knative PodAutoscaler (aka “KPA”) from the /scale sub-resource for scaling to a PodScalable “duck type”. This enables us to leverage informer caching, and the expanded contract will enable the ServerlessService (aka “SKS”) to leverage the PodSpec to do neat optimizations in future releases. (Thanks @mattmoor)

We now ensure that our “activator” component has been successfully wired in before scaling a Revision down to zero (aka “positive hand-off”, #2949). This work was enabled by the Revision-managed activation work below. (Thanks @vagababov)

New annotations autoscaling.knative.dev/window, autoscaling.knative.dev/panicWindowPercentage, and autoscaling.knative.dev/panicThresholdPercentage allow customizing the sensitivity of KPA-class PodAutoscalers (#3103). (Thanks @josephburnett)

Added tracing to activator to get more detailed and persistently measured performance data (#2726). This fixes #1276 and will enable us to troubleshoot performance issues, such as cold start. (Thanks @greghaynes).

Fixed a Scale to Zero issue with Istio 1.1 lean installation (#3987) by reducing the idle timeouts in default transports (#3996) (Thanks @vagababov) which solves the k8's service not being terminated when the endpoint changes.

Resolved an issue which prevented disabling Scale to Zero (#3629) with fix (#3688) (Thanks @yanweiguo) which takes enable-scale-to-zero from configmap into account in KPA reconciler when doing scale. If minScale annotation is not set or set to 0 and enable-scale-to-zero is set to false, keep 1 pod as minimum.

Fix the autoscaler bug that make rash decision when the autoscaler restarts (#3771). This fixes issues #2705 and #2859. (Thanks @hohaichi)

Core API

We have an approved v1beta1 API shape! As above, we have started down the path to v1beta1 over the next several milestones. This milestone landed the v1beta1 API surface as a supported subset of v1alpha1. See above for more details. (Thanks to the v1beta1 task force for many hours of hard work on this).

We changed the way we perform validation to be based on a “fieldmask” of supported fields. We will now create a copy of each Kubernetes object limited to the fields we support, and then compare it against the original object; this ensures we are deliberate with which resource fields we want to leverage as the Kubernetes API evolves. (#3424, #3779) (Thanks @dgerd). This was extended to cleanup our internal API validations (#3789, #3911) (Thanks @mattmoor).

status.domain has been deprecated in favor of status.url. (#3970) (Thanks @mattmoor) which uses the apis.URL for our URL status fields, resolving the issue "Unable to get the service URL" (#1590)

Added the ability to specify default values for the matrix of {cpu, mem} x {request, limit} via our configmap for defaults. This also removes the previous CPU limit default so that we fallback on the configured Kubernetes defaults unless this is specifically specified by the operator. (#3550, #3912) (Thanks @mattmoor)

Dropped the use of the configurationMetadataGeneration label (#4012) (thanks @dprotaso), and wrapped up the last of the changes transitioning us to CRD sub-resources (#643).

Networking

Overhauled the way we scale-to-zero! (Thanks @vagababov) This enables us to have Revisions managing their own activation semantics, implement positive hand-off when scaling to zero, and increase the autoscaling controller’s resync period to be consistent with our other controllers.

Added support for automatically configuring TLS certificates! (Thanks @ZhiminXiang) See above for more details.

We have stopped releasing Istio yamls. It was never our intention for knative/serving to redistribute Istio, and prior releases exposed our “dev”-optimized Istio yamls. Users should consult either the Istio or vendor-specific documentation for how to get a “supported” Istio distribution. (Thanks @mattmoor)

We have started to adopt a flat naming scheme for the named sub-routes within a Service or Route. The old URLs will still work for now, but the new URLs will appear in the status.traffic[*].url fields. (Thanks @andrew-su)

Support the installation of Istio 1.1 (#3515, #3353) (Thanks @tcnghia)

Fixed readiness probes with Istio mTLS enabled (#4017) (Thanks @mattmoor)

Monitoring

Activator now reports request logs (#3781) with check-in (#3927) (Thanks @mdemirhan)

Test and Release

Assorted Fixes

  • label serving.knative.dev/release: devel should have the release name/number instead of devel (#3626) fixed with Export TAG to fix our annotation manipulation. (#3995) (Thanks @mattmoor)

  • Always install istio from HEAD for upgrade tests (#3522) (Thanks @jonjohnsonjr) fixing errors with upgrade / downgrade testing of knative (#3506)

  • Additional runtime conformance test coverage (9 new tests), improvements to existing conformance tests, and v1beta1 coverage. (Thanks @andrew-su, @dgerd, @yt3liu, @mattmoor, @tzununbekov)

Knative Serving release v0.5.2

23 Apr 10:00
Compare
Choose a tag to compare
Pre-release

Autoscaling

Bucketize autoscaling metrics by timeframe (#3289 - thanks @markusthoemmes)

Stats are averaged in each specific timeframe vs. averaged over the whole window. Fixes #2977.

Prevent double counting by the autoscaler (#3477 - thanks @hohaichi)

Let the queue report a concurrency metric for proxied requests, and the autoscaler discount this concurrency when making scaling decisions. Fixes bug (#3301).

Scrape queue-proxy metrics in autoscaler (#3149, thanks @yanweiguo)

Scrape queue-proxy metrics in autoscaler instead of pushing metrics from queue-proxy to autoscaler via websocket connection. Remove the websocket usage in queue-proxy. Fixes bugs #2203, #1927.

Bug Fixes / Cleanups

  • Doc update for scale annotations lifetime (#3461 - thanks @yanweiguo) resolving bug (#2720)
  • Surface events for all reconciliation failures (#3462 - thanks @mattmoor)---fixes #2941.
  • Only add KPA label to a K8S service of a revision if KPA is used (#3498 - thanks @yanweiguo)---fixes #2606 (HPA and KPA controllers are getting wrong class PAs)

Core API

Surface events on reconciliation failures (thanks @mattmoor)

Changes boilerplate to surface reconciliation failures in addition to existing logging entries already in place. (#3462) which fixes bug (#2941).

Several Revision default values are now configurable (thanks @mattmoor)

A new ConfigMap in knative-serving called config-defaults enables the customization of the default CPU resource request and request timeout (#3546).

Add a url: to Service/Route status (thanks @dgerd)

A new url: field in the status.traffic block of Service and Route is displayed to enable discovery of the generated URL for name: sub-routes (#3526). This field is only present when name: is used for a traffic target. See the url: field for Route and Service in spec.md

More conformance tests:

  • Validating user securityContext is reflected in container. (thanks @dgerd)
    • This change also adds the group information to the runtime test image, but we do not validate this as 1. it is not currently part of the runtime contract and 2. Setting group is currently an alpha feature that does not work on many Kubernetes clusters. See kubernetes/enhancements#213 - (#3423)
  • Validating that metadata.generateName can be used instead of metadata.name (thanks @brandone-mabey)
    • Add testing to ensure that metadata.generateName can be used instead of metadata.name to specify names for services, routes, and configurations. (#3292) fixing (#3183)

Bug Fixes / Cleanups:

  • CPU requests is now defaulted in the webhook (thanks @mattmoor) (#3529)
  • Fixed broken deploy.sh **(thanks @adrchunha) **(#3367)
  • Dropped functional dependency on 'configurationMetadaraGeneration' Label **(thanks @pivotal-joshua-rider) **(#3325)

Networking

Define 'Certificate' CRD for Auto TLS (thanks @ZhiminXiang)

As part of work in #1964, define an internal CRD Certificate to make TLS provision more pluggable by having the Certificate Controller request an SSL certificate according to the information in Certificate object that is being created. (#3050)

Hide /quitquitquit endpoint of queue-proxy #3279 (thanks @andrew-su)

We hide the /quitquitquit endpoint of queue-proxy, so that it can only be lameducked by the kubelet during shutdown.

GRPC streaming now works on cold start #3239 (thanks @mattmoor)

After a service is scaled-to-zero, a streaming gRPC request should return successfully.

Istio 1.0.7

Update Istio template to 1.0.7.

Health check on cold starts #2856 (thanks @mattmoor)

Activator avoids unnecessary retries by performing health-checking of Revision service after cold start.

Bug fixes / Cleanups:

  • Fix the authority bug (affected GRPC) #3370 (thanks @tanzeeb)
  • Eliminate the request size limit on cold start #3359 (thanks @mattmoor)
  • Add Activator readiness probe for improved availability #2857 (thanks @mattmoor)

Monitoring

Write request logs from queue proxy #3561 (thanks @mdemirhan)

Queue proxy now has the ability to write request logs to stdout. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.

Write request metrics from queue proxy #3596 (thanks @yanweiguo)

Queue proxy now has the ability to generate request count and latency metrics. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.

Knative Serving release v0.5.1

09 Apr 10:02
Compare
Choose a tag to compare
Pre-release

Autoscaling

Bucketize autoscaling metrics by timeframe (#3289 - thanks @markusthoemmes)

Stats are averaged in each specific timeframe vs. averaged over the whole window. Fixes #2977.

Prevent double counting by the autoscaler (#3477 - thanks @hohaichi)

Let the queue report a concurrency metric for proxied requests, and the autoscaler discount this concurrency when making scaling decisions. Fixes bug (#3301).

Scrape queue-proxy metrics in autoscaler (#3149, thanks @yanweiguo)

Scrape queue-proxy metrics in autoscaler instead of pushing metrics from queue-proxy to autoscaler via websocket connection. Remove the websocket usage in queue-proxy. Fixes bugs #2203, #1927.

Bug Fixes / Cleanups

  • Doc update for scale annotations lifetime (#3461 - thanks @yanweiguo) resolving bug (#2720)
  • Surface events for all reconciliation failures (#3462 - thanks @mattmoor)---fixes #2941.
  • Only add KPA label to a K8S service of a revision if KPA is used (#3498 - thanks @yanweiguo)---fixes #2606 (HPA and KPA controllers are getting wrong class PAs)

Core API

Surface events on reconciliation failures (thanks @mattmoor)

Changes boilerplate to surface reconciliation failures in addition to existing logging entries already in place. (#3462) which fixes bug (#2941).

Several Revision default values are now configurable (thanks @mattmoor)

A new ConfigMap in knative-serving called config-defaults enables the customization of the default CPU resource request and request timeout (#3546).

Add a url: to Service/Route status (thanks @dgerd)

A new url: field in the status.traffic block of Service and Route is displayed to enable discovery of the generated URL for name: sub-routes (#3526). This field is only present when name: is used for a traffic target. See the url: field for Route and Service in spec.md

More conformance tests:

  • Validating user securityContext is reflected in container. (thanks @dgerd)
    • This change also adds the group information to the runtime test image, but we do not validate this as 1. it is not currently part of the runtime contract and 2. Setting group is currently an alpha feature that does not work on many Kubernetes clusters. See kubernetes/enhancements#213 - (#3423)
  • Validating that metadata.generateName can be used instead of metadata.name (thanks @brandone-mabey)
    • Add testing to ensure that metadata.generateName can be used instead of metadata.name to specify names for services, routes, and configurations. (#3292) fixing (#3183)

Bug Fixes / Cleanups:

  • CPU requests is now defaulted in the webhook (thanks @mattmoor) (#3529)
  • Fixed broken deploy.sh **(thanks @adrchunha) **(#3367)
  • Dropped functional dependency on 'configurationMetadaraGeneration' Label **(thanks @pivotal-joshua-rider) **(#3325)

Networking

Define 'Certificate' CRD for Auto TLS (thanks @ZhiminXiang)

As part of work in #1964, define an internal CRD Certificate to make TLS provision more pluggable by having the Certificate Controller request an SSL certificate according to the information in Certificate object that is being created. (#3050)

Hide /quitquitquit endpoint of queue-proxy #3279 (thanks @andrew-su)

We hide the /quitquitquit endpoint of queue-proxy, so that it can only be lameducked by the kubelet during shutdown.

GRPC streaming now works on cold start #3239 (thanks @mattmoor)

After a service is scaled-to-zero, a streaming gRPC request should return successfully.

Istio 1.0.7

Update Istio template to 1.0.7.

Health check on cold starts #2856 (thanks @mattmoor)

Activator avoids unnecessary retries by performing health-checking of Revision service after cold start.

Bug fixes / Cleanups:

  • Fix the authority bug (affected GRPC) #3370 (thanks @tanzeeb)
  • Eliminate the request size limit on cold start #3359 (thanks @mattmoor)
  • Add Activator readiness probe for improved availability #2857 (thanks @mattmoor)

Monitoring

Write request logs from queue proxy #3561 (thanks @mdemirhan)

Queue proxy now has the ability to write request logs to stdout. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.

Write request metrics from queue proxy #3596 (thanks @yanweiguo)

Queue proxy now has the ability to generate request count and latency metrics. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.

Knative Serving release v0.5.0

02 Apr 17:02
Compare
Choose a tag to compare
Pre-release

Autoscaling

Bucketize autoscaling metrics by timeframe (#3289 - thanks @markusthoemmes)

Stats are averaged in each specific timeframe vs. averaged over the whole window. Fixes #2977.

Prevent double counting by the autoscaler (#3477 - thanks @hohaichi)

Let the queue report a concurrency metric for proxied requests, and the autoscaler discount this concurrency when making scaling decisions. Fixes bug (#3301).

Scrape queue-proxy metrics in autoscaler (#3149, thanks @yanweiguo)

Scrape queue-proxy metrics in autoscaler instead of pushing metrics from queue-proxy to autoscaler via websocket connection. Remove the websocket usage in queue-proxy. Fixes bugs #2203, #1927.

Bug Fixes / Cleanups

  • Doc update for scale annotations lifetime (#3461 - thanks @yanweiguo) resolving bug (#2720)
  • Surface events for all reconciliation failures (#3462 - thanks @mattmoor)---fixes #2941.
  • Only add KPA label to a K8S service of a revision if KPA is used (#3498 - thanks @yanweiguo)---fixes #2606 (HPA and KPA controllers are getting wrong class PAs)

Core API

Surface events on reconciliation failures (thanks @mattmoor)

Changes boilerplate to surface reconciliation failures in addition to existing logging entries already in place. (#3462) which fixes bug (#2941).

Several Revision default values are now configurable (thanks @mattmoor)

A new ConfigMap in knative-serving called config-defaults enables the customization of the default CPU resource request and request timeout (#3546).

Add a url: to Service/Route status (thanks @dgerd)

A new url: field in the status.traffic block of Service and Route is displayed to enable discovery of the generated URL for name: sub-routes (#3526). This field is only present when name: is used for a traffic target. See the url: field for Route and Service in spec.md

More conformance tests:

  • Validating user securityContext is reflected in container. (thanks @dgerd)
    • This change also adds the group information to the runtime test image, but we do not validate this as 1. it is not currently part of the runtime contract and 2. Setting group is currently an alpha feature that does not work on many Kubernetes clusters. See kubernetes/enhancements#213 - (#3423)
  • Validating that metadata.generateName can be used instead of metadata.name (thanks @brandone-mabey)
    • Add testing to ensure that metadata.generateName can be used instead of metadata.name to specify names for services, routes, and configurations. (#3292) fixing (#3183)

Bug Fixes / Cleanups:

  • CPU requests is now defaulted in the webhook (thanks @mattmoor) (#3529)
  • Fixed broken deploy.sh **(thanks @adrchunha) **(#3367)
  • Dropped functional dependency on 'configurationMetadaraGeneration' Label **(thanks @pivotal-joshua-rider) **(#3325)

Networking

Define 'Certificate' CRD for Auto TLS (thanks @ZhiminXiang)

As part of work in #1964, define an internal CRD Certificate to make TLS provision more pluggable by having the Certificate Controller request an SSL certificate according to the information in Certificate object that is being created. (#3050)

Hide /quitquitquit endpoint of queue-proxy #3279 (thanks @xtreme-andrew-su)

We hide the /quitquitquit endpoint of queue-proxy, so that it can only be lameducked by the kubelet during shutdown.

GRPC streaming now works on cold start #3239 (thanks @mattmoor)

After a service is scaled-to-zero, a streaming gRPC request should return successfully.

Istio 1.0.7

Update Istio template to 1.0.7.

Health check on cold starts #2856 (thanks @mattmoor)

Activator avoids unnecessary retries by performing health-checking of Revision service after cold start.

Bug fixes / Cleanups:

  • Fix the authority bug (affected GRPC) #3370 (thanks @tanzeeb)
  • Eliminate the request size limit on cold start #3359 (thanks @mattmoor)
  • Add Activator readiness probe for improved availability #2857 (thanks @mattmoor)

Monitoring

Write request logs from queue proxy #3561 (thanks @mdemirhan)

Queue proxy now has the ability to write request logs to stdout. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.

Write request metrics from queue proxy #3596 (thanks @yanweiguo)

Queue proxy now has the ability to generate request count and latency metrics. This functionality already exists in Istio mesh and the reason for the duplication here is to move towards eliminating our dependency on Istio's mesh functionality.