4.9prePromotionAnalysis

release/blueGreen/argo-rollout/bg-reviews-prePromotionAnalysis.yaml

kubectl apply -f bg-reviews-prePromotionAnalysis.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: reviews
spec:
  replicas: 5
  selector:
    matchLabels:
      app: reviews
  template:
    metadata:
      labels:
        app: reviews
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: reviews
        image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        resources:
          requests:
            cpu: 0.02
            memory: 10Mi
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
        securityContext:
          runAsUser: 1000
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
  strategy:
    blueGreen: 
      activeService: rollout-bluegreen-active
      previewService: rollout-bluegreen-preview
      prePromotionAnalysis:
        templates:
        - templateName: success-rate
          clusterScope: false
        args:
        - name: service-name
          value: rollout-bluegreen-preview.istio.svc.cluster.local

argo-AnalysisTemplate-reviews.yaml

kubectl apply -f argo-AnalysisTemplate-reviews.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  args:
  - name: service-name
  metrics:
  - name: success-rate
    interval: 60s
    count: 5
    successCondition: result[0] >= 0.50
    failureLimit: 3
    provider:
      prometheus:
        address: http://prometheus.istio-system:9090
        query: |
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m]
          )) / 
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m]
          ))

vs-reviews-preview.yaml

kubectl apply -f vs-reviews-preview.yaml -n istio

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: rollout-bluegreen-preview
spec:
  gateways:
  - bookinfo-gateway
  hosts:
  - "*"
  http:
  - route:
    - destination:
        host: rollout-bluegreen-preview
        port:
          number: 9080

svc-rollout-bluegreen-active.yaml

kubectl apply -f svc-rollout-bluegreen-active.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-active
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews

svc-rollout-bluegreen-preview.yaml

kubectl apply -f svc-rollout-bluegreen-preview.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-preview
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews
kubectl argo rollouts set  image reviews reviews=docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 -n istio

go-stress-testing -c 10 -n 1000000 -u http://192.168.229.134:30468/reviews/0

kubectl describe rollout reviews  -n istio
kubectl argo rollouts get rollout reviews --watch -n istio

Name:            reviews
Namespace:       istio
Status:          ✔ Healthy
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (stable, active)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2
Replicas:
  Desired:       5
  Current:       10
  Updated:       5
  Ready:         5
  Available:     5

NAME                                 KIND         STATUS        AGE    INFO
⟳ reviews                            Rollout      ✔ Healthy     32m    
├──# revision:7                                                        
│  ├──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy     32m    stable,active
│  │  ├──□ reviews-db897675d-mzqjc   Pod          ✔ Running     5m33s  ready:2/2
│  │  ├──□ reviews-db897675d-k9gsl   Pod          ✔ Running     5m32s  ready:2/2
│  │  ├──□ reviews-db897675d-twtt6   Pod          ✔ Running     5m32s  ready:2/2
│  │  ├──□ reviews-db897675d-txglh   Pod          ✔ Running     5m32s  ready:2/2
│  │  └──□ reviews-db897675d-vt4xp   Pod          ✔ Running     5m32s  ready:2/2
│  └──α reviews-db897675d-7-pre      AnalysisRun  ✔ Successful  3m40s  ✖ 2,⚠ 1
├──# revision:6                                                        
│  └──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy     32m    delay:13s
│     ├──□ reviews-5895cfcd85-jlkp8  Pod          ✔ Running     27m    ready:2/2
│     ├──□ reviews-5895cfcd85-t7lk4  Pod          ✔ Running     27m    ready:2/2
│     ├──□ reviews-5895cfcd85-424cq  Pod          ✔ Running     27m    ready:2/2
│     ├──□ reviews-5895cfcd85-4qsf2  Pod          ✔ Running     27m    ready:2/2
│     └──□ reviews-5895cfcd85-8ht5l  Pod          ✔ Running     27m    ready:2/2
└──# revision:5                                                        
   └──α reviews-db897675d-5-pre      AnalysisRun  ⚠ Error       8m30s  ⚠ 5
   
   
