Knative Client

Knative Client is the command line utility aimed at enhancing the developer experience when doing Knative Serving and Eventing tasks.

At the end of this chapter you will be able to :

  • Install Knative Client

  • Create, update, list and delete Knative service

  • Create, update, list and delete Knative service revisions

  • List Knative service routes

  • Knative Client (kn) is still under aggressive development, so commands and options might change rapidly.

  • As of writing the tutorial v1.8.1 was the latest version of the Knative Client

Install

Download the v1.8.1 Knative Client and add it to your PATH.

Verify installation by running the command:

kn version

The above command will return a response like

Version:      v1.8.1
Build Date:   2021-12-14T12:31:50Z
Git Revision: 530841f1
Supported APIs:
* Serving
  - serving.knative.dev/v1 (knative-serving )
* Eventing
  - sources.knative.dev/v1 (knative-eventing )
  - eventing.knative.dev/v1 (knative-eventing )

Knative Service Commands

Create Service

To create the greeter service using kn run the following command:

kn service create greeter \
  --image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus

A successful create of the greeter service should show a response like

Creating service 'greeter' in namespace 'knativetutorial':

  0.028s The Configuration is still working to reflect the latest desired specification.
  0.097s The Route is still working to reflect the latest desired specification.
  0.120s Configuration "greeter" is waiting for a Revision to become ready.
 12.075s ...
 12.128s Ingress has not yet been reconciled.
 12.223s unsuccessfully observed a new generation
 12.378s Ready to serve.

Service 'greeter' created to latest revision 'greeter-zyjrq-1' is available at URL:
http://greeter.knativetutorial.192.168.64.13.nip.io

List Knative Services

You can list the created services using the command:

kn service list
NAME      URL                                                   LATEST            AGE   CONDITIONS   READY   REASON
greeter   http://greeter.knativetutorial.192.168.64.13.nip.io  greeter-sxnzq-1   10m   3 OK / 3     True

Invoke Service

  • Minikube

  • OpenShift

http $(kn service describe greeter -o url)
export SVC_URL=`kubectl get rt greeter -o jsonpath={.status.url}` && \
http $SVC_URL

For all the examples in the tutorial we have configured the Ingress Controller and domain, which will use the domain suffix format like <service-name>.<namespace>.<minikube ip>.nip.io.

If you have not using the Ingress controller configuration then the service has to be invoked like http $IP_ADDRESS 'Host:greeter.knativetutorial.example.com', you noticed that we added a Host header to the request with value greeter.knativetutorial.example.com. This FQDN is automatically assigned to your Knative service by the Knative Routes and uses the following format: <service-name>.<namespace>.<domain-suffix>.

Update Knative Service

To create a new revision using kn is as easy as running another command.

In previous chapter we deployed a new revision of Knative service by adding an environment variable. Lets try do the same thing with kn to trigger a new deployment:

kn service update greeter --env "MESSAGE_PREFIX=Namaste"
Updating Service 'greeter' in namespace 'knativetutorial':

  0.025s The Configuration is still working to reflect the latest desired specification.
  5.694s Traffic is not yet migrated to the latest revision.
  5.736s Ingress has not yet been reconciled.
  5.783s unsuccessfully observed a new generation
  5.971s Ready to serve.

Service 'greeter' updated to latest revision 'greeter-tmvxm-2' is available at URL:
http://greeter.knativetutorial.192.168.64.13.nip.io

Now Invoking the service will return me a response like:

Namaste  greeter => '9861675f8845' : 1

Describe Knative Service

Sometime you wish you get the YAML of the Knative service to build a new service or to compare with with another service. kn makes it super easy for you to get the YAML:

kn service describe greeter

The describe should show you a short summary of your service :

Name:       greeter
Namespace:  knativetutorial
Age:        1m
URL:        http://greeter.knativetutorial.192.168.64.13.nip.io

Revisions:
  100%  @latest (greeter-twpgf-1) [1] (1m)
        Image:  quay.io/rhdevelopers/knative-tutorial-greeter:quarkus (pinned to 767e2f)

Conditions:
  OK TYPE                   AGE REASON
   Ready                  34s
   ConfigurationsReady    34s
  ++ RoutesReady            34s

Describe with verboisity

To list all the revisions as part of the describe command use:

kn service describe greeter -v
Name:         greeter
Namespace:    knativetutorial
Annotations:  serving.knative.dev/creator=minikube-user
              serving.knative.dev/lastModifier=minikube-user
Age:          14m
URL:          http://greeter.knativetutorial.192.168.64.13.nip.io
Cluster:      http://greeter.knativetutorial.svc.cluster.local

Revisions:
  100%  @latest (greeter-tmvxm-2) [2] (10m)
        Image:  quay.io/rhdevelopers/knative-tutorial-greeter:quarkus (pinned to 767e2f)
        Env:    MESSAGE_PREFIX=Namaste
     +  greeter-zyjrq-1 [1] (14m)
        Image:  quay.io/rhdevelopers/knative-tutorial-greeter:quarkus (pinned to 767e2f)

Conditions:
  OK TYPE                   AGE REASON
   Ready                  10m
   ConfigurationsReady    10m
  ++ RoutesReady            10m

Get Service URL

To get the Knative service url use describe with -o url option:

kn service describe greeter -o url
http://greeter.knativetutorial.192.168.64.13.nip.io

Knative Revision Commands

The kn revision commands are used to interact with revision(s) of Knative service.

List Revisions

You can list the available revisions of a Knative service using:

kn revision list
NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE     CONDITIONS   READY   REASON
greeter-00002   greeter   100%             2            3m37s   3 OK / 4     True
greeter-00001   greeter                    1            16m     3 OK / 4     True

Describe Revision

To get the details about a specific revision you can use the command:

kn revision describe greeter-00001
Name:       greeter-00001
Namespace:  knativetutorial
Age:        17m
Image:      quay.io/rhdevelopers/knative-tutorial-greeter:quarkus (pinned to 767e2f)
Replicas:   0/0
Service:    greeter

Conditions:
  OK TYPE                  AGE REASON
  ++ Ready                 17m
  ++ ContainerHealthy      17m
  ++ ResourcesAvailable    17m
   I Active                16m NoTraffic

Delete Revision

To delete a specific revision you can use the command:

kn revision delete greeter-00001
Revision 'greeter-00001' successfully deleted in namespace 'knativetutorial'.

Knative Route Commands

The kn revision commands are used to interact with route(s) of Knative service.

List Routes

kn route list

Delete Knative Service

You can also use kn to delete the service that were created, to delete the service named greeter run the following command:

kn service delete greeter
Service 'greeter' successfully deleted in namespace 'knativetutorial'.

Listing services you will notice that the greeter service no longer exists.