рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо k8s-рдореВрд▓ Argo рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

https://unsplash.com/photos/V41PulGL1z0

рдЗрд╕ рд╢реГрдВрдЦрд▓рд╛ рдХреЗ рд▓реЗрдЦ

рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди

рд╣рдореЗрдВ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрдврд╝реЗрдВрдЧреЗ рдкрд╣рд▓рд╛ рднрд╛рдЧ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреНрдпрд╛ рд╣реИрдВред рд╣рдордиреЗ рдпрд╣ рднреА рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдорд╛рдирдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреЗрд╢реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЖрд░рдбреА (рдХрд╕реНрдЯрдо рд░рд┐рд╕реЛрд░реНрд╕ рдбреЗрдлрд┐рдирд┐рд╢рди) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдПрдХ рдирдИ рдЗрдХрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Rollout, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдиреАрд▓реЗ-рд╣рд░реЗ рдФрд░ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред

рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯ рдирд┐рдпрдВрддреНрд░рдХ Rollout, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВ-рдЧреНрд░реАрди рдФрд░ рдХреИрдирд░реА рдЬреИрд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рддреИрдирд╛рддреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрди Rollout рд╕рдордХрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ Deployment, рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рддреИрдирд╛рддреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рд╕рдВрд╕рд╛рдзрди Deployments рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рджреЛ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ: RollingUpdate ╨╕ Recreate. рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпреЗ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдиреАрд▓рд╛-рд╣рд░рд╛ рдпрд╛ рдХреИрдирд░реА, рдЬреЛ рддреИрдирд╛рддреА рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЗрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреА рдкрдбрд╝рддреА рдереАред рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдЗрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд╕рд░рд▓, рдШреЛрд╖рдгрд╛рддреНрдордХ, рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
https://argoproj.github.io/argo-rollouts

рдЗрд╕рдореЗрдВ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рднреА рд╣реИ, рдЬреЛ рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред

рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

рд╣рдорд╛рд░реЗ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╢рд▓рдЬрдо рдореЗрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА install.yaml рдХреЛ i/k8s/argo-rollouts/install.yaml рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ GitlabCI рдЗрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджреЗрдЧрд╛ред

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб (kubectl рдкреНрд▓рдЧрдЗрди)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

рдЙрджрд╛рд╣рд░рдг рдЖрд╡реЗрджрди

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред

рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░

рдХрд┐рдо рд╡реБрдПрд╕реНрдЯрдХреИрдВрдк/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ Python+Flask API рд╣реИ рдЬреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рд╣рдо GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ Gitlab рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рднреЗрдЬреЗрдВрдЧреЗред рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ:

  • wuestkamp/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк:v1
  • wuestkamp/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк:v2

рдЙрдирдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рд▓реМрдЯрд╛рдИ рдЧрдИ JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрдерд╛рд╕рдВрднрд╡ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рднрдВрдбрд╛рд░

рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, .gitlab-ci.yml рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s    only:
     - master

рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЖрдк Gcloud рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

рдЖрдкрдХреЛ рдХрд╛рдВрдЯрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure рдФрд░ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ KUBECONFIG GitlabCI рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ kubectl рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП.

рдпрд╣рд╛рдВ рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ (рдЬреАрдХреНрд▓рд╛рдЙрдб) рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдпрдорд▓

рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рднрдВрдбрд╛рд░ рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛ рд╣реИ:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдЕрджреНрдпрддрди рд░рдгрдиреАрддрд┐ (рдпрд╣рд╛рдВ рдХреИрдирд░реА рдХреА рддрд░рд╣) рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реЛрд▓рд┐рдВрдЧ-рдЕрдкрдбреЗрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧреАред

рд╣рдо рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП yaml рдореЗрдВ рджреЛ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  1. рдХреИрдирд░реА рдХреЗ рд▓рд┐рдП 10% рдЯреНрд░реИрдлрд╝рд┐рдХ (рдореИрдиреБрдЕрд▓ рдУрдХреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ)
  2. рдХреИрдирд░реА рдХреЗ рд▓рд┐рдП 50% рдЯреНрд░реИрдлрд╝рд┐рдХ (2 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдлрд┐рд░ 100% рддрдХ рдЬрд╛рд░реА рд░рдЦреЗрдВ)

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдФрд░ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛

рдЪрд░рдг 1: 10% рдЯреНрд░реИрдлрд╝рд┐рдХ

рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рдЫрд╡рд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

рдФрд░ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП Gitlab CI рддреИрдирд╛рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрддреЗ рд╣реИрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдЕрдм рдпрджрд┐ рд╣рдо рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдорд╣рд╛рди! рд╣рдо рдЕрдкрдиреА рдХреИрдирд░реА рддреИрдирд╛рддреА рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд▓рд╛рдХрд░ рдкреНрд░рдЧрддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

kubectl argo rollouts get rollout rollout-canary

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдЪрд░рдг 2: 50% рдЯреНрд░реИрдлрд╝рд┐рдХ:

рдЕрдм рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ: 50% рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ред рд╣рдордиреЗ рдЗрд╕ рдЪрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ:

kubectl argo rollouts promote rollout-canary # continue to step 2

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдФрд░ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ 50% рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд▓реМрдЯрд╛рдИрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рд╕рдореАрдХреНрд╖рд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдареАрдХред

рдЪрд░рдг 3: 100% рдЯреНрд░реИрдлрд╝рд┐рдХ:

рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ 2 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж 50% рдЪрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 100% рдЪрд░рдг рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдЙрдЯрдкреБрдЯ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рд╕рдореАрдХреНрд╖рд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #2 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕

рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреВрд░реНрдг рд╣реЛ рдЧрдпрд╛ рд╣реИ.

рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг

рдпрд╣рд╛рдВ рдФрд░ рднреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреИрдирд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рддреБрд▓рдирд╛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ:

https://github.com/argoproj/argo-rollouts/tree/master/examples

рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдФрд░ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдФрд░ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

рд╕рдВрдкреВрд░реНрдг

рдореБрдЭреЗ рд╕реАрдЖрд░рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рддреИрдирд╛рддреА рдпрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ, рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реБрдЪрд╛рд░реБ рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ. рдЖрдЧреЗ рдореИрдВ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рдФрд░ рдлреНрд▓рдХреНрд╕ рд╕реАрдЖрдИ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд▓рдп рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдЖрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ: рдЖрд░реНрдЧреЛ рдлреНрд▓рдХреНрд╕.

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдпрд╛ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрднрд╡ рд╣реИ?

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рднреА рдкрдврд╝реЗрдВ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