blue-green-canary
blue-green-canary copied to clipboard
Example of Tekton + Istio for Blue/Green/Canary Deployments
= Blue, Green, Canary Deployments
With Tekton pipeline builds
With Istio
== OpenShift Only Instructions
16 cores available in worker nodes
Install Istio
https://docs.openshift.com/container-platform/4.3/service_mesh/service_mesh_install/installing-ossm.html
Install Tekton
https://openshift.github.io/pipelines-docs/docs/0.10.5/proc_installing-pipelines-operator-in-web-console.html
or
https://redhat-developer-demos.github.io/tekton-tutorial/tekton-tutorial/setup.html#deploy-tekton
Verify Istio Installation
kubectl api-resources --api-group='networking.istio.io'
kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE grafana-b67df64b6-fzqzb 2/2 Running 0 4m48s istio-citadel-79979464d-g2h6p 1/1 Running 0 9m5s istio-egressgateway-7d897695c4-bn6tz 1/1 Running 0 5m32s istio-galley-6bb46858c5-5mrvq 1/1 Running 0 7m37s istio-ingressgateway-8465bbf788-2vhcv 1/1 Running 0 5m31s istio-pilot-7cb87486f-8rlkx 2/2 Running 0 6m22s istio-policy-5fc74b8697-7gt2q 2/2 Running 0 7m11s istio-sidecar-injector-65cd4c8c6f-j27wc 1/1 Running 0 5m18s istio-telemetry-78644647c9-qr8k7 2/2 Running 0 7m10s jaeger-57776787bc-sstwj 2/2 Running 0 7m41s kiali-6d6f9cf658-299v5 1/1 Running 0 3m38s prometheus-b8bdc6b77-wgp6d 2/2 Running 0 8m44s
kubectl get pods -n openshift-pipelines NAME READY STATUS RESTARTS AGE tekton-pipelines-controller-7b6648dc8d-kfnqt 1/1 Running 0 8m40s tekton-pipelines-webhook-65856dff6c-x4mbj 1/1 Running 0 8m40s tekton-triggers-controller-6bcdd9d5df-m8lnr 1/1 Running 0 8m14s tekton-triggers-webhook-5cf995778d-tqrnk 1/1 Running 0 8m11s
oc new-project one
Add the project to Istio Servicemesh Member Roll
kubectl create -n one src/main/istio/servicemesh-member.yaml
=== Pipelines Tekton
oc api-resources --api-group='tekton.dev'
oc get pods -n openshift-pipelines
oc new-project rhd-workshop-infra oc new-app sonatype/nexus -n rhd-workshop-infra watch oc get pods -n rhd-workshop-infra
git clone https://github.com/redhat-developer-demos/blue-green-canary
oc project one (make sure this project is in Istio SMMR) ./4_service.sh
Declare Resources
make sure to update the resources to point to the righ project in OpenShift
image-registry.openshift-image-registry.svc:5000/<!!!! This need to be your project!!!>/blue-green-canary
kubectl apply -f src/main/tekton/pipeline-resources.yml
tkn res ls NAME TYPE DETAILS bgc-git-source git url: https://github.com/redhat-developer-demos/blue-green-canary bgc-image-blue image url: image-registry.openshift-image-registry.svc:5000/one/blue-green-canary
Declare Tasks
yq & kubectl apply
kubectl apply -f src/main/tekton/task-yq-deploy.yml
mvn & buildah
kubectl apply -f src/main/tekton/task-mvn-buildah.yml
tkn task ls NAME AGE mvn-buildah 4 seconds ago yq-deploy 28 seconds ago
Declare Pipelines
kubectl apply -f src/main/tekton/pipeline.yml
tkn pipeline ls NAME AGE LAST RUN STARTED DURATION STATUS bgc-build-deploy 5 seconds ago --- --- --- ---
Check APIResource.java for Aloha/blue
https://github.com/burrsutter/blue-green-canary/blob/master/src/main/java/com/burrsutter/bluegreencanary/APIResource.java
Start the pipeline(Blue)
./5_start_pipeline_blue.sh
Start the pipeline(Green)
./5_start_pipeline_green.sh
Start the pipeline(Canary)
./5_start_pipeline_canary.sh
Use list_containers.sh
./6_deploy_gateway.sh
watch kubectl get pods
To get the URL for end-users UI kubectl get route istio-ingressgateway -n istio-system --output 'jsonpath={.status.ingress[].host}'
./poll_bgc_ocp4_gateway.sh
Should be alternating across blue/green/canary
the URL for your browser
URL=$(kubectl get route istio-ingressgateway -n istio-system --output 'jsonpath={.status.ingress[].host}')/bgc
everybody blue
kubectl replace -f src/main/istio/Virtual_service_blue.yml
everybody green
kubectl replace -f src/main/istio/Virtual_service_green.yml