We use analytics and cookies to understand site traffic. Information about your use of our site is shared with Google for that purpose. Learn more.
Blue/Green deploy
The Knative service
resource creates additional resources “route, configuration and revision” to manage the lifecycle of the application.
- revision: just like a git revision, any change to the Service’s
spec.template
results in a new revision - route: control traffic to several revisions
You can list those resources by running kubectl get ksvc,configuration,route,revision
{{execute T1}} or by using the kn
cli
We will now update the service to change the TARGET
env variable to green
. Note that the name of the service is the same, we have updated the value of the environment
variable and .spec.template.metadata.name
cat <<EOF | kubectl apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
name: helloworld-go-green
spec:
containers:
- env:
- name: TARGET
value: green
image: gcr.io/knative-samples/helloworld-go
EOF
```{{execute T1}}
This will result in a new `revision` being created. Verify this by running `kubectl get revisions`{{execute T1}}.
Both these revisions are capable of serving requests. By default all traffic will be routed to the latest revision. You can test that by running the `curl` command again.
We will now split our traffic between the two revisions by using the `traffic` block in the Service definition.
cat «EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: name: helloworld-go-green spec: containers: - env: - name: TARGET value: green image: gcr.io/knative-samples/helloworld-go traffic:
- tag: current revisionName: helloworld-go-green percent: 50
- tag: candidate revisionName: helloworld-go-blue percent: 50
- tag: latest latestRevision: true percent: 0
EOF
Then proceed by issuing the curl command multiple times to see that the traffic is split between the two revisions:
curl http://$MINIKUBE_IP:$INGRESS_PORT/ -H ‘Host: helloworld-go.default.example.com’
Once you are satisfied with the new revision, all the traffic can be moved to the new `green` revision
cat «EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: name: helloworld-go-green spec: containers: - env: - name: TARGET value: green image: gcr.io/knative-samples/helloworld-go traffic:
- tag: latest latestRevision: true percent: 100
EOF
Then proceed by issuing the curl command multiple times to see that the traffic is goes to the new revision:
curl http://$MINIKUBE_IP:$INGRESS_PORT/ -H ‘Host: helloworld-go.default.example.com’