Final Getting Started overhaul before launch + homepage logos (#3856)

* Update mkdocs.yml

* Update mkdocs.yml

* Update mkdocs.yml

* bringing back the purple

* Revert "bringing back the purple"

This reverts commit a6af055288.

* Change language to reflect desired actions RE: KinD

* Overhaul of Getting Started

* lint fixes

* Change to Nav Serving title

* Small bug fix

* Richard's changes 👍
This commit is contained in:
Omer B 2021-07-01 12:30:03 -04:00 committed by GitHub
parent f315943159
commit ac45cd240c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 398 additions and 109 deletions

View File

@ -1,7 +1,10 @@
# Before you begin # Before you begin
Before you can get started with a Knative Quickstart deployment you must set up a development environment. !!! warning
Knative Quickstart Environments are for experimentation use only. For production installation, see our [Administrator's Guide](../admin)
## Set up a development cluster Before you can get started with a Knative Quickstart deployment you must install kind and the Kubernetes CLI.
## Install Kind (Kubernetes in Docker)
You can use [`kind`](https://kind.sigs.k8s.io/docs/user/quick-start){target=_blank} (Kubernetes in Docker) to run a local Kubernetes cluster with Docker container nodes. You can use [`kind`](https://kind.sigs.k8s.io/docs/user/quick-start){target=_blank} (Kubernetes in Docker) to run a local Kubernetes cluster with Docker container nodes.

View File

@ -0,0 +1,38 @@
## Clean Up
=== "kn"
Delete the Service by running the command:
```bash
kn service delete cloudevents-player
```
Delete the Trigger by running the command:
```bash
kn trigger delete cloudevents-trigger
```
=== "kubectl"
Delete the Service by running the command
```bash
kubectl delete -f cloudevents.yaml
```
Delete the Trigger by running the command:
```bash
kubectl delete -f ce-trigger.yaml
```
Delete the Cluster
Delete your `konk` Cluster" by running the command:
```bash
kind delete clusters knative
```
!!! success "Verify Output"
```{ .bash .no-copy }
Deleted clusters: ["knative"]
```

View File

@ -1,5 +1,5 @@
# Scaling to Zero # Scaling to Zero
**Remember those super powers :rocket: we talked about?** One of Knative Serving's powers is automatic scaling or simply "autoscaling" out-of-the-box! This means your Knative Service will only "spin up" your application to perform its job (in this case, saying "Hello world!") if it is needed; otherwise, it will =="scale to zero"== by spinning down and waiting for a new request to come in. **Remember those super powers :rocket: we talked about?** One of Knative Serving's powers is built-in automatic scaling (autoscaling). This means your Knative Service only spins up your application to perform its job -- in this case, saying "Hello world!" -- if it is needed; otherwise, it will "scale to zero" by spinning down and waiting for a new request to come in.
??? question "What about scaling up to meet increased demand?" ??? question "What about scaling up to meet increased demand?"
Knative Autoscaling also allows you to easily configure your service to scale up (horizontal autoscaling) to meet increased demand as well as control the number of instances that spin up using <a href= "../../serving/autoscaling/concurrency/" target="_blank"> "concurrency limits and other options,"</a> but that's beyond the scope of this tutorial. Knative Autoscaling also allows you to easily configure your service to scale up (horizontal autoscaling) to meet increased demand as well as control the number of instances that spin up using <a href= "../../serving/autoscaling/concurrency/" target="_blank"> "concurrency limits and other options,"</a> but that's beyond the scope of this tutorial.
@ -12,11 +12,15 @@ Let's run our "Hello world!" Service just one more time. This time, try the Knat
curl http://hello.default.127.0.0.1.nip.io curl http://hello.default.127.0.0.1.nip.io
``` ```
You can watch the pods and see how they ==scale to zero== after traffic stops going to the URL. You can watch the pods and see how they scale to zero after traffic stops going to the URL.
```bash ```bash
kubectl get pod -l serving.knative.dev/service=hello -w kubectl get pod -l serving.knative.dev/service=hello -w
``` ```
!!! warning
It may take up to 2 minutes for your Pods to scale down. Pinging your service again will reset this timer.
==**Expected output:**== ==**Expected output:**==
```{ .bash .no-copy } ```{ .bash .no-copy }
NAME READY STATUS NAME READY STATUS
@ -27,7 +31,7 @@ hello-world 0/2 Terminating
``` ```
### Scale up your Knative Service ### Scale up your Knative Service
Try to rerun the Knative Service in your browser [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank}, and you will see a new pod running again. Rerun the Knative Service in your browser [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank}, and you will see a new pod running again.
==**Expected output:**== ==**Expected output:**==
```{ .bash .no-copy } ```{ .bash .no-copy }
@ -39,7 +43,7 @@ hello-world 2/2 Running
``` ```
Exit the watch command with `Ctrl+c`. Exit the watch command with `Ctrl+c`.
Some people call this **Serverless** :tada: :taco: :fire: Some people call this **Serverless** :tada: :taco: :fire: Up next, traffic splitting!
??? question "Want to go deeper on Autoscaling?" ??? question "Want to go deeper on Autoscaling?"
Interested in getting in the weeds with Knative Autoscaling? Check out the <a href= "../../serving/autoscaling/" target="_blank"> autoscaling page</a> for concepts, samples, and more! Interested in getting in the weeds with Knative Autoscaling? Check out the <a href= "../../serving/autoscaling/" target="_blank"> autoscaling page</a> for concepts, samples, and more!

View File

@ -1,5 +1,5 @@
## Sources, Brokers, Triggers, Sinks, oh my! ## Sources, Brokers, Triggers, Sinks, oh my!
For the purposes of this tutorial, let's keep it simple. You will focus on four powerful Eventing components: `Source`, `Trigger`, `Broker`, and `Sink`. For the purposes of this tutorial, let's keep it simple. You will focus on four powerful Eventing components: Source, Trigger, Broker, and Sink.
Let's take a look at how these components interact: Let's take a look at how these components interact:
<figure> <figure>
@ -9,29 +9,31 @@ Let's take a look at how these components interact:
| Component | Basic Definition | | Component | Basic Definition |
| :---------: | :----------------------------------: | | :---------: | :----------------------------------: |
| `Source` | :information_source: A Kubernetes Custom Resource which emits events to the Broker. | |:material-information: **Source** |A Kubernetes Custom Resource which emits events to the Broker. |
| `Broker` | :material-relation-many-to-many: A "hub" for events in your infrastructure; a central location to send events for delivery. | |:material-relation-many-to-many: **Broker** | A "hub" for events in your infrastructure; a central location to send events for delivery. |
| `Trigger` | :material-magnet-on: Acts as a filter for events entering the broker, can be configured with desired event attributes. | |:material-magnet: **Trigger** |Acts as a filter for events entering the broker, can be configured with desired event attributes. |
| `Sink` | :material-download: A destination for events. | |:material-download: **Sink** | A destination for events. |
!!! note "A note on `Sources` and `Sinks`" !!! note "A note on Sources and Sinks"
A Knative Service can act as both a `Source` and a `Sink` for events, and for good reason. You may want to consume events from the `Broker` and send modified events back to the `Broker`, as you would in any pipeline use-case. A Knative Service can act as both a Source and a Sink for events, and for good reason. You may want to consume events from the Broker and send modified events back to the Broker, as you would in any pipeline use-case.
### CloudEvents ### CloudEvents
Knative Eventing uses <a href="https://github.com/cloudevents/spec/blob/master/primer.md" target="blank_">CloudEvents</a> send information back and forth between your Services and these components. Knative Eventing uses <a href="https://github.com/cloudevents/spec/blob/master/primer.md" target="blank_">CloudEvents</a> to send information back and forth between your Services and these components.
??? question "What are CloudEvents?" ??? question "What are CloudEvents?"
For our purposes, the only thing you need to know about CloudEvents are: For our purposes, the only thing you need to know about CloudEvents are:
1. CloudEvents follow the <a href = "https://github.com/cloudevents/spec" target="_blank">CloudEvents 1.0 Specification</a>, with required and optional attributes. 1. CloudEvents can carry some attributes (like id, Source, type, etc) as well as data payloads (JSON, plaintext, reference to data that lives elsewhere, etc).
1. CloudEvents can be "emitted" by almost anything and can be transported to anywhere in your deployment. 1. CloudEvents can be "emitted" by almost anything and can be transported to anywhere in your deployment.
1. CloudEvents can carry some attributes (things like `id`, `source`, `type`, etc) as well as data payloads (JSON, plaintext, reference to data that lives elsewhere, etc). 1. CloudEvents follow the <a href = "https://github.com/cloudevents/spec" target="_blank">CloudEvents 1.0 Specification</a>, with required and optional attributes.
To find out more about CloudEvents, check out the [CloudEvents website](https://cloudevents.io/)! To find out more about CloudEvents, check out the [CloudEvents website](https://cloudevents.io/)!
## Examining the Broker ## Examining the Broker
As part of the `KonK` install, you should have an in-memory `Broker` already installed. As part of the `KonK` install, an In-Memory Broker should have already be installed in your Cluster. Check to see that it is installed by running the command:
```bash ```bash
kn broker list kn broker list
``` ```
@ -45,5 +47,9 @@ example-broker http://broker-ingress.knative-eventing.svc.cluster.local/defaul
In-Memory Brokers are for development use only and must not be used in a production deployment. In-Memory Brokers are for development use only and must not be used in a production deployment.
??? question "What other components exist in Knative Eventing?" ??? question "Are there any other components of Knative Eventing?"
Though it is out of scope for this tutorial, Knative Eventing has many components which can be used in many ways to suit your needs.
If you want to find out more about the different components of Knative Eventing, like Channels, Sequences, Parallels, etc. check out <a href="../eventing/README.md" target="blank_">"Eventing Components."</a> If you want to find out more about the different components of Knative Eventing, like Channels, Sequences, Parallels, etc. check out <a href="../eventing/README.md" target="blank_">"Eventing Components."</a>
**Next, you'll take a look at a simple implementation** of Sources, Brokers, Triggers and Sinks using an app called the Cloud Events Player.

View File

@ -2,10 +2,11 @@
!!! tip !!! tip
Hit ++"."++ on your keyboard to move forward in the tutorial. Use ++","++ to go back at any time. Hit ++"."++ on your keyboard to move forward in the tutorial. Use ++","++ to go back at any time.
==**In this tutorial, you will deploy a "Hello world" service.**== **In this tutorial, you will deploy a "Hello world" service.**
This service will accept an environment variable, `TARGET`, and print "`Hello ${TARGET}!`." This service will accept an environment variable, `TARGET`, and print "`Hello ${TARGET}!`."
For those of you familiar with other **source-to-url** tools, this may seem familiar. However, since our "Hello world" Service is being deployed as a Knative Service, it gets some **super powers (scale-to-zero, traffic-splitting) out of the box** :rocket:. Since our "Hello world" Service is being deployed as a Knative Service, not a Kubernetes Service, it gets some **super powers out of the box** :rocket:.
## Knative Service: "Hello world!" ## Knative Service: "Hello world!"
=== "kn" === "kn"
@ -21,6 +22,12 @@ For those of you familiar with other **source-to-url** tools, this may seem fami
??? question "Why did I pass in `revision-name`?" ??? question "Why did I pass in `revision-name`?"
Note the name "world" which you passed in as "revision-name," naming your `Revisions` will help you to more easily identify them, but don't worry, you'll learn more about `Revisions` later. Note the name "world" which you passed in as "revision-name," naming your `Revisions` will help you to more easily identify them, but don't worry, you'll learn more about `Revisions` later.
==**Expected output:**==
```{ .bash .no-copy }
Service hello created to latest revision 'hello-world' is available at URL:
http://hello.default.127.0.0.1.nip.io
```
=== "YAML" === "YAML"
``` bash ``` bash
@ -49,22 +56,26 @@ For those of you familiar with other **source-to-url** tools, this may seem fami
??? question "Why did I pass in the second name, `hello-world`?" ??? question "Why did I pass in the second name, `hello-world`?"
Note the name "hello-world" which you passed in under "metadata" in your YAML file. Naming your `Revisions` will help you to more easily identify them, but don't worry if this if a bit confusing now, you'll learn more about `Revisions` later. Note the name "hello-world" which you passed in under "metadata" in your YAML file. Naming your `Revisions` will help you to more easily identify them, but don't worry if this if a bit confusing now, you'll learn more about `Revisions` later.
==**Expected output:**==
```{ .bash .no-copy }
service.serving.knative.dev/hello created
```
To see the URL where your Knative Service is hosted, leverage the `kn` CLI:
```bash
kn service list
```
## Ping your Knative Service
Ping your Knative Service by opening [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank} in your browser of choice or by running the command:
==**Expected output:**==
```{ .bash .no-copy }
Service hello created to latest revision 'hello-world' is available at URL:
http://hello.default.127.0.0.1.nip.io
```
## Run your Knative Service
``` ```
curl http://hello.default.127.0.0.1.nip.io curl http://hello.default.127.0.0.1.nip.io
``` ```
==**Expected output:**== ==**Expected output:**==
```{ .bash .no-copy } ```{ .bash .no-copy }
Hello World! Hello World!
``` ```
Congratulations :tada:, you've just created your first Knative Service! Congratulations :tada:, you've just created your first Knative Service. Up next, Autoscaling!

View File

@ -1,14 +1,14 @@
In this tutorial, you will be using the [CloudEvents Player](https://github.com/ruromero/cloudevents-player) to showcase the core concepts of Knative Eventing. By the end of this tutorial, you should have something that looks like this: In this tutorial, you use the [CloudEvents Player](https://github.com/ruromero/cloudevents-player){target=blank} to showcase the core concepts of Knative Eventing. By the end of this tutorial, you should have an architecture that looks like this:
<figure> <figure>
<img src="https://user-images.githubusercontent.com/16281246/116408922-589c3d00-a801-11eb-9835-5c37ff57c861.png" draggable="false"> <img src="../images/event_diagram.png" draggable="false">
<figcaption>Figure 6.6 from <a href = "https://www.manning.com/books/knative-in-action" target="_blank">Knative in Action</a> <br> <figcaption>Figure 6.6 from <a href = "https://www.manning.com/books/knative-in-action" target="_blank">Knative in Action</a> <br>
Here, the CloudEvents Player is acting as both a <code>Source</code> and a <code>Sink</code> for CloudEvents. Here, the CloudEvents Player is acting as both a <code>Source</code> and a <code>Sink</code> for CloudEvents.
</figcaption> </figcaption>
</figure> </figure>
## Creating your first Source ## Creating your first Source
The CloudEvents Player acts as a `Source` for CloudEvents by intaking the URL of our `Broker` as an environment variable (`BROKER_URL`) and sending CloudEvents via the UI. The CloudEvents Player acts as a Source for CloudEvents by intaking the URL of the Broker as an environment variable, `BROKER_URL`. You will send CloudEvents to the Broker through the CloudEvents Player application.
Create the CloudEvents Player Service: Create the CloudEvents Player Service:
=== "kn" === "kn"
@ -18,26 +18,50 @@ Create the CloudEvents Player Service:
--image ruromero/cloudevents-player:latest \ --image ruromero/cloudevents-player:latest \
--env BROKER_URL=http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker --env BROKER_URL=http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker
``` ```
==**Expected Output**==
```{ .bash .no-copy }
Service 'cloudevents-player' created to latest revision 'cloudevents-player-vwybw-1' is available at URL:
http://cloudevents-player.default.127.0.0.1.nip.io
```
??? question "Why is my Revision named something different!"
Because we didn't assign a `revision-name`, Knative Serving automatically created one for us. It's okay if your Revision is named something different.
=== "YAML" === "YAML"
```bash ```bash
//TODO apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: cloudevents-player
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/minScale: "1"
spec:
containers:
- image: ruromero/cloudevents-player:latest
env:
- name: BROKER_URL
value: http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker
``` ```
==**Expected Output**== Once you've created your YAML file, named something like `cloudevents-player.yaml`, apply it by running the command:
```{ .bash .no-copy } ``` bash
Service 'cloudevents-player' created to latest revision 'cloudevents-player-vwybw-1' is available at URL: kubectl apply -f cloudevents-player.yaml
http://cloudevents-player.default.127.0.0.1.nip.io ```
```
??? question "Wait, my `Revision` is named something different!" ==**Expected Output**==
Since we didn't assign a `revision-name`, Knative Serving automatically created one for us, it's ok if your `Revision` is named something different. ```{ .bash .no-copy }
service.serving.knative.dev/cloudevents-player created
```
## Examining the CloudEvents Player ## Examining the CloudEvents Player
We can use the CloudEvents Player to send and receive CloudEvents. If you open the [Service URL](http://cloudevents-player.default.127.0.0.1.nip.io){target=_blank} in your browser, you should be greeted by a form titled "Create event." **You can use the CloudEvents Player to send and receive CloudEvents.** If you open the [Service URL](http://cloudevents-player.default.127.0.0.1.nip.io){target=_blank} in your browser, the **Create Event** form appears.
<figure> <figure>
<img src="https://user-images.githubusercontent.com/16281246/116404278-7d41e600-a7fc-11eb-81a3-5f85db9f966a.png" draggable="false"> <img src="../images/event_form.png" draggable="false">
<figcaption>The user interface for the CloudEvents Player</figcaption> <figcaption>The user interface for the CloudEvents Player</figcaption>
</figure> </figure>
@ -52,14 +76,16 @@ We can use the CloudEvents Player to send and receive CloudEvents. If you open t
For more information on the CloudEvents Specification, check out the [CloudEvents Spec](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md){target=_blank}. For more information on the CloudEvents Specification, check out the [CloudEvents Spec](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md){target=_blank}.
Fill out the form with whatever you data you would like to (make sure your Event Source does not contain any spaces) and hit the "SEND EVENT" button. 1. Fill in the form with whatever you data you want.
1. Ensure your Event Source does not contain any spaces.
1. Click **SEND EVENT**.
![CloudEvents Player Send](../images/event_sent.png)
![CloudEvents Player Send](https://user-images.githubusercontent.com/16281246/116407683-04448d80-a800-11eb-9283-ba86fb259053.png) ??? tip "Clicking the :fontawesome-solid-envelope: shows you the CloudEvent as the Broker sees it."
![Event_Details](../images/event_details.png)
The :material-send: icon in the "Status" column implies that the event has been sent to our Broker... but where has the event gone? **Well, right now, nowhere!**
!!! tip "Tip: Clicking the :fontawesome-solid-envelope: will show you the CloudEvent as the `Broker` sees it." A Broker is simply a receptacle for events. In order for your events to be sent anywhere, you must create a Trigger which listens for your events and places them somewhere. And, you're in luck: you'll create your first Trigger on the next page!
The :material-send: icon in the "Status" column implies that the event has been sent to our `Broker`, but where has the event gone? Well, right now, nowhere!
A `Broker` is simply a receptacle for events. In order for your events to be sent somewhere, you must create a `Trigger` which listens for your events and places them somewhere. Let's do that next!

View File

@ -6,14 +6,14 @@ The last super power :rocket: of Knative Serving we'll go over in this tutorial
## Creating a new Revision ## Creating a new Revision
You may have noticed that when you created your Knative Service you assigned it a `revision-name`, "world". When your Service was created, Knative returned both a URL and a 'latest revision' name for your Knative Service. **But what happens if you make a change to your Service?** You may have noticed that when you created your Knative Service you assigned it a `revision-name`, "world". If you used `kn`, when your Service was created Knative returned both a URL and a "latest revision" for your Knative Service. **But what happens if you make a change to your Service?**
??? question "What exactly is a `Revision`?"" ??? question "What exactly is a Revision?""
You can think of a <a href="../../serving/#serving-resources" target ="blank_">`Revision` </a> as a stateless, autoscaling snapshot-in-time of application code and configuration. You can think of a <a href="../../serving/#serving-resources" target ="blank_">Revision </a> as a stateless, autoscaling, snapshot-in-time of application code and configuration.
A new `Revision` will get created each and every time you make changes to your Knative Service, whether you assign it a name or not. When splitting traffic, Knative splits traffic between different `Revisions` of your Knative Service. A new Revision will get created each and every time you make changes to your Knative Service, whether you assign it a name or not. When splitting traffic, Knative splits traffic between different Revisions of your Knative Service.
Instead of `TARGET`="World," let's update the environment variable `TARGET` on our Knative Service `hello` to greet "Knative". Lets name this new revision `hello-knative` Instead of `TARGET`="World" update the environment variable `TARGET` on your Knative Service `hello` to greet "Knative" instead. Name this new revision `hello-knative`
=== "kn" === "kn"
``` bash ``` bash
@ -22,6 +22,14 @@ Instead of `TARGET`="World," let's update the environment variable `TARGET` on o
--revision-name=knative --revision-name=knative
``` ```
As before, `kn` prints out some helpful information to the CLI.
==**Expected output:**==
```{ .bash .no-copy }
Service hello created to latest revision 'hello-knative' is available at URL:
http://hello.default.127.0.0.1.nip.io
```
=== "YAML" === "YAML"
``` bash ``` bash
--- ---
@ -47,17 +55,15 @@ Instead of `TARGET`="World," let's update the environment variable `TARGET` on o
kubectl apply -f hello.yaml kubectl apply -f hello.yaml
``` ```
As before, Knative prints. out some helpful information to the CLI. ==**Expected output:**==
```{ .bash .no-copy }
service.serving.knative.dev/hello created
```
==**Expected output:**==
```{ .bash .no-copy }
Service hello created to latest revision 'hello-knative' is available at URL:
http://hello.default.127.0.0.1.nip.io
```
Note, since we are updating an existing Knative Service `hello`, the URL doesn't change, but our new `Revision` should have the new name "hello-knative" Note, since we are updating an existing Knative Service `hello`, the URL doesn't change, but our new Revision should have the new name `hello-knative`
Let's access our Knative Service again on the browser [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank} to see the change, or use `curl` in your terminal: Let's access our Knative Service again on your browser [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank} to see the change, or use `curl` in your terminal:
```bash ```bash
curl http://hello.default.127.0.0.1.nip.io curl http://hello.default.127.0.0.1.nip.io
``` ```
@ -68,7 +74,7 @@ Hello Knative!
``` ```
## Splitting Traffic ## Splitting Traffic
You may at this point be wondering, "where did 'Hello World!' go?" `Revisions` are a stateless snapshot-in-time of application code and configuration so your "hello-world" `Revision` is still available to you. You may at this point be wondering, "where did 'Hello World!' go?" Remember, Revisions are a stateless snapshot-in-time of application code and configuration, so your "hello-world" `Revision` is still available to you.
We can easily see a list of our existing revisions with the `kn` CLI: We can easily see a list of our existing revisions with the `kn` CLI:
@ -92,9 +98,11 @@ hello-knative hello 100% 2 30s 3 OK / 4 True
hello-world hello 1 5m 3 OK / 4 True hello-world hello 1 5m 3 OK / 4 True
``` ```
The column most relevant for our purposes is "TRAFFIC". It looks like 100% of traffic is going to our latest `Revision` ("hello-knative") and 0% of traffic is going to the `Revision` we configured earlier ("hello-world") The column most relevant for our purposes is `TRAFFIC`. It looks like 100% of traffic is going to our latest `Revision` ("hello-knative") and 0% of traffic is going to the Revision we configured earlier ("hello-world").
By default, when Knative creates a brand new `Revision` it directs 100% of traffic to the latest `Revision` of your service. **We can change this default behavior by specifying how much traffic we want each of our `Revisions` to receive.** Lets split traffic in half, using a percentage of 50%. When you create a new Revision of a Knative Service, Knative defaults to directing 100% of traffic to this latest Revision. **We can change this default behavior by specifying how much traffic we want each of our Revisions to receive.**
Lets split traffic between our two Revisions:
!!! info inline end !!! info inline end
`@latest` will always point to our "latest" `Revision` which, at the moment, is `hello-knative`. `@latest` will always point to our "latest" `Revision` which, at the moment, is `hello-knative`.
@ -156,14 +164,13 @@ hello-knative hello 50% 2 10m 3 OK / 4 True
hello-world hello 50% 1 36m 3 OK / 4 True hello-world hello 50% 1 36m 3 OK / 4 True
``` ```
Access the Knative service on the browser again [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank}, and refresh multiple times to see the different output being served by each revision. Access your Knative service on the browser again [http://hello.default.127.0.0.1.nip.io](http://hello.default.127.0.0.1.nip.io){target=_blank}, and refresh multiple times to see the different output being served by each Revision.
You can use curl to access multiple times.
Similarly, you can `curl` the Service URL multiple times to see the traffic being split between the Revisions.
```bash ```bash
curl http://hello.default.127.0.0.1.nip.io curl http://hello.default.127.0.0.1.nip.io
``` ```
On the terminal you will see the output from the both revisions.
==**Expected output:**== ==**Expected output:**==
```{ .bash .no-copy } ```{ .bash .no-copy }
curl http://hello.default.127.0.0.1.nip.io curl http://hello.default.127.0.0.1.nip.io
@ -173,4 +180,17 @@ curl http://hello.default.127.0.0.1.nip.io
Hello World! Hello World!
``` ```
Congratulations, :tada: you've successfully split traffic between 2 different `Revisions`. Up next, Knative Eventing! Congratulations, :tada: you've successfully split traffic between 2 different Revisions of a Knative Service. Up next, Knative Eventing!
## Clean Up
You won't need the `hello` Service in the Knative Eventing tutorial, so it's best to clean up before you move forward:
=== "kn"
```bash
kn service delete hello
```
=== "kubectl"
```bash
kubectl delete -f hello.yaml
```

View File

@ -1,16 +1,19 @@
## Creating your first `Trigger` ## Creating your first Trigger
=== "kn" === "kn"
```bash ```bash
kn trigger create cloudevents-player --sink cloudevents-player --broker example-broker kn trigger create cloudevents-trigger --sink cloudevents-player --broker example-broker
``` ```
```{ .bash .no-copy }
Trigger 'cloudevents-trigger' successfully created in namespace 'default'.
```
=== "YAML" === "YAML"
```bash ```bash
apiVersion: eventing.knative.dev/v1 apiVersion: eventing.knative.dev/v1
kind: Trigger kind: Trigger
metadata: metadata:
name: cloudevents-player name: cloudevents-trigger
annotations: annotations:
knative-eventing-injection: enabled knative-eventing-injection: enabled
spec: spec:
@ -21,18 +24,28 @@
kind: Service kind: Service
name: cloudevents-player name: cloudevents-player
``` ```
==**Expected Output**==
```{ .bash .no-copy }
Trigger 'cloudevents-player' successfully created in namespace 'default'.
```
??? question "What CloudEvents is my `Trigger` listening for?" After you've created your YAML file, named something like `ce-trigger.yaml`, apply it by running the command:
Since we didn't specify a `--filter` in our `kn` command, our Trigger is listening for any CloudEvents coming into the `Broker`. ``` bash
kubectl apply -f ce-trigger.yaml
```
==**Expected Output**==
```{ .bash .no-copy }
trigger.eventing.knative.dev/cloudevents-trigger created
```
trigger.eventing.knative.dev/cloudevents-player created
??? question "What CloudEvents is my Trigger listening for?"
Because we didn't specify a `--filter` in our `kn` command, the Trigger is listening for any CloudEvents coming into the Broker.
An example on how to use Filters is provided below.
Now, when we go back to the CloudEvents Player and send an Event, we see that CloudEvents are both sent and received by the CloudEvents Player: Now, when we go back to the CloudEvents Player and send an Event, we see that CloudEvents are both sent and received by the CloudEvents Player:
<figure> <figure>
<img src="https://user-images.githubusercontent.com/16281246/116411017-4f13d480-a803-11eb-9982-cd9012781fe6.png" draggable="false"> <img src="../images/event_received.png" draggable="false">
<figcaption>You may need to refresh the page to see your changes</figcaption> <figcaption>You may need to refresh the page to see your changes</figcaption>
</figure> </figure>
@ -48,7 +61,7 @@ Now, when we go back to the CloudEvents Player and send an Event, we see that Cl
kn trigger create cloudevents-player-filter --sink cloudevents-player --broker example-broker --filter type=some-type kn trigger create cloudevents-player-filter --sink cloudevents-player --broker example-broker --filter type=some-type
``` ```
If you send a CloudEvent with type "some-type," it will be reflected in the CloudEvents Player UI. Any other types will be ignored by the `Trigger`. If you send a CloudEvent with type "some-type," it is reflected in the CloudEvents Player UI. The Trigger ignores any other types.
You can filter on any aspect of the CloudEvent you would like to. You can filter on any aspect of the CloudEvent you would like to.

View File

@ -1,15 +1,21 @@
# Introducing the Knative Eventing # Introducing the Knative Eventing
## Background ## Background
With Knative Serving, we have a powerful tool which can take our containerized code and deploy it with relative ease. **With Knative Eventing, you gain a few new super powers :rocket: that allow you to build Event-Driven Applications.** With Knative Serving, we have a powerful tool which can take our containerized code and deploy it with relative ease. **With Knative Eventing, you gain a few new super powers :rocket:** that allow you to build Event-Driven Applications.
??? question "What are Event Driven Applications?" ??? question "What are Event Driven Applications?"
Event-driven applications are designed to detect events as they occur, and then deal with them using some event-handling procedure. Producing "events" to detect and consuming events with an "event-handling procedure" is precisely what Knative Eventing enables. Event-driven applications are designed to detect events as they occur, and then deal with them using some event-handling procedure. Producing and consuming events with an "event-handling procedure" is precisely what Knative Eventing enables.
Want to find out more about Event-Driven Architecture and Knative Eventing? Check out this CNCF Session aptly named ["Event-driven architecture with Knative events"](https://www.cncf.io/online-programs/event-driven-architecture-with-knative-events/){target=blank}
==**Knative Eventing acts as the "glue" between the disparate parts of your architecture**== and allows you to easily communicate between those parts in a fault-tolerant way. Some examples include: ==**Knative Eventing acts as the "glue" between the disparate parts of your architecture**== and allows you to easily communicate between those parts in a fault-tolerant way. Some examples include:
1. [Creating and responding to Kubernetes API events](../../eventing/sources/apiserversource/) :material-file-document: [Creating and responding to Kubernetes API events](../../eventing/sources/apiserversource/){target=blank}
1. [Creating an image processing pipeline](https://www.youtube.com/watch?v=DrmOpjAunlQ)
1. [Facilitating AI workloads at the edge in large-scale, drone-powered sustainable agriculture projects](https://www.youtube.com/watch?v=lVfJ5WEQ5_s).
As you can see by the examples above, **Knative Eventing implementations can range from the dead simple to extremely complex**, the concepts you'll learn will be a great starting point to accomplish either. --8<-- "YouTube_icon.svg"
[Creating an image processing pipeline](https://www.youtube.com/watch?v=DrmOpjAunlQ){target=blank}
--8<-- "YouTube_icon.svg"
[Facilitating AI workloads at the edge in large-scale, drone-powered sustainable agriculture projects](https://www.youtube.com/watch?v=lVfJ5WEQ5_s){target=blank}
As you can see by the examples above, Knative Eventing implementations can range from simplistic to extremely complex. For now, you'll start with simplistic and learn about the most basic components of Knative Eventing: Sources, Brokers, Triggers and Sinks.

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

View File

@ -1,25 +1,15 @@
# Getting Started with the Knative "Quickstart" Environment # Getting Started with the Knative "Quickstart" Environment
!!! warning
Knative Quickstart Environments are for experimentation only. For production installation, see our [Administrator's Guide](../admin)
## Install Knative using the konk script ## Install Knative using the konk script
You can get started with a local deployment of Knative by using _Knative on Kind_ (`konk`): You can get started with a local deployment of Knative by using _Knative on Kind_ (`konk`):
`konk` is a shell script that completes the following functions: --8<-- "quickstart-install.md"
1. Checks if you have `kind` installed, and creates a cluster called `knative`.
1. Installs Knative Serving with Kourier as the default networking layer, and nip.io as the DNS.
1. Installs Knative Eventing and creates a default broker and channel implementation.
!!! todo "Install Knative and Kubernetes on a local Docker Daemon using `konk`"
```
curl -sL install.konk.dev | bash
```
## Install the Knative CLI ## Install the Knative CLI
The Knative CLI (`kn`) provides a quick and easy interface for creating Knative resources such as Knative services and event sources, without the need to create or modify YAML files directly. `kn` also simplifies completion of otherwise complex procedures such as autoscaling and traffic splitting. The Knative CLI (`kn`) provides a quick and easy interface for creating Knative resources, such as Knative Services and Event Sources, without the need to create or modify YAML files directly.
`kn` also simplifies completion of otherwise complex procedures such as autoscaling and traffic splitting.
--8<-- "install-kn.md" --8<-- "install-kn.md"

View File

@ -4,5 +4,5 @@
- [Knative MkDocs Contributor Guide](./mkdocs-contributor-guide.md) - [Knative MkDocs Contributor Guide](./mkdocs-contributor-guide.md)
- [Knative Style Guide](./style-guide/README.md) - [Knative Style Guide](./style-guide/README.md)
- [Content Re-Use](../snippets/README.md) - [Content Re-Use](../../snippets/README.md)
- [Using Shortcodes (Coming Soon!)]() - [Using Shortcodes (TBD)]()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 272 92" width="272" height="92"><path fill="#EA4335" d="M115.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18C71.25 34.32 81.24 25 93.5 25s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44S80.99 39.2 80.99 47.18c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#FBBC05" d="M163.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18c0-12.85 9.99-22.18 22.25-22.18s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44s-12.51 5.46-12.51 13.44c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#4285F4" d="M209.75 26.34v39.82c0 16.38-9.66 23.07-21.08 23.07-10.75 0-17.22-7.19-19.66-13.07l8.48-3.53c1.51 3.61 5.21 7.87 11.17 7.87 7.31 0 11.84-4.51 11.84-13v-3.19h-.34c-2.18 2.69-6.38 5.04-11.68 5.04-11.09 0-21.25-9.66-21.25-22.09 0-12.52 10.16-22.26 21.25-22.26 5.29 0 9.49 2.35 11.68 4.96h.34v-3.61h9.25zm-8.56 20.92c0-7.81-5.21-13.52-11.84-13.52-6.72 0-12.35 5.71-12.35 13.52 0 7.73 5.63 13.36 12.35 13.36 6.63 0 11.84-5.63 11.84-13.36z"/><path fill="#34A853" d="M225 3v65h-9.5V3h9.5z"/><path fill="#EA4335" d="M262.02 54.48l7.56 5.04c-2.44 3.61-8.32 9.83-18.48 9.83-12.6 0-22.01-9.74-22.01-22.18 0-13.19 9.49-22.18 20.92-22.18 11.51 0 17.14 9.16 18.98 14.11l1.01 2.52-29.65 12.28c2.27 4.45 5.8 6.72 10.75 6.72 4.96 0 8.4-2.44 10.92-6.14zm-23.27-7.98l19.82-8.23c-1.09-2.77-4.37-4.7-8.23-4.7-4.95 0-11.84 4.37-11.59 12.93z"/><path fill="#4285F4" d="M35.29 41.41V32H67c.31 1.64.47 3.58.47 5.68 0 7.06-1.93 15.79-8.15 22.01-6.05 6.3-13.78 9.66-24.02 9.66C16.32 69.35.36 53.89.36 34.91.36 15.93 16.32.47 35.3.47c10.5 0 17.98 4.12 23.6 9.49l-6.64 6.64c-4.03-3.78-9.49-6.72-16.97-6.72-13.86 0-24.7 11.17-24.7 25.03 0 13.86 10.84 25.03 24.7 25.03 8.99 0 14.11-3.61 17.39-6.89 2.66-2.66 4.41-6.46 5.1-11.65l-22.49.01z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 613 145"><defs><style>.cls-1{fill:#e00;}</style></defs><title>RedHat-Logo-A-Color</title><path class="cls-1" d="M127.47,83.49c12.51,0,30.61-2.58,30.61-17.46a14,14,0,0,0-.31-3.42l-7.45-32.36c-1.72-7.12-3.23-10.35-15.73-16.6C124.89,8.69,103.76.5,97.51.5,91.69.5,90,8,83.06,8c-6.68,0-11.64-5.6-17.89-5.6-6,0-9.91,4.09-12.93,12.5,0,0-8.41,23.72-9.49,27.16A6.43,6.43,0,0,0,42.53,44c0,9.22,36.3,39.45,84.94,39.45M160,72.07c1.73,8.19,1.73,9.05,1.73,10.13,0,14-15.74,21.77-36.43,21.77C78.54,104,37.58,76.6,37.58,58.49a18.45,18.45,0,0,1,1.51-7.33C22.27,52,.5,55,.5,74.22c0,31.48,74.59,70.28,133.65,70.28,45.28,0,56.7-20.48,56.7-36.65,0-12.72-11-27.16-30.83-35.78"/><path d="M160,72.07c1.73,8.19,1.73,9.05,1.73,10.13,0,14-15.74,21.77-36.43,21.77C78.54,104,37.58,76.6,37.58,58.49a18.45,18.45,0,0,1,1.51-7.33l3.66-9.06A6.43,6.43,0,0,0,42.53,44c0,9.22,36.3,39.45,84.94,39.45,12.51,0,30.61-2.58,30.61-17.46a14,14,0,0,0-.31-3.42Z"/><path d="M579.74,92.8c0,11.89,7.15,17.67,20.19,17.67a52.11,52.11,0,0,0,11.89-1.68V95a24.84,24.84,0,0,1-7.68,1.16c-5.37,0-7.36-1.68-7.36-6.73V68.3h15.56V54.1H596.78v-18l-17,3.68V54.1H568.49V68.3h11.25Zm-53,.32c0-3.68,3.69-5.47,9.26-5.47a43.12,43.12,0,0,1,10.1,1.26v7.15a21.51,21.51,0,0,1-10.63,2.63c-5.46,0-8.73-2.1-8.73-5.57m5.2,17.56c6,0,10.84-1.26,15.36-4.31v3.37h16.82V74.08c0-13.56-9.14-21-24.39-21-8.52,0-16.94,2-26,6.1l6.1,12.52c6.52-2.74,12-4.42,16.83-4.42,7,0,10.62,2.73,10.62,8.31v2.73a49.53,49.53,0,0,0-12.62-1.58c-14.31,0-22.93,6-22.93,16.73,0,9.78,7.78,17.24,20.19,17.24m-92.44-.94h18.09V80.92h30.29v28.82H506V36.12H487.93V64.41H457.64V36.12H439.55ZM370.62,81.87c0-8,6.31-14.1,14.62-14.1A17.22,17.22,0,0,1,397,72.09V91.54A16.36,16.36,0,0,1,385.24,96c-8.2,0-14.62-6.1-14.62-14.09m26.61,27.87h16.83V32.44l-17,3.68V57.05a28.3,28.3,0,0,0-14.2-3.68c-16.19,0-28.92,12.51-28.92,28.5a28.25,28.25,0,0,0,28.4,28.6,25.12,25.12,0,0,0,14.93-4.83ZM320,67c5.36,0,9.88,3.47,11.67,8.83H308.47C310.15,70.3,314.36,67,320,67M291.33,82c0,16.2,13.25,28.82,30.28,28.82,9.36,0,16.2-2.53,23.25-8.42l-11.26-10c-2.63,2.74-6.52,4.21-11.14,4.21a14.39,14.39,0,0,1-13.68-8.83h39.65V83.55c0-17.67-11.88-30.39-28.08-30.39a28.57,28.57,0,0,0-29,28.81M262,51.58c6,0,9.36,3.78,9.36,8.31S268,68.2,262,68.2H244.11V51.58Zm-36,58.16h18.09V82.92h13.77l13.89,26.82H292l-16.2-29.45a22.27,22.27,0,0,0,13.88-20.72c0-13.25-10.41-23.45-26-23.45H226Z"/></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 374 56.6" style="enable-background:new 0 0 374 56.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0096DB;}
</style>
<g>
<path class="st0" d="M78.5,22c-1.2-22-32.5-31.4-46-9.5c-8.8-3.9-19.3,2-19.4,11.8c-17.4,1.8-19.2,28.3,6.4,28.3h0.9
c-0.7-2.1-0.6-4.3,0.1-6.2l-2.7,0c-12.4-0.1-15.6-18,0.9-16.3c-3-9.9,7.4-18.1,16.2-10.7C42.7,1.1,71.7,0.6,73,26.7
c16.2,1.1,15.6,18.3,3.8,19.9H60.3c1.2,1.8,1.4,4,0.6,6h15.9C94.8,52.3,98,25.7,78.5,22z"/>
<path class="st0" d="M47,34.1l0.2-0.3c1.6-2.9,8.2-3.1,10.8-0.8c0.8,1.1,1.6,1.8,2.7,2.4c3.2,1.5,7,0.1,8.5-3.1
c1.5-3.2,0.1-7-3.1-8.5c-3.2-1.5-6.8,0-8.5,3.1c-1.9,3.5-9.3,2.4-10.7,0.9c-1-1.2-2.3-2.1-3.5-2.5c-1-0.4-2.1-0.5-3.2-0.3
c-3.3,0.5-5.6,3.7-5,7c0.1,0.6,0,0.6,0.7,2.2c0.7,1.6-2.6,8.9-6,9.5c-1.4,0-2.4,0.1-3.5,0.7C23,46,21.9,49.9,23.5,53
c1.7,3.1,5.5,4.3,8.7,2.6c3.1-1.7,4.1-5.4,2.6-8.7c-1.6-3.6,3.2-9.3,5.9-9.5c2.7-0.2,7.5,6.3,5.9,9.3c-1.7,3.1-1,7,2,8.9
c3,1.9,7,1,8.9-2c1.9-3,1-7-2-8.9c-1.1-0.7-2.1-0.9-3.5-1c-3.4-0.9-6.8-6.4-5.2-9.4C46.9,34.3,46.9,34.2,47,34.1z M63.6,26.8
c1.5,0,2.8,1.2,2.8,2.8s-1.2,2.8-2.8,2.8c-1.5,0-2.8-1.2-2.8-2.8S62,26.8,63.6,26.8z M29.1,53.1c-1.5,0-2.8-1.2-2.8-2.8
c0-1.5,1.2-2.8,2.8-2.8c1.5,0,2.8,1.2,2.8,2.8C31.9,51.8,30.7,53.1,29.1,53.1z M41,32.8c-1.2,0-2.1-0.9-2.1-2.1
c0-1.2,0.9-2.1,2.1-2.1c1.2,0,2.1,0.9,2.1,2.1C43.1,31.9,42.2,32.8,41,32.8z M52.2,47.5c1.5,0,2.8,1.2,2.8,2.8
c0,1.5-1.2,2.8-2.8,2.8s-2.8-1.2-2.8-2.8C49.4,48.7,50.6,47.5,52.2,47.5z"/>
<g>
<path d="M114,15.8h-8.5v-2.6h19.8v2.6h-8.5v22.6H114V15.8z"/>
<path d="M130.6,13.1h10.8c3.1,0,5.6,0.9,7.2,2.5c1.2,1.2,1.9,3,1.9,5v0.1c0,4.2-2.9,6.6-6.8,7.3l7.7,10.3h-3.5l-7.3-9.8h-7.2v9.8
h-2.8V13.1z M141.1,26c3.8,0,6.5-1.9,6.5-5.2v-0.1c0-3.1-2.4-5-6.4-5h-7.8V26H141.1z"/>
<path d="M156.8,13.1h2.8v25.2h-2.8V13.1z"/>
<path d="M165.9,25.8L165.9,25.8c0-7,5.1-13.1,12.6-13.1c4.2,0,6.9,1.2,9.4,3.3l-1.8,2.2c-1.9-1.7-4.1-2.9-7.7-2.9
c-5.6,0-9.6,4.7-9.6,10.3v0.1c0,6,3.9,10.5,10,10.5c2.9,0,5.5-1.1,7.3-2.5v-6.3h-7.7v-2.6h10.4v10c-2.3,2.1-5.9,3.9-10.1,3.9
C170.8,38.8,165.9,33,165.9,25.8z"/>
<path d="M194.2,25.8L194.2,25.8c0-7,5.1-13.1,12.6-13.1c4.2,0,6.9,1.2,9.4,3.3l-1.8,2.2c-1.9-1.7-4.1-2.9-7.7-2.9
c-5.6,0-9.6,4.7-9.6,10.3v0.1c0,6,3.9,10.5,10,10.5c2.9,0,5.5-1.1,7.3-2.5v-6.3h-7.7v-2.6h10.4v10c-2.3,2.1-5.9,3.9-10.1,3.9
C199.1,38.8,194.2,33,194.2,25.8z"/>
<path d="M223.5,13.1h18.2v2.6h-15.4v8.6h13.8v2.6h-13.8v8.8h15.5v2.6h-18.4V13.1z"/>
<path d="M247.6,13.1h10.8c3.1,0,5.6,0.9,7.2,2.5c1.2,1.2,1.9,3,1.9,5v0.1c0,4.2-2.9,6.6-6.8,7.3l7.7,10.3H265l-7.3-9.8h-7.2v9.8
h-2.8V13.1z M258.2,26c3.8,0,6.5-1.9,6.5-5.2v-0.1c0-3.1-2.4-5-6.4-5h-7.8V26H258.2z"/>
<path d="M272.3,13.1h7.4l6,9.8l6-9.8h7.4v25.2h-6.9V23.9l-6.4,9.9h-0.1l-6.4-9.8v14.4h-6.8V13.1z"/>
<path d="M303.6,13.1h20.3V19h-13.4v3.9h12.1v5.5h-12.1v4H324v5.9h-20.4V13.1z"/>
<path d="M325.7,34.6l3.9-4.6c2.5,2,5.3,3,8.2,3c1.9,0,2.9-0.6,2.9-1.7v-0.1c0-1.1-0.8-1.6-4.3-2.4c-5.4-1.2-9.5-2.7-9.5-7.9v-0.1
c0-4.7,3.7-8.1,9.8-8.1c4.3,0,7.6,1.2,10.4,3.3l-3.5,4.9c-2.3-1.7-4.8-2.5-7.1-2.5c-1.7,0-2.5,0.7-2.5,1.6v0.1
c0,1.2,0.9,1.7,4.4,2.4c5.8,1.3,9.4,3.1,9.4,7.8v0.1c0,5.1-4.1,8.2-10.2,8.2C333.1,38.8,328.8,37.4,325.7,34.6z"/>
<path d="M351.1,13.1h7v9.4h9v-9.4h7v25.2h-7v-9.6h-9v9.6h-7V13.1z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 614.8 223" style="enable-background:new 0 0 614.8 223;" xml:space="preserve">
<style type="text/css">
.st0{fill:#727175;}
</style>
<g>
<path class="st0" d="M283.2,143.2l-21.4-59.5c-0.3-0.8-0.7-1.9-0.7-2.9c0-2.6,2.2-5,5.3-5c2.7,0,4.5,1.8,5.3,4.4l17.7,51.3
l17.8-51.4c0.8-2.4,2.5-4.2,5.2-4.2h0.5c2.9,0,4.6,1.8,5.5,4.2l17.7,51.4l18-51.5c0.7-2.2,2.2-4.1,5-4.1c3,0,5.2,2.3,5.2,4.9
c0,1-0.4,2-0.7,2.9l-21.5,59.6c-1.1,3.1-3.3,4.7-5.7,4.7h-0.4c-2.7,0-4.8-1.6-5.7-4.7l-17.5-50.6l-17.7,50.6
c-0.9,3.1-3,4.7-5.7,4.7h-0.3C286.5,148,284.3,146.4,283.2,143.2"/>
<path class="st0" d="M439,81c0-2.9,2.3-5.3,5.2-5.3c3,0,5.3,2.3,5.3,5.3v12.1c5.2-11.7,16.7-17.3,24.3-17.3c3.1,0,5.2,2.3,5.2,5.3
c0,2.9-1.9,4.9-4.6,5.3c-13.6,1.6-24.8,11.9-24.8,32.2v23.9c0,2.9-2.2,5.3-5.2,5.3c-3,0-5.3-2.3-5.3-5.3V81"/>
<path class="st0" d="M512.7,148.6c-19,0-34.5-14.7-34.5-36.3V112c0-20.1,14-36.3,33.1-36.3c20.4,0,32.1,16.9,32.1,35.4
c0,2.8-2.3,4.9-4.8,4.9h-50c1.5,15.1,12,23.6,24.3,23.6c8.6,0,14.8-3.4,19.9-8.1c0.8-0.7,1.7-1.2,2.9-1.2c2.5,0,4.5,2,4.5,4.5
c0,1.2-0.5,2.4-1.6,3.4C532.2,144.4,524.5,148.6,512.7,148.6 M533.1,108.2c-1.1-12.7-8.3-23.8-22-23.8c-12,0-21.1,10.1-22.4,23.8
H533.1z"/>
<path class="st0" d="M364.6,126.7v-0.3c0-14.8,12.2-22.7,30-22.7c9,0,15.4,1.2,21.6,3v-2.4c0-12.6-7.8-19.2-20.9-19.2
c-7.1,0-11.2,0.9-16.4,3.2c-0.7,0.3-1.4,0.4-1.9,0.4c-2.5,0-4.6-2-4.6-4.5c0-2.2,1-3.5,2.9-4.4c6.9-3,12.1-4,21.1-4
c9.9,0,17.5,2.6,22.7,7.7c4.8,4.8,7.2,11.6,7.2,20.5v38.8c0,3-2.2,5.2-5,5.2c-3,0-5-2.2-5-4.9v-6.7c-4.9,6.4-13.1,12.1-25.4,12.1
C377.8,148.6,364.6,141.1,364.6,126.7 M416.4,121.3v-6.8c-5.2-1.5-12.1-3-20.7-3c-13.2,0-20.5,5.7-20.5,14.6v0.3
c0,8.8,8.2,14,17.7,14C405.8,140.3,416.4,132.4,416.4,121.3"/>
<path class="st0" d="M92.8,80.3c-2.3-5-8-7.3-13.3-5c-5.3,2.4-7.3,8.3-4.9,13.3l22.3,48.5c3.5,7.6,7.2,11.6,14.1,11.6
c7.4,0,10.6-4.3,14.2-11.6c0,0,19.5-42.4,19.7-42.8c0.2-0.5,0.8-1.8,2.8-1.8c1.7,0,3.1,1.4,3.1,3.1v41.5c0,6.4,3.5,11.6,10.4,11.6
c6.8,0,10.5-5.2,10.5-11.6v-33.9c0-6.5,4.7-10.8,11.1-10.8c6.4,0,10.6,4.4,10.6,10.8v33.9c0,6.4,3.6,11.6,10.4,11.6
c6.8,0,10.5-5.2,10.5-11.6v-33.9c0-6.5,4.7-10.8,11.1-10.8c6.4,0,10.6,4.4,10.6,10.8v33.9c0,6.4,3.5,11.6,10.4,11.6
c6.8,0,10.5-5.2,10.5-11.6V98.5c0-14.2-11.4-24.1-25.1-24.1c-13.7,0-22.3,9.5-22.3,9.5c-4.6-5.9-10.9-9.5-21.5-9.5
c-11.2,0-21.1,9.5-21.1,9.5c-4.6-5.9-12.3-9.5-18.8-9.5c-10,0-17.9,4.4-22.7,15.4L111,123.4L92.8,80.3"/>
<path class="st0" d="M544.3,84.5L544.3,84.5c0-4.8,3.8-8.8,8.7-8.8c4.9,0,8.7,4,8.7,8.7v0c0,4.8-3.8,8.8-8.7,8.8
C548.1,93.2,544.3,89.2,544.3,84.5 M560,84.4L560,84.4c0-3.9-3-7.1-7-7.1c-4,0-7,3.2-7,7.1v0.1c0,3.9,3,7.1,7,7.1
C557,91.5,560,88.3,560,84.4"/>
<path class="st0" d="M549.7,81c0-0.5,0.4-0.9,0.9-0.9h2.9c1.1,0,1.9,0.3,2.5,0.9c0.5,0.5,0.7,1.1,0.7,1.9v0c0,1.3-0.7,2.1-1.7,2.6
l1.3,1.6c0.2,0.2,0.3,0.4,0.3,0.7c0,0.5-0.4,0.9-0.9,0.9c-0.4,0-0.7-0.2-0.9-0.5l-1.8-2.3h-1.5v1.8c0,0.5-0.4,0.9-0.9,0.9
c-0.5,0-0.9-0.4-0.9-0.9V81z M553.4,84.1c0.9,0,1.4-0.5,1.4-1.2v0c0-0.8-0.5-1.2-1.4-1.2h-1.8v2.4H553.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 71.412065 50"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="YouTube_full-color_icon (2017).svg"
width="15.773"
height="11.773"><metadata
id="metadata33"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs31" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="715"
id="namedview29"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="1.3588925"
inkscape:cx="-71.668263"
inkscape:cy="39.237696"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><style
type="text/css"
id="style3">
.st0{fill:#FF0000;}
.st1{fill:#FFFFFF;}
.st2{fill:#282828;}
</style><g
id="g5"
transform="scale(0.58823529,0.58823529)"><path
class="st0"
d="M 118.9,13.3 C 117.5,8.1 113.4,4 108.2,2.6 98.7,0 60.7,0 60.7,0 60.7,0 22.7,0 13.2,2.5 8.1,3.9 3.9,8.1 2.5,13.3 0,22.8 0,42.5 0,42.5 0,42.5 0,62.3 2.5,71.7 3.9,76.9 8,81 13.2,82.4 22.8,85 60.7,85 60.7,85 c 0,0 38,0 47.5,-2.5 5.2,-1.4 9.3,-5.5 10.7,-10.7 2.5,-9.5 2.5,-29.2 2.5,-29.2 0,0 0.1,-19.8 -2.5,-29.3 z"
id="path7"
inkscape:connector-curvature="0"
style="fill:#ff0000" /><polygon
class="st1"
points="80.2,42.5 48.6,24.3 48.6,60.7 "
id="polygon9"
style="fill:#ffffff" /></g></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,23 @@
`konk` is a shell script that completes the following functions:
1. **Checks if you have [`kind`](https://kind.sigs.k8s.io/docs/user/quick-start){target=_blank} installed,** and creates a cluster called `knative`.
1. **Installs Knative Serving with Kourier** as the default networking layer, and nip.io as the DNS.
1. **Installs Knative Eventing** and creates an in-memory Broker and Channel implementation.
!!! todo "Install Knative and Kubernetes on a local Docker Daemon using `konk`"
```bash
curl -sL install.konk.dev | bash
```
??? bug "Having issues with Kind?"
We've found that some users (specifically Linux) may have trouble with Docker and, subsequently, Kind. Though this tutorial assumes you have KonK installed, you can easily follow along with a different installation.
We have provide an alternative Quickstart on `minikube` here: [https://github.com/csantanapr/knative-minikube](https://github.com/csantanapr/knative-minikube){_target="_blank"}
Installing `konk` may take a few minutes. After the script is finished, check to make sure you have a Cluster called `knative`
!!! success "Verify Installation"
```bash
kind get clusters
```

View File

@ -12,15 +12,16 @@ nav:
- Getting Started: - Getting Started:
- Before you begin: getting-started/README.md - Before you begin: getting-started/README.md
- Knative Quickstart: getting-started/install-knative-quickstart.md - Knative Quickstart: getting-started/install-knative-quickstart.md
- Serverless: - Using Knative Serving:
- First Knative Service: getting-started/first-service.md - First Knative Service: getting-started/first-service.md
- Scaling to Zero: getting-started/first-autoscale.md - Scaling to Zero: getting-started/first-autoscale.md
- Traffic Splitting: getting-started/first-traffic-split.md - Traffic Splitting: getting-started/first-traffic-split.md
- Event-Driven Applications: - Using Knative Eventing:
- Introducing Knative Eventing: getting-started/getting-started-eventing.md - Introducing Knative Eventing: getting-started/getting-started-eventing.md
- Sources, Brokers, Triggers, Sinks: getting-started/first-broker.md - Sources, Brokers, Triggers, Sinks: getting-started/first-broker.md
- Introducing the CloudEvents Player: getting-started/first-source.md - Introducing the CloudEvents Player: getting-started/first-source.md
- Creating your first Trigger: getting-started/first-trigger.md - Creating your first Trigger: getting-started/first-trigger.md
- Clean Up: getting-started/clean-up.md
- What's Next?: getting-started/next-steps.md - What's Next?: getting-started/next-steps.md
# Administration guide # Administration guide
- Administration guide: - Administration guide:

View File

@ -89,19 +89,19 @@
</div> </div>
<div style="display: inline-flex; justify-content: center; flex-gap: 2em; flex-wrap: wrap" id="usedby"> <div style="display: inline-flex; justify-content: center; flex-gap: 2em; flex-wrap: wrap" id="usedby">
<div class="logo"> <div class="logo">
<img src="images/Google.png" alt="" width="220" draggable="false" /> <img src="images/corporate-logos/Google.svg" alt="" width="170" draggable="false" />
</div> </div>
<div class="logo"> <div class="logo">
<img src="images/Tanzu.png" alt="" width="220" draggable="false" /> <img src="images/corporate-logos/vmware.svg" alt="" width="150" draggable="false" />
</div> </div>
<div class="logo"> <div class="logo">
<img src="images/IBM.png" alt="" width="150" draggable="false" /> <img src="images/corporate-logos/IBM.png" alt="" width="150" draggable="false" />
</div> </div>
<div class="logo"> <div class="logo">
<img src="images/Redhat.png" alt="" width="150" draggable="false" /> <img src="images/corporate-logos/Redhat.svg" alt="" width="130" draggable="false" />
</div> </div>
<div class="logo"> <div class="logo">
<img src="images/Triggermesh.png" alt="" width="100" draggable="false" /> <img src="images/corporate-logos/Triggermesh.svg" alt="" width="130" draggable="false" />
</div> </div>
<div class="logo" style="font-style: italic; font-size: smaller; color: #999">..and more!</div> <div class="logo" style="font-style: italic; font-size: smaller; color: #999">..and more!</div>
</div> </div>