Kubernetes-based, scale-to-zero, request-driven compute
APACHE-2.0 License
Bot releases are visible (Hide)
Published by knative-prow-releaser-robot over 4 years ago
We have made the decision to deprecate the bundled monitoring tools that have remained unchanged since 2018 due to a lack of community interest. We will stop releasing them in a coming release and will instead focus on documenting how to integrate with existing monitoring systems using OpenTelemetry.
We have included a new migration Job to migrate existing resources. See the serving-storage-version-migration.yaml release artifact.
We were unable to bump our minimum Kubernetes dependency to 1.16 this release as planned due to its lack of availability in GKE (on which we have a hard dependency for CI/CD). The principle behind our choice of minimum upstream version remains the same, and users should expect future releases to attempt to “catch up”.
After installing 0.14, a new migration Job must be run to migrate pre-existing resources, and remove v1alpha1 as a stored version from our CRDs.
Fixes a long-standing issue where our tag resolutions does not work properly for AWS ECR.
Istio KIngress reconciler is now separated into its own repository knative/net-istio, enabling more focused testing on presubmits. In the future, Istio integration bugs should be filed to this new repository
knative/net-http01 is a simple standalone ACME HTTP01 solver for the Knative Certificate abstraction.
A new home for Kourier - a lightweight Envoy-based Knative Ingress reconciler previously hosted at https://github.com/3scale/kourier.
Adding Istio canonical service labels (https://github.com/istio/istio/pull/20943) to Knative objects for better integration with Istio UX.
/healthz
for probe path for easier whitelisting #5918 (thanks itsmurugappa, shreejad)We changed our probe path from /_internal/knative/activator/probe to /healthz and made that consistent across all probe receivers in Knative Serving.
Any scenario where probing would fail forever with the current implementation is now treated as a successful probing, to allow failing-open in cases where users use a 3-legged-oauth setup that would cause probing to fail indefinitely.
Previously, we sometimes referred to unused Gateways in a VirtualService. That caused issues with Istio validation logic if those unused Gateways were non-existent. Unused Gateways are no longer referred from VirtualServices.
Published by knative-prow-releaser-robot over 4 years ago
go mod
migrationKnative is now completely migrated to Golang modules.
serving.yaml
and serving-cert-manager.yaml
will be shipped for the last time in this release. They have been broken out into separate artifacts. Please refer to the current installation docs for guidance on how to install Knative Serving and its optional components.
As per the Kubernetes minimum version principle - our current minimum supported Kubernetes version is now 1.16.
We compute a subset of Activator pods for each revision in a consistent manner, rather than assigning all. This noticeably improves load balancing for smaller revisions with small container concurrency values.
Revision.Status.ImageDigest
is deprecated and the digest will appear in Revision.Status.ContainerStatus
.features.knative.dev/podspec-dryrun: enabled
features.knative.dev/podspec-dryrun: strict
concurrencyModel
#7893 (thanks @vagabov)buildName
and buildRef
#7896 (thanks @vagabov)user-container
.Published by knative-prow-releaser-robot over 4 years ago
This is NOT a change from 0.12, however, with the adoption of Conversion webhooks this is no longer something that may be overridden without consequence.
The target minimum version for our next (0.14) release will be Kubernetes 1.16.
The v1 APIs are now available in every supported version of Knative, and our controllers are now consuming v1 themselves.
We will continue to ship the deprecated APIs for 9 months (6 releases), so these will be removed in the 0.19 release.
We take advantage of this long-awaited Beta+ feature in 1.15+ to manage converting between v1alpha1, v1beta1, and v1 types.
${route}
and ${route}-mesh
#6362 (thanks @sreddy)Published by knative-prow-releaser-robot over 4 years ago
At low containerConcurrency’s we now perform significantly better due to improvements in the application-specific load-balancing performed by the Activator component.
We have a new option for handling the ingress capabilities used by knative/serving. Kourier is the first Knative-native ingress implementation, which reconciles the Knative networking CRDs to program Envoy directly.
These are further improvements to the loadbalancing enhancements over the last releases. Given a stable activator count, loadbalancing of a revision with the activator on the path is now locally ideal. The graph.
The third service used to be used for metric scraping exclusively. This is now done via the private service as well. Metric services are no longer created and actively removed in existing deployments.
The queue-proxy wrongly counted requests sent via livenessProbes as actual requests, causing the revision to never shut down. These requests are now properly ignored.
This fixes a bug in the logic to determine the actual target of the autoscaler which capped the user-defined target value to the configured default value.
The values for desired and actual scale are now plumbed through from the HPA into the PodAutoscaler’s status.
Previous error messages did not indicate that the image pull failure occurred during digest resolution, and did not provide further details as to why the digest resolution failed. This change aides users in debugging problems in container registry permissions.
imagePullSecrets
in PodSpec #5917 (thanks @taragu)Users may now specify imagePullSecrets directly without attaching them to their Kubernetes ServiceAccount.
caching.internal.knative.dev
to edit and view cluster roles #5992 (thanks @nak3)Knative provides aggregated ClusterRoles that users can use to manage their Knative resources. These roles previously did not include the caching resource. This change adds the caching resource to both the edit and view roles.
This fixes a problem where our validation wasn’t necessarily applied to the final object because it runs at the same time as defaulting, which might be before additional mutating webhooks. By separating things out we ensure that the validation occurs on the final object to be committed to etcd.
duck.knative.dev/podspecable
#6121 (thanks @mattmoor)This enables tools that reflect over the Kubernetes type system to reason about the podspec portion of these Knative resources.
name
and generateName
fields in RevisionTemplate #5110 (thanks @savitaashture)Istio 1.4 introduced a breaking restriction to the length of regular expressions allowed in VirtualServices. We switched to using prefixes to be compatible with Istio 1.4.
Knative now uses istio/client-go instead of its own version of Istio API client. This addressed a long pain-point of maintaining a manually-translated API client to a changing API.
Kourier is a light-weight Ingress for Knative (a deployment of Kourier consists of an Envoy proxy and a control plane for it). In v0.11 we add Kourier as an option to run Knative e2e integration tests.
Previously when VirtualService failed to be reconciled the LoadBalancerReady Condition isn’t updated. We fix this to surface reason and message from the failing VirtualService.
Fix a bug where cluster-local ksvcs are erroneously exposed to the public ingress.
This change makes the default backend Prometheus and makes it consistent with the default example value in config-observability.yaml
Published by knative-prow-releaser-robot over 4 years ago
We have made the decision to deprecate the bundled monitoring tools that have remained unchanged since 2018 due to a lack of community interest. We will stop releasing them in a coming release and will instead focus on documenting how to integrate with existing monitoring systems using OpenTelemetry.
We have included a new migration Job to migrate existing resources. See the serving-storage-version-migration.yaml release artifact.
We were unable to bump our minimum Kubernetes dependency to 1.16 this release as planned due to its lack of availability in GKE (on which we have a hard dependency for CI/CD). The principle behind our choice of minimum upstream version remains the same, and users should expect future releases to attempt to “catch up”.
After installing 0.14, a new migration Job must be run to migrate pre-existing resources, and remove v1alpha1 as a stored version from our CRDs.
Fixes a long-standing issue where our tag resolutions does not work properly for AWS ECR.
Istio KIngress reconciler is now separated into its own repository knative/net-istio, enabling more focused testing on presubmits. In the future, Istio integration bugs should be filed to this new repository
knative/net-http01 is a simple standalone ACME HTTP01 solver for the Knative Certificate abstraction.
A new home for Kourier - a lightweight Envoy-based Knative Ingress reconciler previously hosted at https://github.com/3scale/kourier.
Adding Istio canonical service labels (https://github.com/istio/istio/pull/20943) to Knative objects for better integration with Istio UX.
/healthz
for probe path for easier whitelisting #5918 (thanks itsmurugappa, shreejad)We changed our probe path from /_internal/knative/activator/probe to /healthz and made that consistent across all probe receivers in Knative Serving.
Any scenario where probing would fail forever with the current implementation is now treated as a successful probing, to allow failing-open in cases where users use a 3-legged-oauth setup that would cause probing to fail indefinitely.
Previously, we sometimes referred to unused Gateways in a VirtualService. That caused issues with Istio validation logic if those unused Gateways were non-existent. Unused Gateways are no longer referred from VirtualServices.
Published by knative-prow-releaser-robot over 4 years ago
This is NOT a change from 0.12, however, with the adoption of Conversion webhooks this is no longer something that may be overridden without consequence.
The target minimum version for our next (0.14) release will be Kubernetes 1.16.
The v1 APIs are now available in every supported version of Knative, and our controllers are now consuming v1 themselves.
We will continue to ship the deprecated APIs for 9 months (6 releases), so these will be removed in the 0.19 release.
We take advantage of this long-awaited Beta+ feature in 1.15+ to manage converting between v1alpha1, v1beta1, and v1 types.
${route}
and ${route}-mesh
#6362 (thanks @sreddy)Published by knative-prow-releaser-robot over 4 years ago
This is NOT a change from 0.12, however, with the adoption of Conversion webhooks this is no longer something that may be overridden without consequence.
The target minimum version for our next (0.14) release will be Kubernetes 1.16.
The v1 APIs are now available in every supported version of Knative, and our controllers are now consuming v1 themselves.
We will continue to ship the deprecated APIs for 9 months (6 releases), so these will be removed in the 0.19 release.
We take advantage of this long-awaited Beta+ feature in 1.15+ to manage converting between v1alpha1, v1beta1, and v1 types.
${route}
and ${route}-mesh
#6362 (thanks @sreddy)Published by knative-prow-releaser-robot over 4 years ago
This is NOT a change from 0.12, however, with the adoption of Conversion webhooks this is no longer something that may be overridden without consequence.
The target minimum version for our next (0.14) release will be Kubernetes 1.16.
The v1 APIs are now available in every supported version of Knative, and our controllers are now consuming v1 themselves.
We will continue to ship the deprecated APIs for 9 months (6 releases), so these will be removed in the 0.19 release.
We take advantage of this long-awaited Beta+ feature in 1.15+ to manage converting between v1alpha1, v1beta1, and v1 types.
${route}
and ${route}-mesh
#6362 (thanks @sreddy)Published by knative-prow-releaser-robot over 4 years ago
This release of Knative adopts the 1.16.4 Kubernetes client which supports Kubernetes versions 0.15 through 0.17.
Revisions are now retained for 48 hours and the latest 20 are kept before being considered for garbage collection. This is up from 24 hours and a single revision previously. The prior behavior can be restored by updating the “config-gc” configmap in knative-serving.
The Certificate interface now supports the use of HTTP01 challenges, which can be significantly faster than DNS01 challenges for provisioning certificates and don’t require permissions to rewrite DNS records.
Support has been added to use projectcontour.io as the networking layer for knative/serving.
A multi step change replacing map based O(N) metric average computation, with running window O(1) and constant memory allocation scheme based on a circular buffer.
Various improvements to the allocation behavior of the activator’s hot-path to avoid as many allocations per request as possible. Most notably introduced a BufferPool to pool buffers of the HTTP reverse-proxy.
This was buggy in earlier releases as the deployment manifest of the activator was not correctly put together.
Various system clean ups, test stability (thanks @skaslev, @markusthoemmes, @vagababov, @nak3)
Previous defaults were 24 hours before consideration and 1 minimum Revision to keep.
Status updates are now retried locally during reconciliation to avoid constant event and reconciliation-retry churn.
Previously when execProbes were specified they were dropped resulting in a 'no probe specified error'. With this change the exec probe will be executed on the user container and the default TCP probe will be executed on the queue-proxy container.
We added support of ACME HTTP01 challenge which is less restrictive than the DNS while offering faster certificate provisioning.
A new suite of directed testing has been added for our Ingress abstraction, which can be used to validate that an implementation properly implements the semantics expected for KIngress without running the full e2e test suite. This suite uncovered a number of underdocumented semantics and several bugs in all of the networking integrations.
A default timeout setting is added to help Ingress prober avoid hanging.
We prevent potential race condition when probing multiple Ingress by not sharing any state between different probe run of different Ingresses.
Previously our Istio reconciler used header appending to manipulate headers when routing to Revisions. This causes issue of the header has already been set. We switch to using ‘Set’ instead of ‘Append’ to ensure our header manipulation always work.
Previously, it is possible for an Ingress to mistakenly delete a VirtualService that it doesn’t own. We fix to make sure owner reference are confirmed before triggering deletion.
Fix a bug in our Istio-based reconciler to avoid generating the short hostnames for ‘mesh’ VirtualService, which may intermittently cause Envoy to get ‘Duplicate entry of domain’ errors.
Added metric knative.dev/internal/serving/controller/cert_creation_count
.
Added experimental support for exporting metrics to OpenCensus. Note that the format of the exported metrics is likely to change.
Published by knative-prow-releaser-robot over 4 years ago
This release of Knative adopts the 1.16.4 Kubernetes client which supports Kubernetes versions 0.15 through 0.17.
Revisions are now retained for 48 hours and the latest 20 are kept before being considered for garbage collection. This is up from 24 hours and a single revision previously. The prior behavior can be restored by updating the “config-gc” configmap in knative-serving.
The Certificate interface now supports the use of HTTP01 challenges, which can be significantly faster than DNS01 challenges for provisioning certificates and don’t require permissions to rewrite DNS records.
Support has been added to use projectcontour.io as the networking layer for knative/serving.
A multi step change replacing map based O(N) metric average computation, with running window O(1) and constant memory allocation scheme based on a circular buffer.
Various improvements to the allocation behavior of the activator’s hot-path to avoid as many allocations per request as possible. Most notably introduced a BufferPool to pool buffers of the HTTP reverse-proxy.
This was buggy in earlier releases as the deployment manifest of the activator was not correctly put together.
Various system clean ups, test stability (thanks @skaslev, @markusthoemmes, @vagababov, @nak3)
Previous defaults were 24 hours before consideration and 1 minimum Revision to keep.
Status updates are now retried locally during reconciliation to avoid constant event and reconciliation-retry churn.
Previously when execProbes were specified they were dropped resulting in a 'no probe specified error'. With this change the exec probe will be executed on the user container and the default TCP probe will be executed on the queue-proxy container.
We added support of ACME HTTP01 challenge which is less restrictive than the DNS while offering faster certificate provisioning.
A new suite of directed testing has been added for our Ingress abstraction, which can be used to validate that an implementation properly implements the semantics expected for KIngress without running the full e2e test suite. This suite uncovered a number of underdocumented semantics and several bugs in all of the networking integrations.
A default timeout setting is added to help Ingress prober avoid hanging.
We prevent potential race condition when probing multiple Ingress by not sharing any state between different probe run of different Ingresses.
Previously our Istio reconciler used header appending to manipulate headers when routing to Revisions. This causes issue of the header has already been set. We switch to using ‘Set’ instead of ‘Append’ to ensure our header manipulation always work.
Previously, it is possible for an Ingress to mistakenly delete a VirtualService that it doesn’t own. We fix to make sure owner reference are confirmed before triggering deletion.
Fix a bug in our Istio-based reconciler to avoid generating the short hostnames for ‘mesh’ VirtualService, which may intermittently cause Envoy to get ‘Duplicate entry of domain’ errors.
Added metric knative.dev/internal/serving/controller/cert_creation_count
.
Added experimental support for exporting metrics to OpenCensus. Note that the format of the exported metrics is likely to change.
Published by knative-prow-releaser-robot almost 5 years ago
At low containerConcurrency’s we now perform significantly better due to improvements in the application-specific load-balancing performed by the Activator component.
We have a new option for handling the ingress capabilities used by knative/serving. Kourier is the first Knative-native ingress implementation, which reconciles the Knative networking CRDs to program Envoy directly.
These are further improvements to the loadbalancing enhancements over the last releases. Given a stable activator count, loadbalancing of a revision with the activator on the path is now locally ideal. The graph.
The third service used to be used for metric scraping exclusively. This is now done via the private service as well. Metric services are no longer created and actively removed in existing deployments.
The queue-proxy wrongly counted requests sent via livenessProbes as actual requests, causing the revision to never shut down. These requests are now properly ignored.
This fixes a bug in the logic to determine the actual target of the autoscaler which capped the user-defined target value to the configured default value.
The values for desired and actual scale are now plumbed through from the HPA into the PodAutoscaler’s status.
Previous error messages did not indicate that the image pull failure occurred during digest resolution, and did not provide further details as to why the digest resolution failed. This change aides users in debugging problems in container registry permissions.
imagePullSecrets
in PodSpec #5917 (thanks @taragu)Users may now specify imagePullSecrets directly without attaching them to their Kubernetes ServiceAccount.
caching.internal.knative.dev
to edit and view cluster roles #5992 (thanks @nak3)Knative provides aggregated ClusterRoles that users can use to manage their Knative resources. These roles previously did not include the caching resource. This change adds the caching resource to both the edit and view roles.
This fixes a problem where our validation wasn’t necessarily applied to the final object because it runs at the same time as defaulting, which might be before additional mutating webhooks. By separating things out we ensure that the validation occurs on the final object to be committed to etcd.
duck.knative.dev/podspecable
#6121 (thanks @mattmoor)This enables tools that reflect over the Kubernetes type system to reason about the podspec portion of these Knative resources.
name
and generateName
fields in RevisionTemplate #5110 (thanks @savitaashture)Istio 1.4 introduced a breaking restriction to the length of regular expressions allowed in VirtualServices. We switched to using prefixes to be compatible with Istio 1.4.
Knative now uses istio/client-go instead of its own version of Istio API client. This addressed a long pain-point of maintaining a manually-translated API client to a changing API.
Kourier is a light-weight Ingress for Knative (a deployment of Kourier consists of an Envoy proxy and a control plane for it). In v0.11 we add Kourier as an option to run Knative e2e integration tests.
Previously when VirtualService failed to be reconciled the LoadBalancerReady Condition isn’t updated. We fix this to surface reason and message from the failing VirtualService.
Fix a bug where cluster-local ksvcs are erroneously exposed to the public ingress.
This change makes the default backend Prometheus and makes it consistent with the default example value in config-observability.yaml
Published by knative-prow-releaser-robot almost 5 years ago
At low containerConcurrency’s we now perform significantly better due to improvements in the application-specific load-balancing performed by the Activator component.
We have a new option for handling the ingress capabilities used by knative/serving. Kourier is the first Knative-native ingress implementation, which reconciles the Knative networking CRDs to program Envoy directly.
These are further improvements to the loadbalancing enhancements over the last releases. Given a stable activator count, loadbalancing of a revision with the activator on the path is now locally ideal. The graph.
The third service used to be used for metric scraping exclusively. This is now done via the private service as well. Metric services are no longer created and actively removed in existing deployments.
The queue-proxy wrongly counted requests sent via livenessProbes as actual requests, causing the revision to never shut down. These requests are now properly ignored.
This fixes a bug in the logic to determine the actual target of the autoscaler which capped the user-defined target value to the configured default value.
The values for desired and actual scale are now plumbed through from the HPA into the PodAutoscaler’s status.
Previous error messages did not indicate that the image pull failure occurred during digest resolution, and did not provide further details as to why the digest resolution failed. This change aides users in debugging problems in container registry permissions.
imagePullSecrets
in PodSpec #5917 (thanks @taragu)Users may now specify imagePullSecrets directly without attaching them to their Kubernetes ServiceAccount.
caching.internal.knative.dev
to edit and view cluster roles #5992 (thanks @nak3)Knative provides aggregated ClusterRoles that users can use to manage their Knative resources. These roles previously did not include the caching resource. This change adds the caching resource to both the edit and view roles.
This fixes a problem where our validation wasn’t necessarily applied to the final object because it runs at the same time as defaulting, which might be before additional mutating webhooks. By separating things out we ensure that the validation occurs on the final object to be committed to etcd.
duck.knative.dev/podspecable
#6121 (thanks @mattmoor)This enables tools that reflect over the Kubernetes type system to reason about the podspec portion of these Knative resources.
name
and generateName
fields in RevisionTemplate #5110 (thanks @savitaashture)Istio 1.4 introduced a breaking restriction to the length of regular expressions allowed in VirtualServices. We switched to using prefixes to be compatible with Istio 1.4.
Knative now uses istio/client-go instead of its own version of Istio API client. This addressed a long pain-point of maintaining a manually-translated API client to a changing API.
Kourier is a light-weight Ingress for Knative (a deployment of Kourier consists of an Envoy proxy and a control plane for it). In v0.11 we add Kourier as an option to run Knative e2e integration tests.
Previously when VirtualService failed to be reconciled the LoadBalancerReady Condition isn’t updated. We fix this to surface reason and message from the failing VirtualService.
Fix a bug where cluster-local ksvcs are erroneously exposed to the public ingress.
This change makes the default backend Prometheus and makes it consistent with the default example value in config-observability.yaml
Published by knative-prow-releaser-robot almost 5 years ago
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).
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.
Serving has switched to Go 1.13, which has much better performance around synchronizations, has error wrapping and other features, like Duration.Milliseconds
.
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.
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.
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)
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 a visibility resolution bug, introduced in v0.9.0, causing cluster-local tags to not have cluster-local visibility even if explicitly set.
Published by knative-prow-releaser-robot almost 5 years ago
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).
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.
Serving has switched to Go 1.13, which has much better performance around synchronizations, has error wrapping and other features, like Duration.Milliseconds
.
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.
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.
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)
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 a visibility resolution bug, introduced in v0.9.0, causing cluster-local tags to not have cluster-local visibility even if explicitly set.
Published by knative-prow-releaser-robot about 5 years ago
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.
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.
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.
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:
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.
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)
Previously Revisions would keep around the minScale instance even when they were no longer routable.
Added Reachability concept to the PodAutoscaler.
The rate at which the autoscaler scales down revisions can now be limited to a rate configured in config-autoscaler.
The v1 API shape and endpoint is available starting in this release. See the "Meta" section for more details.
Webhook validation now ensures that serving.knative.dev annotations have appropriate values.
service.knative.dev/route
label #5048 (thanks @mattmoor)Revisions are now labeled by the referencing Route to enable querying.
Revision reconciliation now occurs separately from Configuration reconciliation.
DeploymentProgressing and DeploymentReplicaFailure information is propagated up to Revision status. An event is no longer emitted when the deployment times out.
We now validate the KeyToPath items in the webhook to ensure that both Key and Path are specified. This prevents potential pod deployments problems.
ContainerConcurrency is now configured through the config-defaults
ConfigMap. Unspecified values will receive the default value, and explicit zero values will receive 'unlimited' concurrency.
Labels on the Route will be propagated to the Ingress owned by the Route.
Global resyncs no longer enqueue all objects at once. This prevents latency spikes in reconciliation time and improves the performance of larger clusters.
The activator sends request directly to Pod #3885 #4902 (thanks @greghaynes)
Published by knative-prow-releaser-robot about 5 years ago
We are burning down remaining issues here, but barring major issues we will declare 0.9 the “v1” release of knative/serving.
In order to support #4755 we have to officially remove support for Istio 1.0.x (which is end-of-life).
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.
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.
knative.dev/serving
import pathWe have migrated github.com/knative/serving
import paths to use knative.dev/serving
.
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.
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.
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.
Autoscaling metrics are now full-fledged resources in Knative, this enables new autoscalers to plug in from out-of-process.
This proves that the metrics resource model enables a fully capable autoscaler outside of the main autoscaling controller.
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.
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.
Knative has been updated to use the new AWS credential provider to enable pulling images from AWS ECR.
serving.knative.dev/creator
#4526 (thanks @nak3)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.
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.
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.
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.
Each sub Route (tags) can have their own visibility setting by labelling the corresponding placeholder K8s Service.
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).
Knative-on-Gloo now has its own continuous build to ensure good integration.
Gloo now officially supports networking.internal.knative.dev/Ingress
(see #4028).
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”.
Fixed an issue where some controller metrics were not getting into Prometheus due to invalid characters in their component names,
Published by knative-prow-releaser-robot about 5 years ago
We are burning down remaining issues here, but barring major issues we will declare 0.9 the “v1” release of knative/serving.
In order to support #4755 we have to officially remove support for Istio 1.0.x (which is end-of-life).
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.
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.
knative.dev/serving
import pathWe have migrated github.com/knative/serving
import paths to use knative.dev/serving
.
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.
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.
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.
Autoscaling metrics are now full-fledged resources in Knative, this enables new autoscalers to plug in from out-of-process.
This proves that the metrics resource model enables a fully capable autoscaler outside of the main autoscaling controller.
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.
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.
Knative has been updated to use the new AWS credential provider to enable pulling images from AWS ECR.
serving.knative.dev/creator
#4526 (thanks @nak3)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.
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.
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.
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.
Each sub Route (tags) can have their own visibility setting by labelling the corresponding placeholder K8s Service.
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).
Knative-on-Gloo now has its own continuous build to ensure good integration.
Gloo now officially supports networking.internal.knative.dev/Ingress
(see #4028).
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”.
Fixed an issue where some controller metrics were not getting into Prometheus due to invalid characters in their component names,
Published by knative-prow-releaser-robot over 5 years ago
serving.knative.dev/v1beta1
(requires K8s 1.14+ due to https://github.com/knative/serving/issues/4533)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
.queue-proxy
sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.tagTemplate
section below for how to avoid this break.Metric-scraping and decision-making has been separated out of the Knative internal autoscaler (KPA). The metrics are now also available to the HPA.
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.
This release exposes resources under serving.knative.dev/v1beta1
.
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.
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.
Based on community feedback, we have added support for mounting ConfigMaps and Secrets via the projected volume type.
A variety of legacy fields from our v1alpha1 have been dropped in preparation to serve these same objects over v1beta1.
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.
As mentioned in the 0.6 release notes, support for manual mode has been removed, and requests containing it will now be rejected.
We have generated client libraries for v1beta1 and have a v1beta1 version of the API conformance test suite under ./test/conformance/api/v1beta1.
Objects submitted with the old v1alpha1 schema will be upgraded via our “defaulting” logic in a mutating admission webhook.
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
.
Annotations now propagate from the Knative Service object to Route and Configuration.
This allows ClusterIngress class annotation to be specified per-Route instead of cluster wide through a config-network setting.
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.
User can now provide custom subdomain via label serving.knative.dev/subDomain.
This introduces a new config entry max-revision-timeout-seconds in config-defaults to set the max allowed request timeout.
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.
This lowers the memory necessary to schedule the zipkin pod.
/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.
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.
Published by knative-prow-releaser-robot over 5 years ago
serving.knative.dev/v1beta1
(requires K8s 1.14+ due to https://github.com/knative/serving/issues/4533)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
.queue-proxy
sidecar injected into the user pod. This enables the use of stricter “Pod Security Policies” with knative/serving.tagTemplate
section below for how to avoid this break.Metric-scraping and decision-making has been separated out of the Knative internal autoscaler (KPA). The metrics are now also available to the HPA.
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.
This release exposes resources under serving.knative.dev/v1beta1
.
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.
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.
Based on community feedback, we have added support for mounting ConfigMaps and Secrets via the projected volume type.
A variety of legacy fields from our v1alpha1 have been dropped in preparation to serve these same objects over v1beta1.
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.
As mentioned in the 0.6 release notes, support for manual mode has been removed, and requests containing it will now be rejected.
We have generated client libraries for v1beta1 and have a v1beta1 version of the API conformance test suite under ./test/conformance/api/v1beta1.
Objects submitted with the old v1alpha1 schema will be upgraded via our “defaulting” logic in a mutating admission webhook.
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
.
Annotations now propagate from the Knative Service object to Route and Configuration.
This allows ClusterIngress class annotation to be specified per-Route instead of cluster wide through a config-network setting.
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.
User can now provide custom subdomain via label serving.knative.dev/subDomain.
This introduces a new config entry max-revision-timeout-seconds in config-defaults to set the max allowed request timeout.
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.
This lowers the memory necessary to schedule the zipkin pod.
/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.
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.
Published by knative-prow-releaser-robot over 5 years ago
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:
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.
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.
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.
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
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)
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).
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)
Activator now reports request logs (#3781) with check-in (#3927) (Thanks @mdemirhan)
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)