---
title: "v0.20 release"
linkTitle: "v0.20 release"
Author: "[Carlos Santana](https://twitter.com/csantanapr)"
Author handle: https://github.com/csantanapr
date: 2021-01-15
description: "Knative v0.20 release announcement"
type: "blog"
image: knative-eventing.png
---


### Announcing Knative v0.20 Release

A new version of Knative is now available across multiple components.
Follow the instructions in the documentation [Installing Knative](https://knative.dev/docs/install/) for the respective component.

#### Table of Contents
- [Serving v0.20](#serving-v020)
- [Eventing v0.20](#eventing-v020)
- Eventing Extensions
    - [Eventing Kafka Broker v0.20](#eventing-kafka-broker-v020)
- [CLI v0.20](#client-v020)
- [Operator v0.20](#operator-v020)
- [Thank you contributors v0.20](#thank-you-contributors-v0.20)


### Highlights

- Serving continues to polish DomainMapping.
- Gradual traffic rollout featured is introduced.
- Propagation of delivery spec down to subscription is now added in Eventing.
- Eventing Kafka Broker enhanced with multiple observability related to metrics and tracing.
- The `kn` CLI introduces a new experimental offline mode (--target) for `kn service create` that allows creating Knative services locally in resource files.

### Serving v0.20

#### 🚨 Breaking
- Validate DomainMapping name if it is fully qualified. ([#10379](https://github.com/knative/serving/pull/10379))
- Remove the GC feature flag and v1 GC/Labeler ([#10084](https://github.com/knative/serving/pull/10084))
- Removes webhook name from code and set webhook name in webhook deployment yaml using key WEBHOOK_NAME ([#10205](https://github.com/knative/serving/pull/10205))

#### 💫 New Features & Changes
- A feature flag is now available to enable hostAliases for Knative Services. See config-features for details. ([#10301](https://github.com/knative/serving/pull/10301))
- Add AutoTLS support for DomainMapping ([#10467](https://github.com/knative/serving/pull/10467))
- DomainMappings now support arbitrary target references, rather than only Knative Services. The target must conform to the Addressable contract (including Kubernetes Services), and the resolved URI must be of the form `{name}.{namespace}.svc.{cluster-suffix}`. ([#10210](https://github.com/knative/serving/pull/10210))
- Introduce `serving.knative.dev/domainmapping` label for Ingress generated by DomainMapping. ([#10370](https://github.com/knative/serving/pull/10370))
- Leader election transition improvements ([#10131](https://github.com/knative/serving/pull/10131))
- Profiling port is now configurable via the env var `PROFILING_PORT` ([knative/pkg#1950](https://github.com/knative/pkg/pull/1950))
- Gradual traffic rollout of the configuration targets is now available in Knative. Right now it is driven by the `rolloutDuration` entry in the `config-network` configmap. When positive this setting will move the traffic gradually from the previous to the current revision over this period of time. It can handle several rollouts at the same time in three dimensions:
    - different tags can be rolled out independently if they are pointing at different configs
    - different percentages for the same configuration target will roll out at different speeds (but will finish around the same deadline)
    - if new revisions were created while previous rollouts have not yet finished, the system will drain them and move everything to the newest revision.

#### 🐞 Bug Fixes
- Changes how ClusterDomainClaims are cleaned up when DomainMappings are removed. ([#10503](https://github.com/knative/serving/pull/10503))
- Enables connection reuse between activator probe and proxy to improve first request performance after cold starts ([#10228](https://github.com/knative/serving/pull/10228))
- Webhooks won't remove namespace selectors added by other components ([knative/pkg#1949](https://github.com/knative/pkg/pull/1949))

### Eventing v0.20

#### 💫 New Features & Changes
- Now setting the channel spec delivery field defaults every subscription to that particular delivery spec ([#4652](https://github.com/knative/eventing/pull/4652))

#### 🐞 Bug Fixes
- Allow scaling the in-memory Channel dispatcher without disabling high availability. ([#4675](https://github.com/knative/eventing/pull/4675))

#### 🧹 Clean up
- Webhook no longer has Cluster-wide Secret permissions. Now the Webhook's Secret permissions are restricted to the `knative-eventing` namespace. ([#4684](https://github.com/knative/eventing/pull/4684))
- bump the name of the broker on each test iteration ([#4716](https://github.com/knative/eventing/pull/4716))
- Message receiver supports customized liveness and readiness check ([#4707](https://github.com/knative/eventing/pull/4707))
- You need to run the storage migration tool after the upgrade to migrate from v1beta1 to v1 `apiserversources.sources.knative.dev` resources. ([#4655](https://github.com/knative/eventing/pull/4655))
- You need to run the storage migration tool after the upgrade to migrate from v1beta1 to v1 `containersources.sources.knative.dev` resources. ([#4657](https://github.com/knative/eventing/pull/4657))
- You need to run the storage migration tool after the upgrade to migrate from v1beta1 to v1 `sinkbindings.sources.knative.dev` resources. ([#4658](https://github.com/knative/eventing/pull/4658))

### Eventing Extensions

#### Eventing Kafka Broker v0.20

Release Notes for [eventing-kafka-broker](https://github.com/knative-sandbox/eventing-kafka-broker)

#### 💫 New Features & Changes
- `kafka-broker-receiver`, `kafka-broker-dispatcher`, and `kafka-sink-receiver` expose Kafka client metrics. ([#435](https://github.com/knative-sandbox/eventing-kafka-broker/pull/435))
- `kafka-broker-receiver`, `kafka-broker-dispatcher`, and `kafka-sink-receiver` expose JVM metrics (disabled by default) ([#435](https://github.com/knative-sandbox/eventing-kafka-broker/pull/435))
- Data plane pods produce distributed tracing spans. ([#421](https://github.com/knative-sandbox/eventing-kafka-broker/pull/421))
- Receivers now specify anti-affinity so that replicas will not be colocated ([#483](https://github.com/knative-sandbox/eventing-kafka-broker/pull/483))
#### 🐞 Bug Fixes
- Controllers resync state when managed resources change. ([#420](https://github.com/knative-sandbox/eventing-kafka-broker/pull/420))
- Leader election transition improvements ([#449](https://github.com/knative-sandbox/eventing-kafka-broker/pull/449))

#### 🧹 Clean up
- The data plane is completely non-blocking. ([#438](https://github.com/knative-sandbox/eventing-kafka-broker/pull/438))
- Skip ConfigMap update when there are no changes ([#511](https://github.com/knative-sandbox/eventing-kafka-broker/pull/511))
- Change release labels from eventing.knative.dev to kafka.eventing.knative.dev. ([#480](https://github.com/knative-sandbox/eventing-kafka-broker/pull/480))

### Client v0.20

- `kn` v0.20.0 introduces a new experimental offline mode (`--target`) for `kn service create` that allows creating Knative services locally in resource files and without the need to be connected to a cluster. In addition, the usual bug fixes and some smaller features have been added.

#### 💫 New Features & Changes

**Offline mode**

A new experimental offline mode has been added to `kn service create`. You enable it by using the option `--target` which can point to an existing directory or a filename. When provided `kn` will create a resource file that can be used with `kn service create -f`, `kn service apply -f` or even directly with kubectl. If the argument to `--target` is a filename or a non-existing path then a single file will be created. The file format (YAML or JSON) is determined by the file extension. If the argument to `--target` is a directory then the resource file is created within this directory by creating subdirectories for the namespace and type, using the service name as the filename's basename.

Examples:
```bash
# Create a YAML resource file "myservice.yml" with the custom resource definition of
# the specified Knative service
kn service create myservice --image quay.io/myuser/myservice:latest --target ./myservice.yml

# Create a YAML resource file with the service definition in "service-dir/default/ksvc/myservice.yml"
# The directory "service-dir/" must already exist
kn service create myservice --image gcr.io/myproject/myservice:latest --target service-dir/
```

**Scale option**

The `--scale` option for `kn service create` and `kn service update` allows now also ranges as values:
- `--scale 1..5` : Scale down to a minimal 1 replica and up to 5 replicas
- `--scale 1.. ` : Set scale-min to to 1 but leave scale-max untouched (when used for a service update)
- `--scale ..5 ` : Set scale-max to 5 but leave scale-min untouched (when used for a service update)
- `--scale 5..5` : Set scale-min and scale-max both to 5 (same as `--scale 5`)

**Support for new architectures**

`linux/s390x` and `linux/ppc64le` has been added to the list of supported architectures, which is contains now
the following platforms: `darwin/amd64`, `linux/amd64`, `linux/arm64`, `linux/ppc64le`, `linux/s390x` and `windows/amd64`.


#### 🧹 Clean up
- Fixes for the help and error message have been applied.

#### Other CLI Features
- `-o url` is now supported in `kn broker describe` and `kn channel describe`.
- Machine-readable output (e.g. `-o json`) has been added to the commands where it has been missing.

### Operator v0.20

The new operator can now deploy the new version `v0.20` of serving and eventing components.

#### 🐞 Bug Fixes
- Preserve the values of the environment variables for the pingsource-mt-adapter deploy resource, ([#394](https://github.com/knative/operator/pull/394))
- Implement the additional manifests for customized yamls. ([#374](https://github.com/knative/operator/pull/394)

#### 🧹 Clean up
- Update attributes to describe which files are generated and/or vendored. ([#423](https://github.com/knative/operator/pull/423))
- Enable code autogen for config generation ([#417](https://github.com/knative/operator/pull/417))
- Add a tool to automatically fetch releases and stage them in kodata. ([#360](https://github.com/knative/operator/pull/360))
### Thank you contributors v0.20

- [@BbolroC](https://github.com/BbolroC)
- [@Harwayne](https://github.com/Harwayne)
- [@akerekes](https://github.com/akerekes)
- [@antoineco](https://github.com/antoineco)
- [@arghya88](https://github.com/arghya88)
- [@dprotaso](https://github.com/dprotaso)
- [@dsimansk](https://github.com/dsimansk)
- [@evankanderson](https://github.com/evankanderson)
- [@grac3gao](https://github.com/grac3gao)
- [@houshengbo](https://github.com/houshengbo)
- [@itsmurugappan](https://github.com/itsmurugappan)
- [@julz](https://github.com/julz)
- [@markusthoemmes](https://github.com/markusthoemmes)
- [@mattmoor](https://github.com/mattmoor)
- [@mpetason](https://github.com/mpetason)
- [@n3wscott](https://github.com/n3wscott)
- [@nak3](https://github.com/nak3)
- [@navidshaikh](https://github.com/navidshaikh)
- [@pierDipi](https://github.com/pierDipi)
- [@rhuss](https://github.com/rhuss)
- [@slinkydeveloper](https://github.com/slinkydeveloper)
- [@tcnghia](https://github.com/tcnghia)
- [@vaikas](https://github.com/vaikas)
- [@yselkowitz](https://github.com/yselkowitz)


### Learn more

Knative is an open source project that anyone in the [community](https://knative.dev/docs/community/) can use, improve, and enjoy. We'd love you to join us!

- [Welcome to Knative](https://knative.dev/docs#welcome-to-knative)
- [Getting started documentation](https://knative.dev/docs/#getting-started)
- [Samples and demos](https://knative.dev/docs#samples-and-demos)
- [Knative meetings and work groups](https://knative.dev/contributing/#working-group)
- [Questions and issues](https://knative.dev/contributing/#questions-and-issues)
- [Knative User Mailing List](https://groups.google.com/forum/#!forum/knative-users)
- [Knative Development Mailing List](https://groups.google.com/forum/#!forum/knative-dev)
- Knative on Twitter [@KnativeProject](https://twitter.com/KnativeProject)
- Knative on [StackOverflow](https://stackoverflow.com/questions/tagged/knative)
- Knative [Slack](https://slack.knative.dev)
- Knative on [YouTube](https://www.youtube.com/channel/UCq7cipu-A1UHOkZ9fls1N8A)
