рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

Kubernetes рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА Gitlab CI рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓ GitOps рд╡рд╛рдкрд░реВ.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рд▓реЗрдЦ:

рдЖрдореНрд╣реА GitOps рджреНрд╡рд╛рд░реЗ рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди рд╕реНрд╡рд╣рд╕реНрддреЗ рдХрд░реВ рдЖрдгрд┐ рдореБрдЦреНрдп Kubernetes рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░/рд╕реБрдзрд╛рд░рд┐рдд рдХрд░реВ. рд╣рд╛ рд▓реЗрдЦ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдкрд░рд┐рдЪрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреЕрдирд░реАрдордзреНрдпреЗ рдЙрдкрдпреЛрдЬрди рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдХрд╛рд░рдг рдСрдЯреЛрдореЗрд╢рдирдЪреНрдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдкрджреНрдзрддреА рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдВрдЪрд╛ рдЖрдкрдг рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.


рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

https://www.norberteder.com/canary-deployment/

рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди

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

Kubernetes рддреИрдирд╛рддреА (рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ)

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

GitOps

рдЖрдореНрд╣реА рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд GitOps рд╡рд╛рдкрд░рддреЛ рдХрд╛рд░рдг рдЖрдореНрд╣реА:

  • рд╕рддреНрдпрд╛рдЪрд╛ рдПрдХ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди Git рд╡рд╛рдкрд░рдгреЗ
  • рдЖрдореНрд╣реА рдмрд┐рд▓реНрдб рдЖрдгрд┐ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╛рдареА рдЧрд┐рдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╡рд╛рдкрд░рддреЛ (рдЧрд┐рдЯ рдЯреЕрдЧ/рдорд░реНрдЬ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдХреЛрдгрддреНрдпрд╛рд╣реА рдХрдорд╛рдВрдбрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА)

рдЙрджрд╛рд╣рд░рдг:

рдЪрд▓рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рд╕рд░рд╛рд╡ рдХрд░реВ - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрд╕рд╛рдареА рдПрдХ рднрд╛рдВрдбрд╛рд░ рдЖрдгрд┐ рдПрдХ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╛рдареА.

рдЕрд░реНрдЬ рднрд╛рдВрдбрд╛рд░

рд╣рд╛ рдПрдХ рдЕрддрд┐рд╢рдп рд╕реЛрдкрд╛ рдкрд╛рдпрдерди + рдлреНрд▓рд╛рд╕реНрдХ API рдЖрд╣реЗ рдЬреЛ JSON рдореНрд╣рдгреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЛ. рдЖрдореНрд╣реА GitlabCI рджреНрд╡рд╛рд░реЗ рдкреЕрдХреЗрдЬ рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ Gitlab рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдХрдбреЗ рдкрд╛рдард╡реВ. рд░реЗрдЬрд┐рд╕реНрдЯреНрд░реАрдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рднрд┐рдиреНрди рд░рд┐рд▓реАрдЭ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

рддреНрдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдлрд░рдХ рдореНрд╣рдгрдЬреЗ рдкрд░рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ JSON рдлрд╛рдЗрд▓рдордзреАрд▓ рдмрджрд▓. рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛ рдЖрд╡реГрддреНрддреАрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдд рдЖрд╣реЛрдд рддреЗ рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд╕рд╣рдЬрддреЗрдиреЗ рджреГрд╢реНрдпрдорд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╣рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░рддреЛ.

рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рднрд╛рдВрдбрд╛рд░

рдпрд╛ рд╕рд▓рдЧрдо рдирд╛рд╡рд╛рдиреЗ рдЖрдореНрд╣реА рдЧрд┐рдЯрд▓реЕрдмрд╕реАрдЖрдп рдорд╛рд░реНрдЧреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкрд░реНрдпрдВрдд рддреИрдирд╛рдд рдХрд░реВ, .gitlab-ci.yml рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

deploy 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 рддреБрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛.

рдХреНрд▓рд╕реНрдЯрд░ (GCloud) рд╕рд╛рдареА рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ рдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдпреЗрдереЗ.

рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдпрд╛рдорд▓

рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕реЗрд╡рд╛ рдЖрд╣реЗ:

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

рдЖрдгрд┐ рдордзреНрдпреЗ рддреИрдирд╛рдд deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

рдЖрдгрд┐ рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рддреИрдирд╛рддреА deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЕреЕрдк-рдбрд┐рдкреНрд▓реЙрдпрдордзреНрдпреЗ рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреАрд╣реА рдкреНрд░рддрд┐рдХреГрддреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реА.

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдирд╛рддреА рдХрд░рдд рдЖрд╣реЗ

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрдкрдпреЛрдЬрди рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦреЗрд╡рд░ GitlabCI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЕрдиреНрдпреБрдЕрд▓реА рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. рддреНрдпрд╛рдирдВрддрд░ kubectl рдЦрд╛рд▓реАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд╣рд┐рдЬреЗ:

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рдЖрдореНрд╣реА рддреЗ рдкрд╛рд╣реВ app 10 рдкреНрд░рддрд┐рдХреГрддреА рдЖрдгрд┐ 0 рд╕рд╣ рдЕреЕрдк-рдХреЕрдирд░реА рддреИрдирд╛рдд. рдПрдХ рд▓реЛрдбрдмреЕрд▓рдиреНрд╕рд░ рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдЬреНрдпрд╛рддреВрди рдЖрдореНрд╣реА рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддреЛ curl рдмрд╛рд╣реНрдп IP рджреНрд╡рд╛рд░реЗ:

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рдЖрдореНрд╣реА рдкрд╛рд╣рддреЛ рдХреА рдЖрдордЪрд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ рдлрдХреНрдд "v1" рдкрд░рдд рдХрд░рддреЛ.

