Knative Serving release v0.10.1
Pre-releaseMeta
Eliminated errors across dataplane-probe scenarios!
With some of the work to improve the activator’s load balancing, the errors we would see with containerConcurrency: 1
due to queuing have been eliminated. With the CC aware load balancing in the activator we actually see better latency going through the activator than talking directly to the user container (everywhere else the extra hop adds latency).
Moving minimum Kubernetes version to 1.14
As part of moving to a single install path we are moving the minimum supported Kubernetes version to 1.14. This allows us to take advantage of multiple CRD endpoints and begin to experiment with future Kubernetes CRD features. Installation will fail if a lower version is detected.
We’re using Go1.13 for Serving
Serving has switched to Go 1.13, which has much better performance around synchronizations, has error wrapping and other features, like Duration.Milliseconds
.
Autoscaling
We no longer use GenerateName for service names (@vagababov)
We were using GenerateName for creation of metrics and private K8s Service names. Which caused us various problems in testing and reliability. We no longer have this problem.
Activator refactoring and load balancing (@vagababov, @markusthoemmes):
After great changes by @greghaynes that permit probing and routing requests to individual pods -- we were able to significantly simplify the code, remove redundancies and ineffective pieces.
Semi-ideal load balancing (@vagababov):
Based on previous work we are able now to route requests to the individual pods always (when pods are individually addressable) permitting us to achieve significant improvements in the CC=1 case. See the graph. Work in this direction is not complete though (CC=10 case is still in progress)
Significant improvements to the integration tests that led to a big reduction in flakes (@nak3 @JRBANCEL):
Assorted improvements to the code and the tests have brought the number of flakes to practically white noise. See graph (check test/e2e.TestAutoscale.*
tests)
Assorted code readability, optimizations and clean ups (@markusthoemmes, @nak3, @JRBANCEL, @skaslev)
Core API
Move to K8s 1.15.3 client libs #5570 (thanks @mattmoor)
The client version allows Knative to take advantage of newer features within Kubernetes going forward. This client version was chosen as it is compatible with 1.14 (our minimum version), but can also be used for longer as it is compatible with 1.16 Kubernetes releases as well.
Move back to single install path will all API versions (v1alpha1, v1beta1, v1) #5594 (thanks @mattmoor)
As we move to a 1.14 minimum Kubernetes version we are migrating back to a single install path that contains all 3 API endpoints. See Release Principles Draft for how this will work for future releases.
Skip copying last-applied-configuration annotation to Route #5468 (thanks @nak3)
The last-applied-configuration annotation is applied when using kubectl to manipulate the Service object. Previously this annotation would be copied down to Route which would cause confusion when describing the Route.
ConfigMaps are now validated synchronously #5404 (thanks @nimakaviani)
Malformed configmaps were a potential source of latent error and were often difficult to debug. This release adds synchronous validation of configmaps which ensures that bad values aren't able to sneak through.
New ClusterRoles for editing/viewing Knative resources through User-facing roles #5683 (thanks @nak3)
The ClusterRoles knative-serving-namespaced-edit and knative-serving-namespaced-view have been added as User-facing Roles. Read more about User-facing Roles in the Kubernetes documentation.
Add annotation /creator and /lastModifier to Configuration and Route #5240 (thanks @savitaashture)
These annotations were added to Services in previously releases where the information was propagated down. This release adds the annotations for Routes and Configurations created directly by a user.
Service and Route CRDs are now labeled with duck.knative.dev/addressable=true #5874 (thanks @n3wscott)
Bugs:
- Fix v1 Route validation for multiple traffic targets with empty tags #5583 (thanks @skaslev)
- Fix error message for missing probe field. #5713 (thanks @nak3)
- Fail Service creation on invalid delaySeconds value #5733 (thanks @savitaashture)
- Better error message for invalid combinations #5566 (thanks @nak3)
- Delete finalizer on Route on deletion #5715 (thanks @nak3)
- Validate name and generateName for RevisionTemplate #5110 (thanks @savitaashture)
Tests:
- Use Status.URL instead of Status.URL.Host for conformance tests #5503 (thanks @bancel)
- Enable downgrade testing #5596 (thanks @mattmoor)
- New e2e test for rollback scenario #5702 (thanks @taragu)
- Remove logURL assertion from conformance tests #5448 (thanks @markusthommes)
Networking
Activator graceful shutdown #5542 (thanks @nak3)
Fix a bug due to readiness probes showing successes when an activator is shutting down, causing requests to still be routed to terminating activators. We do this by letting SIGTERM triggers readinessProbe failure to allow terminating activators to properly drain.
Avoid creating wildcard certs when AutoTLS is disabled #5636 (thanks @nak3)
In v0.9.0, we attempted to create wildcard certs even though cert-manager is not setup, causing certificate creation errors when creating a new namespace. We fixed this to avoid requiring wildcard certs when AutoTLS is disabled.
Finalize ClusterIngress migration #5689 (thanks @wtam2018)
We removed the remaining references to ClusterIngress, and that completes the ClusterIngress migration feature track. Going forward, knative/serving no longer has cluster-scoped CRDs.
Improved readiness prober to support HTTPS redirect, HTTPS, HTTP2 & custom ports #5223 (thanks @JRBANCEL)
Previously Route readiness probers rely on a special domain coded into Istio VirtualServices. We now change the probes to probe the actual data path, allowing probes to work with the domains that the Route is expected to serve.
Fix cluster-local visibility when using tags #5734 (thanks @andrew-su)
Fix a visibility resolution bug, introduced in v0.9.0, causing cluster-local tags to not have cluster-local visibility even if explicitly set.