StackSets Simplifying application management in Kubernetes
如果无法正常显示,请先停止浏览器的去广告插件。
        
                相关话题:
                                    #zalando
                            
                        
                1. StackSets
Simplifying application
management in Kubernetes
ScaleUp 360°
November 28th 2019
MIKKEL LARSEN
@mikkeloscar
2019-11-28            
                        
                2. $ whoami
Mikkel Larsen
Software Engineer
Cloud Infrastructure (Kubernetes/AWS)
@ Zalando SE
@mikkeloscar
2
@mikkeloscar            
                        
                3. “EUROPE’S LEADING ONLINE FASHION PLATFORM”
3            
                        
                4. WE BRING FASHION TO PEOPLE IN 17 COUNTRIES
17 markets
7 fulfillment centers
26 million active customers
5.4 billion € revenue 2018
250 million visits per month
15,000 employees in Europe
4            
                        
                5. DEPLOYING TO PRODUCTION
https://my-application.io
My Application v1
5            
                        
                6. DEPLOYING TO PRODUCTION
6
https://my-application.io https://preview-v2.my-application.io
My Application v1 My Application v2            
                        
                7. DEPLOYING TO PRODUCTION (BLUE/GREEN)
7
https://my-application.io https://preview-v2.my-application.io
My Application v1 My Application v2            
                        
                8. DEPLOYING TO PRODUCTION (TRAFFIC SWITCHING)
https://my-application.io
https://preview-v2.my-application.io
1%
99%
My Application v1
8
My Application v2            
                        
                9. DEPLOYING TO PRODUCTION (TRAFFIC SWITCHING)
https://my-application.io
https://preview-v2.my-application.io
10%
90%
My Application v1
9
My Application v2            
                        
                10. DEPLOYING TO PRODUCTION (TRAFFIC SWITCHING)
https://my-application.io
https://preview-v2.my-application.io
50%
50%
My Application v1
10
My Application v2            
                        
                11. DEPLOYING TO PRODUCTION (TRAFFIC SWITCHING)
https://my-application.io
https://preview-v2.my-application.io
100%
0%
My Application v1
11
My Application v2            
                        
                12. APPLICATION STACK IN KUBERNETES
Ingress resource
name: app-1
Service resource
Deployment resource
labels:
application: app-1
12            
                        
                13. TRAFFIC SWITCHING
ROLLING UPDATE DEPLOYMENT
100%
Blue: 75%
Green: 25%
deployment
13            
                        
                14. TRAFFIC SWITCHING
ROLLING UPDATE DEPLOYMENT
100%
Blue: 99%
Green: 1%
deployment
14            
                        
                15. SKIPPER TRAFFIC SUPPORT
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app
annotations:
zalando.org/backend-weights: |
{"my-app-v1": 90, "my-app-v2": 10}
spec:
rules:
- host: my-app.io
...
github.com/zalando/skipper
15            
                        
                16. MANUAL TRAFFIC SWITCHING
BLUE/GREEN DEPLOYMENT
IngressTemplate
80%
service-v1
deployment-v1
16
20%
service-v2
deployment-v2            
                        
                17. MANUAL TRAFFIC SWITCHING
BLUE/GREEN DEPLOYMENT
IngressTemplate
Need to clean up resources
manually :’(
0%
service-v1
deployment-v1
17
100%
service-v2
deployment-v2            
                        
                18. TRAFFIC SWITCHING
BLUE/GREEN DEPLOYMENT (StackSet)
80%
stack: v1
18
20%
stack: v2            
                        
                19. STACKSET DEFINITION
apiVersion: zalando.org/v1
kind: StackSet
metadata:
name: my-app
spec:
ingress:
host: [my-application.io]
stackTemplate:
spec:
version: v1
podTemplate:
spec:
containers:
...
github.com/zalando-incubator/stackset-controller
19            
                        
                20. DEMO
20            
                        
                21. ADDITIONAL FEATURES
21            
                        
                22. PRESCALE STACKS
100%
HPA:
minReplicas: 3
maxReplicas: 30
stack: v2
stack: v1
22
0%            
                        
                23. PRESCALE STACKS
0%
HPA:
minReplicas: 3
maxReplicas: 30
stack: v2
stack: v1
23
100%            
                        
                24. PRESCALE STACKS
Desired: 0%
Actual: 100%
HPA:
minReplicas: 3
maxReplicas: 30
stack: v2
stack: v1
24
Desired: 100%
Actual: 0%            
                        
                25. PRESCALE STACKS
Desired: 0%
Actual: 100%
Desired: 100%
Actual: 0%
HPA:
minReplicas: 3
maxReplicas: 30
stack: v1
25
stack: v2            
                        
                26. PRESCALE STACKS
Desired: 0%
Actual: 0%
stack: v1
26
Desired: 100%
Actual: 100%
stack: v2            
                        
                27. GRADUAL DEPLOYMENTS
(AUTOMATIC TRAFFIC SWITCHING)
27            
                        
                28. INTEGRATE WITH APPLICATION METRICS
28            
                        
                29. GRADUAL DEPLOYMENTS
Desired: 100%
Actual: 100%
stack: v1
29
Desired: 0%
Actual: 0%
stack: v2            
                        
                30. GRADUAL DEPLOYMENTS
Desired: 0%
Actual: 0%
Desired: 100%
Actual: 100%
stack: v1
30
stack: v1’
(baseline stack)
stack: v2            
                        
                31. GRADUAL DEPLOYMENTS
Desired: 1%
Actual: 1%
Desired: 98%
Actual: 98%
stack: v1
stack: v1’
(baseline stack)
stack: v2
Observe metrics for the two stacks
31            
                        
                32. GRADUAL DEPLOYMENTS
Desired: 10%
Actual: 10%
Desired: 80%
Actual: 80%
stack: v1
stack: v1’
(baseline stack)
stack: v2
Observe metrics for the two stacks
32            
                        
                33. GRADUAL DEPLOYMENTS
Desired: 10%
Actual: 10%
Desired: 80%
Actual: 80%
stack: v1
stack: v1’
(baseline stack)
stack: v2
Observe metrics for the two stacks
33            
                        
                34. GRADUAL DEPLOYMENTS
Desired: 0%
Actual: 0%
Desired: 100%
Actual: 100%
stack: v1
stack: v1’
(baseline stack)
stack: v2
!DEPLOYMENT FAILED!
34            
                        
                35. OPEN SOURCE
StackSet Controller
github.com/zalando-incubator/stackset-controller
AWS ALB Ingress controller
github.com/zalando-incubator/kube-ingress-aws-controller
Skipper HTTP Router & Ingress controller
github.com/zalando/skipper
External DNS
github.com/kubernetes-incubator/external-dns
35            
                        
                36. MIKKEL LARSEN
SENIOR SOFTWARE ENGINEER
PLATFORM INFRASTRUCTURE
mikkel.larsen@zalando.de
@mikkeloscar
Illustrations by @01k, @kcgreenn, @ntakayama
2019-11-28