рдХреЕрдирд░реА рддреИрдирд╛рддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ

рдкрд╛рдпрд░реА 1: рдХрд╛рд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд░рд┐рд▓реАрдЬ рдХрд░рд╛

рдЖрдореНрд╣реА deploy-canary.yaml рдлрд╛рдЗрд▓ рдЖрдгрд┐ рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЗрдореЗрдЬрдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 1 рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА рдЖрд╣реЗ:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

рдлрд╛рдИрд▓рдордзреНрдпреЗ deploy.yaml рдЖрдореНрд╣реА рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 9 рд╡рд░ рдмрджрд▓рд▓реА:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

рдЖрдореНрд╣реА рд╣реЗ рдмрджрд▓ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреНрдпреЗ рдврдХрд▓рддреЛ рдЬрд┐рдереВрди рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реБрд░реВ рд╣реЛрдИрд▓ (GitlabCI рдорд╛рд░реНрдЧреЗ) рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рдкрд╣рд╛:

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рдЖрдордЪреА рд╕реЗрд╡рд╛ рджреЛрдиреНрд╣реА рдЙрдкрдпреЛрдЬрдирд╛рдВрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реЗрд▓, рдХрд╛рд░рдг рджреЛрдиреНрд╣реАрдХрдбреЗ рдЕреЕрдк рдирд┐рд╡рдбрдХ рдЖрд╣реЗ. Kubernetes рдЪреНрдпрд╛ рдбреАрдлреЙрд▓реНрдЯ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрд░рдгрд╛рдореБрд│реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ ~10% рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рднрд┐рдиреНрди рдкреНрд░рддрд┐рд╕рд╛рдж рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд:

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рдЖрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреА рд╕рджреНрдп рд╕реНрдерд┐рддреА (GitOps, Git рдордзреВрди рд╕рддреНрдпрд╛рдЪрд╛ рдПрдХрдЪ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рдШреЗрддрд▓реЗрд▓реА) рд╕рдХреНрд░рд┐рдп рдкреНрд░рддрд┐рдХреГрддреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджреЛрди рдЙрдкрдпреЛрдЬрдирд╛рдВрдЪреА рдЙрдкрд╕реНрдерд┐рддреА рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА рдПрдХ.

~ 10% рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдЕрдирд╛рд╡рдзрд╛рдирд╛рдиреЗ рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрддрд╛рдд. рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЧ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛рдордзреАрд▓ рддреНрд░реБрдЯреА рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рд╣реАрдЪ рд╡реЗрд│ рдЖрд╣реЗ.

рдкрд╛рдпрд░реА 2: рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд░рд┐рд▓реАрдЬ рдХрд░рд╛

рдЖрдореНрд╣реА рдард░рд╡рд▓реЗ рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЖрдгрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдлрдХреНрдд рдЕрдкрдбреЗрдЯ рдХрд░рддреЛ deploy.yaml рдкреНрд░рддрд┐рдореЗрдЪреА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 10 рдЪреНрдпрд╛ рд╕рдорд╛рди рдЖрд╣реЗ. рдордзреНрдпреЗ deploy-canary.yaml рдЖрдореНрд╣реА рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд 0 рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА. рдЙрдкрдпреЛрдЬрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЕрд╕реЗрд▓:

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ #1 рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА: рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА

рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдореЕрдиреНрдпреБрдЕрд▓реА рдЪрд╛рд▓рд╡рдгреЗ рд╣реЗ k8s рд╡рд╛рдкрд░реВрди рдХрд┐рддреА рд╕рд╣рдЬрдкрдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╣реЗ рд╕рдордЬрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддреЗ. Kubernetes рддреБрдореНрд╣рд╛рд▓рд╛ API рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛрдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдпрд╛ рдкрд╛рдпрд▒реНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рджреБрд╕рд░реА рдЧреЛрд╖реНрдЯ рдЬреА рд▓рд╛рдЧреВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рддреА рдореНрд╣рдгрдЬреЗ рдЯреЗрд╕реНрдЯрд░ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ (рд▓реЛрдбрдмреЕрд▓рдиреНрд╕рд░ рдХрд┐рдВрд╡рд╛ рдЗрдВрдЧреНрд░реЗрд╕рджреНрд╡рд╛рд░реЗ) рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдХреЗрд╡рд│ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╣реЗ рдореЕрдиреНрдпреБрдЕрд▓ рдмреНрд░рд╛рдЙрдЭрд┐рдВрдЧрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ, рдЖрдореНрд╣реА рдЗрддрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЙрдкрд╛рдп рддрдкрд╛рд╕реВ рдЬреЗ рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╣реБрддреЗрдХ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рддрд╛рдд.

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░реАрд▓ рдЗрддрд░ рд▓реЗрдЦ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