Events:
  Type     Reason                 Age                  From                 Message
  ----     ------                 ----                 ----                 -------
  Normal   NewReplicaSetCreated   33m                  rollouts-controller  Created ReplicaSet reviews-db897675d (revision 1)
  Normal   SwitchService          33m                  rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from '' to 'db897675d'
  Normal   ScalingReplicaSet      33m                  rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 1) from 0 to 5
  Normal   RolloutCompleted       33m                  rollouts-controller  Rollout completed update to revision 1 (db897675d): Initial deploy
  Normal   RolloutUpdated         33m                  rollouts-controller  Rollout updated to revision 1
  Normal   NewReplicaSetCreated   32m                  rollouts-controller  Created ReplicaSet reviews-5895cfcd85 (revision 2)
  Normal   RolloutUpdated         32m                  rollouts-controller  Rollout updated to revision 2
  Normal   RolloutCompleted       32m                  rollouts-controller  Rollout completed update to revision 2 (5895cfcd85): Initial deploy
  Normal   ScalingReplicaSet      32m                  rollouts-controller  Scaled up ReplicaSet reviews-5895cfcd85 (revision 2) from 0 to 5
  Normal   SwitchService          32m                  rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '' to '5895cfcd85'
  Normal   ScalingReplicaSet      32m                  rollouts-controller  Scaled down ReplicaSet reviews-db897675d (revision 1) from 5 to 0
  Normal   RolloutUpdated         31m                  rollouts-controller  Rollout updated to revision 3
  Normal   ScalingReplicaSet      31m                  rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 3) from 0 to 5
  Normal   SwitchService          30m                  rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '5895cfcd85' to 'db897675d'
  Normal   RolloutCompleted       30m                  rollouts-controller  Rollout completed update to revision 3 (db897675d): Completed blue-green update
  Normal   ScalingReplicaSet      30m                  rollouts-controller  Scaled down ReplicaSet reviews-5895cfcd85 (revision 2) from 5 to 0
  Normal   SwitchService          27m (x2 over 32m)    rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from 'db897675d' to '5895cfcd85'
  Normal   RolloutUpdated         27m                  rollouts-controller  Rollout updated to revision 4
  Normal   ScalingReplicaSet      27m                  rollouts-controller  Scaled up ReplicaSet reviews-5895cfcd85 (revision 4) from 0 to 5
  Normal   RolloutCompleted       27m                  rollouts-controller  Rollout completed update to revision 4 (5895cfcd85): Completed blue-green update
  Normal   SwitchService          27m                  rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from 'db897675d' to '5895cfcd85'
  Normal   ScalingReplicaSet      26m                  rollouts-controller  Scaled down ReplicaSet reviews-db897675d (revision 3) from 5 to 0
  Normal   ScalingReplicaSet      9m25s                rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 5) from 0 to 5
  Normal   RolloutUpdated         9m25s                rollouts-controller  Rollout updated to revision 5
  Normal   SwitchService          9m25s (x2 over 31m)  rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from '5895cfcd85' to 'db897675d'
  Normal   AnalysisRunRunning     8m24s                rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-5-pre' Status New: 'Running' Previous: ''
  Warning  AnalysisRunError       7m44s                rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-5-pre' Status New: 'Error' Previous: 'Running'
  Warning  RolloutAborted         7m44s                rollouts-controller  Rollout aborted update to revision 5: Metric "success-rate" assessed Error due to consecutiveErrors (5) > consecutiveErrorLimit (4): "Error Message: reflect: slice index out of range"
  Normal   AnalysisRunRunning     4m3s                 rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-7-pre' Status New: 'Running' Previous: ''
  Normal   AnalysisRunSuccessful  72s                  rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-7-pre' Status New: 'Successful' Previous: 'Running'
  Normal   SwitchService          42s                  rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '5895cfcd85' to 'db897675d'
  Normal   RolloutCompleted       42s                  rollouts-controller  Rollout completed update to revision 7 (db897675d): Completed blue-green update
  Normal   ScalingReplicaSet      9s                   rollouts-controller  Scaled down ReplicaSet reviews-5895cfcd85 (revision 6) from 5 to 0

清理:

kubectl delete rollout reviews -n istio

kubectl delete svc -n istio rollout-bluegreen-active

kubectl delete svc -n istio rollout-bluegreen-preview

kubectl delete AnalysisTemplate success-rate -n istio

kubectl delete vs rollout-bluegreen-preview -n istio

4.10postPromotionAnalysis

release/blueGreen/argo-rollout/bg-reviews-postPromotionAnalysis.yaml

