Blue/Green deploy

The Knative service resource creates additional resources “route, configuration and revision” to manage the lifecycle of the application.

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:

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:

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’