Knative manages traffic distribution between different revisions. In the console, you can define the traffic distribution percentages for each revision and fine-tune these percentages based on performance. This process continues until all traffic is switched to the new version, completing the canary release.
Prerequisites
Knative is deployed in your cluster. For more information, see Deploy Knative.
Step 1: Create a Knative Service
Log on to the ACK console. In the left-side navigation pane, click Clusters.
On the Clusters page, find the cluster that you want to manage and click its name. In the left-side navigation pane, choose .
On the Services tab of the Knative page, set Namespace to default. Click Create Service to deploy a Service named helloworld-go. After the Service is deployed, click Create.
The following table describes the key parameters. For more information about the parameters, see Use Knative to deploy serverless applications.
Parameter
Description
Namespace
Select the namespace to which the Service belongs.
Service Name
Enter a name for the Service. In this example, helloworld-go is used.
Image Name
To select an image, click Select Image. In the Select Image dialog box, select an image and click OK. You can also enter the address of a private image registry. The registry address must be in the domainname/namespace/imagename:tag format. In this example, registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go is used.
Image Version
Click Select Image Version and select an image version. By default, the latest version is used. In this example, 73fbdd56 is selected.
Access Protocol
HTTP and gRPC are supported.
NoteNote
gRPC is developed based on the HTTP/2 standard and Protocol Buffers (protobuf) serialization protocol, and supports various programming languages. Compared with HTTP/1.1, HTTP/2 allows you to send and receive packets more efficiently.
Container Port
The container port that you want to expose. The port number must be in the range of 1 to 65535.
If the Status column of the Service displays Created, the Service is deployed.
On the Services page, record the domain name and gateway IP address of the
helloworld-go
Service in the Default Domain and Gateway columns, respectively.Run the following command to access the
helloworld-go
Service:curl -H "host: <Default domain name>" http://<Gateway IP address> # Replace the gateway IP address and domain name with the actual values.
Expected output:
Hello World!
The output indicates that the Service is created and can be accessed as normal.
Step 2: Create a revision to deploy a canary release
Log on to the ACK console. In the left-side navigation pane, click Clusters.
On the Clusters page, find the cluster that you want to manage and click its name. In the left-side navigation pane, choose .
Create a revision.
On the Services tab, select the Service that you created and click Details in the Actions column.
Click Create Revision. On the Basic Information wizard page, click Advanced, set the environment variable of the latest revision to
TARGET=Knative
, and click Next.On the Traffic Splitting Settings wizard page, set the Percent % parameter to 0 for the latest revision and click Create.
NoteThe sum of traffic ratios of all revisions must be 100.
After the revision is complete, you can find details about the new version on the Services tab.
Run the following command to access the
helloworld-go
Service:curl -H "host: <Default domain name>" http://<Gateway IP address> # Replace the gateway IP address and domain name with the actual values.
Expected output:
Hello World!
The output indicates that the Service is created and can be accessed as normal. The Percent % parameter is set to 0 for the new version. This means that all requests to access the helloworld-go Service are sent to the old version.
Modify the traffic splitting ratio to deploy a canary release.
On the Services tab, select the Service that you created and click Details in the Actions column.
Click Split Traffic. In the Split Traffic dialog box, set the Percent % parameter to 50% for both the old and new versions and then click OK.
After the Percent % parameter is set for the Service, you can view the details about the new and old Service versions on the Services tab.
Run the following command to access the Service:
while true; do curl -H "host: <Default domain name>" http://<Gateway IP address>; slesp 1; done # Replace the gateway IP address and domain name with the actual values.
NoteThe command runs permanently until you manually terminate it. You can press
Ctrl + C
to terminate the command.Expected output:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...
The Percent % parameter is set to 50% for both the old and new versions. This means that requests to access the helloworld-go Service are evenly distributed to the old and new version.
You can change the value of the Percent % parameter to implement canary releases. The new version is completely released if you set the Percent % parameter to 100% for the new version. During the process, you can change the value of the Percent % parameter to roll back if issues are found in the new version.
References
You can configure auto scaling for a Knative Service based on the number of requests. For more information, see Enable auto scaling to withstand traffic fluctuations.