kubectl apply -f bg-reviews-postPromotionAnalysis.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: reviews
spec:
  replicas: 5
  selector:
    matchLabels:
      app: reviews
  template:
    metadata:
      labels:
        app: reviews
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: reviews
        image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        resources:
          requests:
            cpu: 0.02
            memory: 10Mi
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
        securityContext:
          runAsUser: 1000
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
  strategy:
    blueGreen: 
      activeService: rollout-bluegreen-active
      previewService: rollout-bluegreen-preview
      prePromotionAnalysis:
        templates:
        - templateName: success-rate
          clusterScope: false
        args:
        - name: service-name
          value: rollout-bluegreen-preview.istio.svc.cluster.local
      postPromotionAnalysis:
        templates:
        - templateName: success-rate
          clusterScope: false
        args:
        - name: service-name
          value: rollout-bluegreen-active.istio.svc.cluster.local      

argo-AnalysisTemplate-reviews.yaml

kubectl apply -f argo-AnalysisTemplate-reviews.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  args:
  - name: service-name
  metrics:
  - name: success-rate
    interval: 60s
    count: 5
    successCondition: result[0] >= 0.50
    failureLimit: 3
    provider:
      prometheus:
        address: http://prometheus.istio-system:9090
        query: |
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m]
          )) / 
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m]
          ))

vs-reviews-preview.yaml

kubectl apply -f vs-reviews-preview.yaml -n istio

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: rollout-bluegreen-preview
spec:
  gateways:
  - bookinfo-gateway
  hosts:
  - "*"
  http:
  - route:
    - destination:
        host: rollout-bluegreen-preview
        port:
          number: 9080

svc-rollout-bluegreen-active.yaml

kubectl apply -f svc-rollout-bluegreen-active.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-active
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews

svc-rollout-bluegreen-preview.yaml

kubectl apply -f svc-rollout-bluegreen-preview.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-preview
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews
kubectl argo rollouts set  image reviews reviews=docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 -n istio

go-stress-testing -c 10 -n 1000000 -u http://192.168.229.134:30468/reviews/0

kubectl describe rollout reviews  -n istio
kubectl argo rollouts get rollout reviews --watch -n istio

Name:            reviews
Namespace:       istio
Status:          ◌ Progressing
Message:         active service cutover pending
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (preview)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 (stable, active)
Replicas:
  Desired:       5
  Current:       10
  Updated:       5
  Ready:         5
  Available:     5

NAME                                 KIND         STATUS         AGE    INFO
⟳ reviews                            Rollout      ◌ Progressing  3m4s   
├──# revision:3                                                         
│  ├──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy      3m4s   preview
│  │  ├──□ reviews-db897675d-7nbss   Pod          ✔ Running      96s    ready:2/2
│  │  ├──□ reviews-db897675d-dg6js   Pod          ✔ Running      96s    ready:2/2
│  │  ├──□ reviews-db897675d-ww5mt   Pod          ✔ Running      96s    ready:2/2
│  │  ├──□ reviews-db897675d-rlwsb   Pod          ✔ Running      95s    ready:2/2
│  │  └──□ reviews-db897675d-sggnw   Pod          ✔ Running      95s    ready:2/2
│  └──α reviews-db897675d-3-pre      AnalysisRun  ◌ Running      37s    ✖ 1
└──# revision:2                                                         
   └──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy      2m17s  stable,active
      ├──□ reviews-5895cfcd85-8d42s  Pod          ✔ Running      2m16s  ready:2/2
      ├──□ reviews-5895cfcd85-b7dkl  Pod          ✔ Running      2m16s  ready:2/2
      ├──□ reviews-5895cfcd85-hx6pt  Pod          ✔ Running      2m16s  ready:2/2
      ├──□ reviews-5895cfcd85-q6wdn  Pod          ✔ Running      2m16s  ready:2/2
      └──□ reviews-5895cfcd85-sj7qx  Pod          ✔ Running      2m16s  ready:2/2
      
Name:            reviews
Namespace:       istio
Status:          ◌ Progressing
Message:         waiting for analysis to complete
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (active)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 (stable)
Replicas:
  Desired:       5
  Current:       10
  Updated:       5
  Ready:         5
  Available:     5

