Refactor canary analysis

- move CRD metrics and weight setting to canary analysis
- add max weight to CRD spec
This commit is contained in:
Stefan Prodan
2018-09-29 11:08:40 +03:00
parent 6143ebce48
commit 7993ae100b
18 changed files with 175 additions and 96 deletions
+20 -14
View File
@@ -2,6 +2,8 @@
# run tester: kubectl run -n test tester --image=quay.io/stefanprodan/podinfo:1.2.1 -- ./podinfo --port=9898
# generate latency: watch curl http://podinfo-canary:9898/delay/1
# generate errors: watch curl http://podinfo-canary:9898/status/500
# run load test: kubectl run -n test -it --rm --restart=Never hey --image=stefanprodan/loadtest -- sh
# generate load: hey -z 2m -h2 -m POST -d '{test: 1}' -c 10 -q 5 http://podinfo:9898/api/echo
apiVersion: apps.weave.works/v1beta1
kind: Rollout
metadata:
@@ -12,25 +14,29 @@ metadata:
namespace: test
spec:
targetKind: Deployment
virtualService:
name: podinfo
primary:
name: podinfo
host: podinfo
canary:
name: podinfo-canary
host: podinfo-canary
virtualService:
name: podinfo
canaryAnalysis:
# max traffic percentage routed to canary
# percentage (0-100)
maxWeight: 100
# canary increment step
# percentage (0-100)
weight: 10
metrics:
- name: istio_requests_total
# minimum req success rate (non 5xx responses)
# percentage (0-100)
threshold: 99
interval: 1m
- name: istio_request_duration_seconds_bucket
# maximum req duration P99
# milliseconds
threshold: 500
interval: 1m
stepWeight: 10
metrics:
- name: istio_requests_total
# minimum req success rate (non 5xx responses)
# percentage (0-100)
threshold: 99
interval: 1m
- name: istio_request_duration_seconds_bucket
# maximum req duration P99
# milliseconds
threshold: 500
interval: 30s
+26 -17
View File
@@ -21,10 +21,18 @@ spec:
properties:
spec:
required:
- targetKind
- virtualService
- primary
- canary
- virtualService
- canaryAnalysis
properties:
targetKind:
type: string
virtualService:
properties:
name:
type: string
primary:
properties:
name:
@@ -37,22 +45,23 @@ spec:
type: string
host:
type: string
virtualService:
canaryAnalysis:
properties:
name:
type: string
weight:
maxWeight:
type: number
metrics:
type: array
properties:
items:
type: object
stepWeight:
type: number
metrics:
type: array
properties:
name:
type: string
interval:
type: string
pattern: "^[0-9]+(m)"
threshold:
type: number
items:
type: object
properties:
name:
type: string
interval:
type: string
pattern: "^[0-9]+(m)"
threshold:
type: number
+1 -1
View File
@@ -22,7 +22,7 @@ spec:
serviceAccountName: steerer
containers:
- name: steerer
image: stefanprodan/steerer:0.0.1-beta.12
image: stefanprodan/steerer:0.0.1-rc.1
imagePullPolicy: Always
ports:
- name: http
+2 -2
View File
@@ -57,7 +57,7 @@ spec:
- http
- localhost:9898/readyz
failureThreshold: 3
periodSeconds: 10
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 2
resources:
@@ -65,7 +65,7 @@ spec:
cpu: 1000m
memory: 256Mi
requests:
cpu: 10m
cpu: 100m
memory: 16Mi
volumeMounts:
- mountPath: /data
+10 -8
View File
@@ -3,16 +3,13 @@ kind: Deployment
metadata:
name: podinfo
namespace: test
annotations:
apps.weave.works/progressive: "true"
labels:
app: podinfo
spec:
replicas: 2
replicas: 1
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 1
maxUnavailable: 0
type: RollingUpdate
selector:
matchLabels:
@@ -48,6 +45,7 @@ spec:
- check
- http
- localhost:9898/healthz
initialDelaySeconds: 5
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
@@ -59,11 +57,15 @@ spec:
- check
- http
- localhost:9898/readyz
initialDelaySeconds: 5
failureThreshold: 3
periodSeconds: 10
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 2000m
memory: 512Mi
requests:
cpu: 1m
memory: 16Mi
cpu: 10m
memory: 64Mi
+2
View File
@@ -14,6 +14,8 @@ spec:
- type: Resource
resource:
name: cpu
# scale up if usage is above
# 99% of the requested CPU (100m)
targetAverageUtilization: 99
- type: Resource
resource:
+19
View File
@@ -0,0 +1,19 @@
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: podinfo
namespace: test
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
minReplicas: 2
maxReplicas: 4
metrics:
- type: Resource
resource:
name: cpu
# scale up if usage is above
# 99% of the requested CPU (100m)
targetAverageUtilization: 99
+6 -6
View File
@@ -1,13 +1,10 @@
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
annotations:
apps.weave.works/progressive-revision: ""
apps.weave.works/progressive-status: ""
labels:
app: podinfo
name: podinfo
namespace: test
labels:
app: podinfo
spec:
gateways:
- public-gateway.istio-system.svc.cluster.local
@@ -26,4 +23,7 @@ spec:
port:
number: 9898
weight: 0
timeout: 30s
timeout: 10s
retries:
attempts: 3
perTryTimeout: 2s