Skip to content

Latest commit

 

History

History
103 lines (80 loc) · 3.15 KB

README.md

File metadata and controls

103 lines (80 loc) · 3.15 KB

Simple Traffic Splitting Between Revisions

This samples builds off the Creating a RESTful Service sample to illustrate applying a revision, then using that revision for manual traffic splitting.

Prerequisites

  1. Creating a RESTful Service.

Updating the Service

This section describes how to create an revision by deploying a new configuration.

  1. Replace the image reference path with our published image path in the configuration files (serving/samples/traffic-splitting/updated_configuration.yaml:

    • Manually replace:
      image: github.com/knative/docs/serving/samples/rest-api-go with image: <YOUR_CONTAINER_REGISTRY>/serving/samples/rest-api-go

    Or

    • Use run this command:
    perl -pi -e "s@github.com/knative/docs@${REPO}@g" serving/samples/rest-api-go/updated_configuration.yaml
    
  2. Deploy the new configuration to update the RESOURCE environment variable from stock to share:

kubectl apply --filename serving/samples/traffic-splitting/updated_configuration.yaml
  1. Once deployed, traffic will shift to the new revision automatically. Verify the deployment by checking the route status:
kubectl get route --output yaml
  1. When the new route is ready, you can access the new endpoints:
    The hostname and IP address can be found in the same manner as the Creating a RESTful Service sample:
export SERVICE_HOST=`kubectl get route stock-route-example --output jsonpath="{.status.domain}"`
export SERVICE_IP=`kubectl get svc knative-ingressgateway --namespace istio-system \
--output jsonpath="{.status.loadBalancer.ingress[*].ip}"`
  • Make a request to the index endpoint:
curl --header "Host:$SERVICE_HOST" http://${SERVICE_IP}

Response body: Welcome to the share app!

  • Make a request to the /share endpoint:
curl --header "Host:$SERVICE_HOST" http://${SERVICE_IP}/share

Response body: share ticker not found!, require /share/{ticker}

  • Make a request to the /share endpoint with a ticker parameter:
curl --header "Host:$SERVICE_HOST" http://${SERVICE_IP}/share/<ticker>

Response body: share price for ticker <ticker> is <price>

Manual Traffic Splitting

This section describes how to manually split traffic to specific revisions.

  1. Get your revisions names via:
kubectl get revisions
NAME                                AGE
stock-configuration-example-00001   11m
stock-configuration-example-00002   4m
  1. Update the traffic list in serving/samples/rest-api-go/sample.yaml as:
traffic:
  - revisionName: <YOUR_FIRST_REVISION_NAME>
    percent: 50
  - revisionName: <YOUR_SECOND_REVISION_NAME>
    percent: 50
  1. Deploy your traffic revision:
kubectl apply --filename serving/samples/rest-api-go/sample.yaml
  1. Verify the deployment by checking the route status:
kubectl get route --output yaml

Once updated, you can make curl requests to the API using either stock or share endpoints.

Clean Up

To clean up the sample service:

kubectl delete --filename serving/samples/traffic-splitting/updated_configuration.yaml