NAME                                 KIND         STATUS         AGE    INFO
⟳ reviews                            Rollout      ◌ Progressing  8m8s   
├──# revision:3                                                         
│  ├──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy      8m8s   active
│  │  ├──□ reviews-db897675d-7nbss   Pod          ✔ Running      6m40s  ready:2/2
│  │  ├──□ reviews-db897675d-dg6js   Pod          ✔ Running      6m40s  ready:2/2
│  │  ├──□ reviews-db897675d-ww5mt   Pod          ✔ Running      6m40s  ready:2/2
│  │  ├──□ reviews-db897675d-rlwsb   Pod          ✔ Running      6m39s  ready:2/2
│  │  └──□ reviews-db897675d-sggnw   Pod          ✔ Running      6m39s  ready:2/2
│  ├──α reviews-db897675d-3-pre      AnalysisRun  ✔ Successful   5m41s  ✔ 4,✖ 1,⚠ 2
│  └──α reviews-db897675d-3-post     AnalysisRun  ◌ Running      12s    ⚠ 2
└──# revision:2                                                         
   └──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy      7m21s  stable
      ├──□ reviews-5895cfcd85-8d42s  Pod          ✔ Running      7m20s  ready:2/2
      ├──□ reviews-5895cfcd85-b7dkl  Pod          ✔ Running      7m20s  ready:2/2
      ├──□ reviews-5895cfcd85-hx6pt  Pod          ✔ Running      7m20s  ready:2/2
      ├──□ reviews-5895cfcd85-q6wdn  Pod          ✔ Running      7m20s  ready:2/2
      └──□ reviews-5895cfcd85-sj7qx  Pod          ✔ Running      7m20s  ready:2/2
      
Events:
  Type     Reason                 Age    From                 Message
  ----     ------                 ----   ----                 -------
  Normal   RolloutUpdated         10m    rollouts-controller  Rollout updated to revision 1
  Normal   NewReplicaSetCreated   10m    rollouts-controller  Created ReplicaSet reviews-db897675d (revision 1)
  Normal   SwitchService          10m    rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from '' to 'db897675d'
  Normal   ScalingReplicaSet      10m    rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 1) from 0 to 5
  Normal   RolloutCompleted       10m    rollouts-controller  Rollout completed update to revision 1 (db897675d): Initial deploy
  Normal   RolloutUpdated         9m16s  rollouts-controller  Rollout updated to revision 2
  Normal   NewReplicaSetCreated   9m16s  rollouts-controller  Created ReplicaSet reviews-5895cfcd85 (revision 2)
  Normal   SwitchService          9m16s  rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from 'db897675d' to '5895cfcd85'
  Normal   RolloutCompleted       9m16s  rollouts-controller  Rollout completed update to revision 2 (5895cfcd85): Initial deploy
  Normal   ScalingReplicaSet      9m15s  rollouts-controller  Scaled up ReplicaSet reviews-5895cfcd85 (revision 2) from 0 to 5
  Normal   SwitchService          9m6s   rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '' to '5895cfcd85'
  Normal   ScalingReplicaSet      8m45s  rollouts-controller  Scaled down ReplicaSet reviews-db897675d (revision 1) from 5 to 0
  Normal   RolloutUpdated         8m35s  rollouts-controller  Rollout updated to revision 3
  Normal   SwitchService          8m35s  rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from '5895cfcd85' to 'db897675d'
  Normal   ScalingReplicaSet      8m35s  rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 3) from 0 to 5
  Normal   AnalysisRunRunning     7m36s  rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-3-pre' Status New: 'Running' Previous: ''
  Normal   SwitchService          2m7s   rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '5895cfcd85' to 'db897675d'
  Normal   AnalysisRunSuccessful  2m7s   rollouts-controller  PrePromotion Analysis Run 'reviews-db897675d-3-pre' Status New: 'Successful' Previous: 'Running'
  Normal   AnalysisRunRunning     2m6s   rollouts-controller  PostPromotion Analysis Run 'reviews-db897675d-3-post' Status New: 'Running' Previous: ''
  Warning  AnalysisRunError       87s    rollouts-controller  PostPromotion Analysis Run 'reviews-db897675d-3-post' Status New: 'Error' Previous: 'Running'
  Warning  RolloutAborted         87s    rollouts-controller  Rollout aborted update to revision 3: Metric "success-rate" assessed Error due to consecutiveErrors (5) > consecutiveErrorLimit (4): "Error Message: reflect: slice index out of range"
  Normal   SwitchService          87s    rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from 'db897675d' to '5895cfcd85'
  Normal   ScalingReplicaSet      57s    rollouts-controller  Scaled down ReplicaSet reviews-db897675d (revision 3) from 5 to 0

