Canary Deployments To Kubernetes Using Istio and Friends
Делаю:
21.01.2021
09 Integrating Canary Deployments With Continuous Delivery
https://gist.github.com/8523efa6e7b1f0d48c1fda4f347ca55b
######################
# Installing Flagger
######################
$ kubectl apply \
--kustomize github.com/weaveworks/flagger/kustomize/istio
#####################
# Deploying The App
#####################
$ cd go-demo-7
$ kubectl create namespace go-demo-7
$ kubectl label namespace go-demo-7 \
istio-injection=enabled
$ kubectl --namespace go-demo-7 apply \
--filename k8s/istio/flagger-full/db \
--recursive
$ kubectl --namespace go-demo-7 apply \
--filename k8s/istio/flagger-full/app \
--recursive
$ kubectl --namespace go-demo-7 \
rollout status \
deployment go-demo-7
$ kubectl --namespace go-demo-7 \
rollout status \
deployment go-demo-7-primary
$ kubectl --namespace go-demo-7 \
get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
go-demo-7 2/2 2 2 2m19s
go-demo-7-db 1/1 1 1 2m24s
go-demo-7-primary 2/2 2 2 23s
$ chmod +x k8s/istio/get-ingress-host.sh
$ INGRESS_HOST=$(\
./k8s/istio/get-ingress-host.sh \
$PROVIDER)
$ echo ${INGRESS_HOST}
$ curl -H "Host: go-demo-7.acme.com" \
"http://$INGRESS_HOST/version"
Version: 0.0.1; Release: unknown
##############
# The Script
##############
$ kubectl --namespace go-demo-7 \
get canary go-demo-7 \
--output yaml
$ kubectl --namespace go-demo-7 \
get canary go-demo-7 \
--output jsonpath="{.status.phase}"
$ cat k8s/istio/flagger-status.sh
$ chmod +x k8s/istio/flagger-status.sh
#####################
# Successful Canary
#####################
$ echo ${INGRESS_HOST}
# Open a second terminal session
$ export INGRESS_HOST=[...]
$ echo {INGRESS_HOST}
$ cd ~/go-demo-7
$ export ADDR="http://${INGRESS_HOST}/version"
$ ./k8s/istio/flagger-status.sh "$ADDR"
# Go back to the first terminal session
$ kubectl --namespace go-demo-7 apply \
--filename k8s/istio/flagger/exercise/deployment-0-0-2.yaml
$ kubectl --namespace go-demo-7 \
describe canary go-demo-7
# Go to the second terminal session
echo $?
# Go back to the first terminal session
# Wait for a while (e.g., 5 min.)
#################
# Failed Canary
#################
# Go to the second terminal session
$ export ADDR="http://$INGRESS_HOST/demo/random-error"
$ ./k8s/istio/flagger-status.sh "$ADDR"
# Go back to the first terminal session
$ kubectl --namespace go-demo-7 apply \
--filename k8s/istio/flagger/exercise/deployment-0-0-3.yaml
$ kubectl --namespace go-demo-7 \
describe canary go-demo-7
# Go to the second terminal session
$ echo $?
# Go back to the first terminal session
###############
# Cleaning Up
###############
$ cd ..
$ kubectl delete namespace go-demo-7