# Knative v0.9.0

Author: [Mete Atamel](https://atamel.dev/) | Published: 2019-09-26 | Updated: 2020-04-11 | Topics: Google Cloud Platform, Knative, Serverless, Kubernetes | Canonical: https://atamel.dev/posts/2019/09-26_knative-v0-9-0/


Knative has been evolving pretty quickly. There’s a new release roughly every 6
weeks with significant changes in each release. Knative v0.7.0 was all about
changes in Knative Serving ([my
post]).
Knative v0.8.0 was about deprecation of Knative Build in favor of Tekton
Pipelines ([my
other post]).

Knative [Serving v0.9.0](https://github.com/knative/serving/releases/tag/v0.9.0) and [Eventing v0.9.0](https://github.com/knative/eventing/releases/tag/v0.9.0) have been released a little over a week ago. In Serving, there’s  a _v1 API_ and a number of improvements on autoscaling and cold starts. In Eventing, the way events are read changed quite a bit. I want to outline some of these changes here.

![](/img/2019/1__DOThLZ2jCZpJqwpcY6k7jw.png)

### ClusterChannelProvisioners ⇒ CRDs

Since v0.8.0, there has been a shift from ClusterChannelProvisioners to CRDs and this concluded in v0.9.0. The [release notes](https://github.com/knative/eventing/releases/tag/v0.9.0) give more details but this affects how Knative is setup to transport events. For example, in the previous release of Knative, in order to use Google Cloud Pub/Sub as the eventing transport, you’d create a Channel with the _gcp-pubsub_ provisioner as explained in the [docs](https://knative.dev/v0.8-docs/eventing/samples/gcp-pubsub-source/).

In this release, there’s now a concrete CRD, _channels.pubsub.cloud.run_, that you create instead. It includes all the configuration parameters available for that transport. This makes it much easier to see available parameters and validate them.

### Knative with GCP Project

[Knative with GCP](https://github.com/google/knative-gcp) is a new project that aims to enable easy configuration and consumption of Google Cloud events. It’s now the preferred way of consuming Google Cloud events in Knative. It is installed separately on top of Knative ([instructions](https://github.com/google/knative-gcp/blob/master/docs/install/README.md)) and allows reading Cloud Storage, Cloud Scheduler or Cloud Pub/Sub events.

### Cloud Pub/Sub PullSubscription

In my [Knative Tutorial](https://github.com/meteatamel/knative-tutorial), I read events from Cloud Pub/Sub into Knative. Knative with GCP Project has multiple ways of reading Pub/Sub messages into Knative. [PullSubscription](https://github.com/google/knative-gcp/blob/master/docs/pullsubscription/README.md) is one way of reading Cloud Pub/Sub messages directly into Knative.

This is done slightly different from the previous version of Knative. By default, Pub/Sub messages are not wrapped into CloudEvents anymore, so you don’t have to worry about unwrapping CloudEvents. Since you don’t have CloudEvents anymore, you also do not have to worry about Base64 decoding the data field of CloudEvents (If you still prefer the old behavior, there’s a [_mode_](https://github.com/google/knative-gcp/blob/master/config/300-pullsubscription.yaml#L92-L95) config that you can set to _PushCompatible_)_._

All of these make the processing of Pub/Sub messages simpler than before. PullSubscription requires a Secret from a Pub/Sub enabled Service Account ([instructions](https://github.com/google/knative-gcp/tree/master/docs/pubsub)) and a yaml definition file that looks something like this:

```yaml
apiVersion: pubsub.cloud.run/v1alpha1  
kind: PullSubscription  
metadata:  
  name: my-topic-source  
spec:  
  topic: my-topic  
  sink:  
    apiVersion: v1  
    kind: Service  
    name: event-display
```

This links a Pub/Sub topic to a Kubernetes Service but it can be anything addressable like Knative Service, Channel, Broker, etc.

Hope this provides a little glimpse of changes to Knative in v.0.9.0. I already
updated my [Knative Tutorial](https://github.com/meteatamel/knative-tutorial) to
use Knative 0.9.0. [Hello World
Eventing](https://github.com/meteatamel/knative-tutorial/blob/master/docs/08-helloworldeventing.md)
goes through all the setup steps needed to read Pub/Sub messages in a simple
Kubernetes service. Give it a try!

[my post]: https://atamel.dev/posts/2019/07-01_knative-serving-0-7/
[my other post]: https://atamel.dev/posts/2019/08-28_migrating-from-knative-build-to-tekton-pipelines/