清理:

kubectl delete rollout reviews -n istio

kubectl delete svc -n istio rollout-bluegreen-active

kubectl delete svc -n istio rollout-bluegreen-preview

kubectl delete AnalysisTemplate success-rate -n istio

kubectl delete vs rollout-bluegreen-preview -n istio

4.11HPA

istio-HPA.yaml

kubectl apply -f istio-HPA.yaml -n istio

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-rollout
spec:
  maxReplicas: 5
  minReplicas: 1
  scaleTargetRef:
    apiVersion: argoproj.io/v1alpha1
    kind: Rollout
    name: reviews
  targetCPUUtilizationPercentage: 10

release/blueGreen/argo-rollout/bg-reviews-HPA.yaml

kubectl apply -f bg-reviews-HPA.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: reviews
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reviews
  template:
    metadata:
      labels:
        app: reviews
    spec:
      serviceAccountName: bookinfo-reviews
      containers:
      - name: reviews
        image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
        imagePullPolicy: IfNotPresent
        env:
        - name: LOG_DIR
          value: "/tmp/logs"
        ports:
        - containerPort: 9080
        resources:
          requests:
            cpu: 0.02
            memory: 10Mi
        volumeMounts:
        - name: tmp
          mountPath: /tmp
        - name: wlp-output
          mountPath: /opt/ibm/wlp/output
        securityContext:
          runAsUser: 1000
      volumes:
      - name: wlp-output
        emptyDir: {}
      - name: tmp
        emptyDir: {}
  strategy:
    blueGreen: 
      activeService: rollout-bluegreen-active
      previewService: rollout-bluegreen-preview
      prePromotionAnalysis:
        templates:
        - templateName: success-rate
          clusterScope: false
        args:
        - name: service-name
          value: rollout-bluegreen-preview.istio.svc.cluster.local
      postPromotionAnalysis:
        templates:
        - templateName: success-rate
          clusterScope: false
        args:
        - name: service-name
          value: rollout-bluegreen-active.istio.svc.cluster.local      

argo-AnalysisTemplate-reviews.yaml

kubectl apply -f argo-AnalysisTemplate-reviews.yaml -n istio

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  args:
  - name: service-name
  metrics:
  - name: success-rate
    interval: 60s
    count: 5
    successCondition: result[0] >= 0.50
    failureLimit: 3
    provider:
      prometheus:
        address: http://prometheus.istio-system:9090
        query: |
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}",response_code!~"5.*"}[5m]
          )) / 
          sum(irate(
            istio_requests_total{reporter="source",destination_service=~"{{args.service-name}}"}[5m]
          ))

vs-reviews-preview.yaml

kubectl apply -f vs-reviews-preview.yaml -n istio

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: rollout-bluegreen-preview
spec:
  gateways:
  - bookinfo-gateway
  hosts:
  - "*"
  http:
  - match:
    - queryParams:
        test:
          exact: test
    route:
    - destination:
        host: rollout-bluegreen-preview
        port:
          number: 9080
  - route:
    - destination:
        host: rollout-bluegreen-active
        port:
          number: 9080

svc-rollout-bluegreen-active.yaml

kubectl apply -f svc-rollout-bluegreen-active.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-active
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews

svc-rollout-bluegreen-preview.yaml

kubectl apply -f svc-rollout-bluegreen-preview.yaml -n istio

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-preview
spec:
  ports:
  - name: http
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: reviews
kubectl argo rollouts set  image reviews reviews=docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 -n istio

go-stress-testing -c 10 -n 1000000 -u http://192.168.229.134:30468/reviews/0?test=test

go-stress-testing -c 10 -n 1000000 -u http://192.168.229.134:30468/reviews/0

kubectl describe rollout reviews  -n istio
kubectl argo rollouts get rollout reviews --watch -n istio

Name:            reviews
Namespace:       istio
Status:          ◌ Progressing
Message:         updated replicas are still becoming available
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (stable, active)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 (preview)
Replicas:
  Desired:       2
  Current:       4
  Updated:       2
  Ready:         1
  Available:     1

