α αααΆα ααΆαααααααα αα·αααααΆαααΌαα αααααΈ Weaveworks ααααΆαα’αααΈαα»αααααΆαααααααΆααα±ααααααΎααααΆαααααααα·ααΈααααα·αααααα»α αα·ααααα αΆαααΈααααααααααααα·ααΈααααα·αααααααααα»αα’αΆα ααααΌαααΆαα’αα»αααααααααααΎααααα·ααααα·αα Kubernetes Flagger α ααΆααααΌαααΆααααααααΆααΆααΆααΆαααα αα·αααΆαααααΆααααΆααααααΎαααΎααααα’αα»ααααΆαα±ααααΌααααΈαααα·αααααααααΈαααααα’αΆα αααααΈαααα αΆαααααΆαα
ααααΆααααΆαααααΌαααΆαααα
ααααΈ
αααα αΆααααααααααααα»ααα½ααααα»αααΆαα’αα·αααααααααααα·ααΈααΎαααΎαααααααααααααα ααΊααΆααααααΎαααααΏαααααΆαααΆααα±ααααααΎααααΆααα αα αααα»ααα·ααΈααΆαααααααΈααααΌααααΆ α’αααα’αα·ααααααααΆαααααΎααΆαααΆαα½α αα·ααα ααΆαααααα·ααΈαααΌαα»αααΆαααααα»ααα½α α αΎα αααα’αα»ααααΆαα±αααααα»ααααααααααααααΌααααα»ααααααααΆαααααΆ αα·αααααΎααΆαααααΆααααααΌααααααα·ααΈα
ααΆαααΆαααααααΆαααααααααααΈ αα·αααΉαααΆααααΆααα»α ααΆαα’αααααααααααααΌα ααΆααααααα
- αααααααΆαα ααΈααααΆαααααΌαααΆαααΆαααααααα
- αα»αααΆαααααΈαα αααα’αααααααΎααααΆααααΏαααΆααα»αα
- ααα·ααααα’αααααααΎααααΆαααα ααααααα»αα’αα·ααααααααΏαααΆααα»αα αααααΆααααααΆαααα»αα’αΆα αααααααα»αααΆα αα·ααααααααΆααααα αΆααΆαααΏαααΆααα»αα
- ααΈααααααααα’αααα’αα·ααααααααΎαα‘αΎαα αααααααα·αααααΆααααα αααΎααααα»αααΆαα’αα·ααααααααΊααΆααααααΈαααΆααααα»αααΆαααααΎααΆαααΆαα½αα
ααα»αααααα
ααααααααΆαααΉαααΆααααααΆαα
ααααααΆαααΎαα‘αΎα α±ααΆααααααααααΆααα’αα·αααααΆαααΎααΆαααΏααΆαααααααααααα·ααΈ α¬αααα·αααααα’αααααααΎααααΆααααααΎαα‘αΎααααααα αααα αΎαααΆααΌαα ααα»αααααΆααΆαααΆααααααΆαααααααΆααααααα·ααααα·ααΆα αα·ααααα»α DevOps ααΎααααΈαααααΎαααααΎαααΆα αα·αααααααααααα»αααααΆαααααααΆααα±ααααααΎααααΆααααΆααααααααααΆαααααααα αΆαα·ααααααααα·ααα αα·αα’αααααααΎααααΆααα (α’αααα’αΆα
ααααααααααααααα’αααΈααααααααααααα·ααααααααα CI/CD
αα αααα»αααΆααααα ααααα ααΎαααΉααα·ααΆααααΆα’αααΈαα»αααααΆαααααααΆαααααααΆααααααααα αααα»α Kubernetes αα½αααΆααααΆαααΆαααααααΆααααα·α αα·ααα·ααΈααΆαααααααααα·αααααααααααααααααΌα ααΆααΆαααΆααα±ααααααΎαααΆα Canary αα·αααΆααααααααα½αααααααΆα
αα»αααααΆαααααααΆαααααααΆα
ααΆααα»αααααΆαααααααΆαααααααΆαααααααααααααααααΆααΆα αααΎα αααα’αααα’αΆα ααααΎα’αΆαααααααΎααααα ααααα’αααα ααΆα§ααΆα ααα α’ααααααα ααααΆααααΌαααααΎααΆαααααΆααααααΌαα ααααααα·ααααΆαααΆααααΆαααα½ααααααΆααααΆαααααΎααααααααααα α¬α αααααααα»αα’αααααααΎααααΆαα/α’αα·αα·αα α¬α’ααααααα ααααΆααααΌαααααΎααΆαααΆαααααα’αααααααΎααααΆαααααααΆαααααα·ααα»αααααααααΎααα»αααΆααα½αα ααΆααΆααα.
αααα·α (ααΆαααΆαααααααΆα "αααα·α" ααααα·α ααααα)
αααααΊααΆαα»αααααΆαααααααΆαααααααΆααααααααΆααα αααα»α Kubernetes α ααΆααααα·α ααααα αααααα½αα αααα½ααααααααΆαα½αααΉαααααα αΆαααααααααα·ααΈααΆαα½ααααααααΆαα½αααΉαααααααααΈ - αααααααΆαααααααααααΆα αααααα
Kubernetes αααα
αΆααα αΌααααααααααΈαα½α
ααΆααααΎααααΈααααΎαααΆα (αα·αα·αααααΎααα½αααΆαααααααΎ
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: awesomeapp
spec:
replicas: 3
template:
metadata:
labels:
app: awesomeapp
spec:
containers:
- name: awesomeapp
image: imagerepo-user/awesomeapp:new
ports:
- containerPort: 8080
αααΆαααΆααααααααααΎαα αα α»ααααααααΆααα·ααα»αα’αΆα ααααΌαααΆααααααΆαααα αααα»αα―αααΆα manifestα
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
...
αααααΎαα‘αΎααα·α
αα αααα»αααααααααααΆαααΆαααααααΆαααααΆαααααααα»αααα ααα αΆααααααΌαααΆααααααΆααααααΆαα α αΎααααα½ααααααααααααΈα
ααΆααααα αΆααααααααΌαααααΆααΎααα
ααΌα
αααα
spec:
replicas: 3
strategy:
type: Recreate
template:
...
ααα/αααα (ααΆαααΆαααααααΆααααααααααα)
αα»αααααΆαααααααΆαααααααΆααααααααααα (αα½αααΆαααα α ααΆαααα α/αααα ) ααΆαααααααααΉαααΆαααΆαααααααΆααααα»ααααααααΆαααααΆααααααα αΆαα (αααα) αα·αααααΈ (ααα) αααααααα·ααΈα αααααΆααααΈααΆααααα ααααααααΆααααΈα α’αααααααΎααααΆααααααααΆα’αΆα α αΌααα ααΆααααααααα ααααααααααααααΊα’αΆα ααααΆααααααΆαααααα»α QA ααΎααααΈααααΎααΆαααααΎααααααααααααααααααααα·ααΆααααααααΆααααααΆα ααααα‘αα α¬ααΆααααααΌαααααα ααααααααααΆααα
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: awesomeapp-02
spec:
template:
metadata:
labels:
app: awesomeapp
version: "02"
αααααΆααααΈαααααααααα (ααααΈ) ααααΌαααΆαααΆααααα α αΎαααΆαα ααααααΆαααααααΆααααΌαααΆαααααααα ααααΆααααααααΌααα ααΆ α αΎαααααααααααα (α αΆαα) ααααΌαααΆααααα
apiVersion: v1
kind: Service
metadata:
name: awesomeapp
spec:
selector:
app: awesomeapp
version: "02"
...
Canary (ααΆαααΆαααααααΆα Canary)
Canary rollouts ααΊαααααααα
ααΉαααΆαα
αααααααααααα ααα»ααααααΆαααΆαααααααααα αα·αααααΎααααΆααααΆααααααΎαααΆα
αα»αααααΆααααααααααααΌαααΆαααααΎαα ααααααααΆααααααΌαααΆαααΆααααααα»αααΆαααααΈαα½αα ααα½α αααααΆααααααΆαα αααα»ααααααααΆαααααααααααααα·ααΈα ααααΉαααΆααααα·ααΈααΆαααααααΊαααααΎααααΆαααΈαααααΈααααααααΎαααααΌα ααααΆααααα·αα αα½ααααααΎα’αααααααΎααααΆααααααΎαααααΆααα’αα α αΎααα½ααααααΆααα»αααΆαααααΈ αααααΎα’αααααααΎααααΆαααααααα»αααααΌα αα½αααα»ααααα αααααΆααααααααααααααΆαααΆααααααα½αααααααΌαααΆαααααααααα ααααα·αααΎα’αααΈαααααΎαααΆααα ααααα·αααΆαααα α»α ααααααααΈααααΌαααΆααααα ααααΆαααααΎαααα ααΆααα αααααΆαα ααΆααααααααααΆααααΌαα
αααααΈααΆαα»αααααΆααααααααα’αΆα ααααΌαααΆαα’αα»ααααααΆαααααα»ααααααααΎ Kubernetes ααααααα½αααα αΆααααΆαα½αααΉαααααααααΈααααα ααΆααΆααααααΆααααα½α αα·αααΆααααααΆααααα»αααΆαααααΎααααΆααααααΆααααααΌα ααΆ Istio α
α§ααΆα ααα α’ααααααα ααααΆααΆα manifest ααΈααααααααααΆαα αααα»α Gitα manifest ααααααΆααΆαα½α tag 0.1.0 αα·α canary manifest ααΆαα½α tag 0.2.0α ααΆααααααΆαααααΆααααααΌααααααααα αααα»αααΆααααα αΆαα αααααααΌααα·αααα·α Istio α’αααα’αΆα αααααααααααΆαα ααα αΆαα ααΆα ααααααΆαααΆαααΆαααααααΆαααΆααααΈααααα
αααααΆααααΆαααααΆαααΆααα αΆα α ααΎααααΈα’αα»ααααααΆαααΆαααααααΆα Canary αααααααΎ Istio ααΌαααΎα
ααΆαααΆαααααααΆα Canary ααΆαα½α Weaveworks Flagger
Flagger ααααααααααααα·ααααΎαααΆαααΆαα½ααα½αααα ααΆααααΎ Istio α¬ AWS App Mesh ααΎααααΈαααααΌα αα·αααααΌαα ααΆα ααα αα·ααααααα Prometheus ααΎααααΈαα·ααΆαααααααα ααΎαααΈααα ααΆααα·ααΆαααΎααΆαααΆαααααααΆα Canary α’αΆα ααααΌαααΆαααααααααα webhooks ααΎααααΈααααΎαααααααΆαααα½ααα ααΆαααααΎααααααααα»α αα·αααααααααααααααααααΆααααα½ααα·αα·αααα
ααα’ααααΎααΆαααΆαααααααΆα Kubernetes α αΎαααααα·αααΎα αΆαααΆα α ααΆαααααΎααΆαααααααΆαααααααααα (HPA) Flagger αααααΎααααα»αααααααα» (ααΆαααΆαααααααΆα Kubernetes ααααΆ ClusterIP αα·α Istio α¬ααααΆαααααα·αααα·α App Mesh) ααΎααααΈαα·ααΆα αα·αα’αα»ααααααΆαααΆαααααααΆα Canaryα
ααΆαα’αα»ααααααααα·ααα»ααααα½ααα·αα·ααα (ααααα·ααα»ααααα½ααα·αα·ααα),Flagger ααααΆααααααΌαα
ααΆα
αααααααα·α
ααααααα
ααΆαααααΆαααΈααα Canary ααααααααααααα»αααΆαααααααααΌαααΌα
ααΆααααααΆαααααΌα
ααΆααΆαααααααααΎ HTTP αααααα½αααΆααααααα ααααααααααΎαα»αααΆααααα αα·ααα»αααΆααααα pod α αααααα’ααααΎααΆααα·ααΆα KPI (ααΌα
ααΆααααΆαα’αα»ααααααααΆααα) Canary ααΌαααΆααα¬αα½ααααα αΎαααααααααααΆααα·ααΆαααααΌαααΆαααααα»αααααααΆααα
αααα»α Slack α ααΆααα·αααααΆ αα·αααΆααααα αΆαααααααΎαααΆααααα’αΆα
ααααΌαααΆαααααΎααα
αααα»ααααααΆαα
αααΉα (ααΆαα) α¬ααΆαααΆαααααααΆα A/B
ααΆαααΆαααααααΆαααααΆααααΆαααΊααΆαααααααα½ααα½ααααααααααααα»αααααΆααααα Canary (αααααΆααα·ααΈααα Flagger ααα’αΆα ααααΎααΆαααΆαα½αααααα) α ααΆααα»αααααΆαααΆαααΆαααα‘αΎαααααΆααααΆα αα·αααΆαααΆαααααααΆα Canary ααΊααΆ ααΆαααΆαααααααΆαααααΆααααΆααααααααΆαααΆαα½ααααααααΆααα»αααΆααΆααααααααΆααααααααΌα ααΆααΆαααΆαααααααΆα Canary α
ααααααααααααααααααΆααααΆαααΆαααααααΆαααΆαααααααΊααΆαααααΎααααα A/B α αααα½αα±ααααΆαααααΎα±αααα»αααΆαααααΈααΆααααααΆααα’αααααααΎααααΆααααΆααα’αα ααΆααααΌαααΆααααααααΌααααααΆααααααααααααααΆααααααααα»αααααα ααΆααααααΆ α’αααααααΎααααΆααααΆααααααα·αααΉαααΆαα½αααααΆα’αααααΆααααααααα½αααααΆααα (α ααα»ααΌα ααααα αΎαααΆαααΆααΆαααααΆ "ααΆαααΆαααααααΆαααααΆααααΆα")α
ααΆαααααΎααααΆααα§αααααααααΌααα»αααΆα (αα»αααΆααα·αααΎα) αα·αα§ααααααααααααα α’αααα’αΆα ααΆαααΆαααΈαααααααα’αααααααΎααααΆααααααΎα’ααααααααααΆαα½ααα»αααΆαααααΈααα ααΆααΎαα½αααααααΌαααΆαααααΆαααααααΆ α¬ααΆααΎαα½αααααααΎαα ααα»α αααααΆααα’αααααααΎααααΈα ααααΌαα ααααα αα·αααααααααααααααααααααα
ααΆαααΆαααααααΆα Flagger αα·α A/B
ααααααααΈααΎααΆαααΆαααααΌααααααα’ααααΎαααααα Flagger ααα’αΆα αααααΌαα ααΆα ααα ααΆαααααΆαααΈααα Canary αααααα’ααααΎαααΆαααΆαααααα HTTP αααααα αα αααα»αααΆαααααΎααααα A/B α’αααα’αΆα ααααΎααααααΆ HTTP α¬ααΌααΈααΎααααΈαααααααααα αααααααΆααααΆααααα’αααααααΎααααΆααα αααααΆαααααα·αααααΆαααΆαα·ααααα αααα»αααααΈαααααααα·ααΈ frontend αααααΆαααΆα session binding αα server (ααΆααααα·αααααααΆααααα). ααααααΆαααααααα’αΆα ααααΆααα αααα»αα―αααΆα Flagger α
α’ααααα·αααααααα αΆαααΈααΆαααΉααα»α
PS ααΈα’ααααααααα
ααΌαα’αΆαααααααα ααΎαααααααααααΎαα
- Β«
αα·αααααΆαααΌαα αα·αααΆαααααααααα§ααααααααααΆ Ingress αααααΆαα Kubernetes Β» - Β«
werf - α§αααααααααααΎααααααΆαα CI / CD αα αααα»α Kubernetes (αα·αααααΆαααΌαα αα·ααααΆαααΆαααααΈααα’αΌ) Β» - Β«
αααααΎα αα·αααααΎααααΆααααααΆααααααααΆαααΌα αααααΆαααααααααΌα ααααΆααΆαα½α werf αα·α GitLab CI Β» - Β«
ααΎ GitOps ααΆα’αααΈ? "α
ααααα: www.habr.com