NAME                                 KIND         STATUS         AGE    INFO
⟳ reviews                            Rollout      ◌ Progressing  4m16s  
├──# revision:2                                                         
│  ├──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy      3m     preview
│  │  ├──□ reviews-5895cfcd85-9k62f  Pod          ✔ Running      3m     ready:2/2
│  │  └──□ reviews-5895cfcd85-hmcln  Pod          ✔ Running      9s     ready:2/2
│  └──α reviews-5895cfcd85-2-pre     AnalysisRun  ✔ Successful   2m54s  ✔ 2,✖ 1
└──# revision:1                                                         
   └──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy      4m16s  stable,active
      ├──□ reviews-db897675d-sl8r9   Pod          ✔ Running      4m16s  ready:2/2
      └──□ reviews-db897675d-8qclp   Pod          ✔ Running      9s     ready:2/2
      
Name:            reviews
Namespace:       istio
Status:          ◌ Progressing
Message:         updated replicas are still becoming available
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (stable, active)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 (preview)
Replicas:
  Desired:       5
  Current:       10
  Updated:       5
  Ready:         3
  Available:     3

NAME                                 KIND         STATUS         AGE    INFO
⟳ reviews                            Rollout      ◌ Progressing  8m17s  
├──# revision:2                                                         
│  ├──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy      7m1s   preview
│  │  ├──□ reviews-5895cfcd85-9k62f  Pod          ✔ Running      7m1s   ready:2/2
│  │  ├──□ reviews-5895cfcd85-hmcln  Pod          ✔ Running      4m10s  ready:2/2
│  │  ├──□ reviews-5895cfcd85-84rfc  Pod          ✔ Running      106s   ready:2/2
│  │  ├──□ reviews-5895cfcd85-5hkzx  Pod          ✔ Running      39s    ready:2/2
│  │  └──□ reviews-5895cfcd85-jpf6w  Pod          ✔ Running      39s    ready:2/2
│  ├──α reviews-5895cfcd85-2-pre     AnalysisRun  ✔ Successful   6m55s  ✔ 2,✖ 1
│  └──α reviews-5895cfcd85-2-pre.1   AnalysisRun  ✔ Successful   3m33s  ✔ 2,⚠ 1
└──# revision:1                                                         
   └──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy      8m17s  stable,active
      ├──□ reviews-db897675d-sl8r9   Pod          ✔ Running      8m17s  ready:2/2
      ├──□ reviews-db897675d-8qclp   Pod          ✔ Running      4m10s  ready:2/2
      ├──□ reviews-db897675d-jnwh8   Pod          ✔ Running      108s   ready:2/2
      ├──□ reviews-db897675d-vgbxk   Pod          ✔ Running      40s    ready:2/2
      └──□ reviews-db897675d-l6m86   Pod          ✔ Running      39s    ready:2/2
      
Name:            reviews
Namespace:       istio
Status:          ◌ Progressing
Message:         waiting for analysis to complete
Strategy:        BlueGreen
Images:          docker.io/istio/examples-bookinfo-reviews-v1:1.16.2 (stable)
                 docker.io/istio/examples-bookinfo-reviews-v2:1.16.2 (active)
Replicas:
  Desired:       5
  Current:       10
  Updated:       5
  Ready:         5
  Available:     5

NAME                                 KIND         STATUS         AGE    INFO
⟳ reviews                            Rollout      ◌ Progressing  7m9s   
├──# revision:2                                                         
│  ├──⧉ reviews-5895cfcd85           ReplicaSet   ✔ Healthy      6m56s  active
│  │  ├──□ reviews-5895cfcd85-ss6wz  Pod          ✔ Running      6m55s  ready:2/2
│  │  ├──□ reviews-5895cfcd85-8gmr7  Pod          ✔ Running      6m54s  ready:2/2
│  │  ├──□ reviews-5895cfcd85-9jjjh  Pod          ✔ Running      6m54s  ready:2/2
│  │  ├──□ reviews-5895cfcd85-9pjgx  Pod          ✔ Running      6m54s  ready:2/2
│  │  └──□ reviews-5895cfcd85-ws2zd  Pod          ✔ Running      5m28s  ready:2/2
│  ├──α reviews-5895cfcd85-2-pre     AnalysisRun  ✔ Successful   6m20s  ✖ 1
│  ├──α reviews-5895cfcd85-2-pre.1   AnalysisRun  ✔ Successful   5m12s  ✔ 5
│  └──α reviews-5895cfcd85-2-post    AnalysisRun  ◌ Running      68s    ✔ 2
└──# revision:1                                                         
   └──⧉ reviews-db897675d            ReplicaSet   ✔ Healthy      7m9s   stable
      ├──□ reviews-db897675d-vtb9x   Pod          ✔ Running      7m9s   ready:2/2
      ├──□ reviews-db897675d-hkhwv   Pod          ✔ Running      6m56s  ready:2/2
      ├──□ reviews-db897675d-ltzzz   Pod          ✔ Running      6m56s  ready:2/2
      ├──□ reviews-db897675d-m5zvj   Pod          ✔ Running      6m56s  ready:2/2
      └──□ reviews-db897675d-lwcnw   Pod          ✔ Running      5m28s  ready:2/2

Events:
  Type    Reason                 Age    From                 Message
  ----    ------                 ----   ----                 -------
  Normal  RolloutUpdated         10m    rollouts-controller  Rollout updated to revision 1
  Normal  NewReplicaSetCreated   10m    rollouts-controller  Created ReplicaSet reviews-db897675d (revision 1)
  Normal  SwitchService          10m    rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from '' to 'db897675d'
  Normal  ScalingReplicaSet      10m    rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 1) from 0 to 1
  Normal  RolloutCompleted       10m    rollouts-controller  Rollout completed update to revision 1 (db897675d): Initial deploy
  Normal  SwitchService          10m    rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from '' to 'db897675d'
  Normal  ScalingReplicaSet      10m    rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 1) from 1 to 4
  Normal  RolloutUpdated         10m    rollouts-controller  Rollout updated to revision 2
  Normal  NewReplicaSetCreated   10m    rollouts-controller  Created ReplicaSet reviews-5895cfcd85 (revision 2)
  Normal  SwitchService          10m    rollouts-controller  Switched selector for service 'rollout-bluegreen-preview' from 'db897675d' to '5895cfcd85'
  Normal  ScalingReplicaSet      10m    rollouts-controller  Scaled up ReplicaSet reviews-5895cfcd85 (revision 2) from 0 to 4
  Normal  AnalysisRunRunning     10m    rollouts-controller  PrePromotion Analysis Run 'reviews-5895cfcd85-2-pre' Status New: 'Running' Previous: ''
  Normal  ScalingReplicaSet      9m10s  rollouts-controller  Scaled up ReplicaSet reviews-db897675d (revision 1) from 4 to 5
  Normal  ScalingReplicaSet      9m10s  rollouts-controller  Scaled up ReplicaSet reviews-5895cfcd85 (revision 2) from 4 to 5
  Normal  AnalysisRunRunning     8m53s  rollouts-controller  PrePromotion Analysis Run 'reviews-5895cfcd85-2-pre.1' Status New: 'Running' Previous: ''
  Normal  SwitchService          4m50s  rollouts-controller  Switched selector for service 'rollout-bluegreen-active' from 'db897675d' to '5895cfcd85'
  Normal  AnalysisRunSuccessful  4m50s  rollouts-controller  PrePromotion Analysis Run 'reviews-5895cfcd85-2-pre.1' Status New: 'Successful' Previous: 'Running'
  Normal  AnalysisRunRunning     4m49s  rollouts-controller  PostPromotion Analysis Run 'reviews-5895cfcd85-2-post' Status New: 'Running' Previous: ''
  Normal  AnalysisRunSuccessful  49s    rollouts-controller  PostPromotion Analysis Run 'reviews-5895cfcd85-2-post' Status New: 'Successful' Previous: 'Running'
  Normal  RolloutCompleted       49s    rollouts-controller  Rollout completed update to revision 2 (5895cfcd85): Completed blue-green update
  Normal  ScalingReplicaSet      19s    rollouts-controller  Scaled down ReplicaSet reviews-db897675d (revision 1) from 5 to 0

清理:

kubectl delete rollout reviews -n istio

kubectl delete svc -n istio rollout-bluegreen-active

kubectl delete svc -n istio rollout-bluegreen-preview

kubectl delete AnalysisTemplate success-rate -n istio

kubectl delete vs rollout-bluegreen-preview -n istio

kubectl delete hpa hpa-rollout -n istio