Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Π·ΠΎΡ€Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΎΡ‚ Weaveworks Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярными стратСгиями Π²Ρ‹ΠΊΠ°Ρ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ рассказываСт ΠΎ возмоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Kubernetes-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Flagger. Он написан простым языком ΠΈ содСрТит наглядныС схСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² вопросС Π΄Π°ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)
Π‘Ρ…Π΅ΠΌΠ° взята ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π° стратСгий Π²Ρ‹ΠΊΠ°Ρ‚Π°, сдСланного Π² Container Solutions

Одной ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ cloud native-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ сСгодня являСтся ускорСниС дСплоя. ΠŸΡ€ΠΈ микросСрвисном ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌΠΈ прилоТСниями ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡ…, позволяя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈ частыС развСртывания ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства:

  • БокращаСтся врСмя Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ.
  • НовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ быстрСС ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.
  • ΠžΡ‚ΠΊΠ»ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ быстрСС доходят Π΄ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ ΠΌΠΎΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΡƒΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²: с большим количСством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ интСрСснСС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.


Но с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ частоты Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ΡΡ ΡˆΠ°Π½ΡΡ‹ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ прилоТСния ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚. ИмСнно поэтому ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ эксплуатации ΠΈ DevOps Π²Π°ΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ процСссы ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ стратСгиями развСртывания Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ риск для ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. (Π£Π·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ CI/CD-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ здСсь.)

Π’ этой ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΡ‹ обсудим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ стратСгии дСплоя Π² Kubernetes, Π² Ρ‚ΠΎΠΌ числС rolling-развСртывания ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ (canary) Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹ ΠΈ ΠΈΡ… разновидности.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя

БущСствуСт нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² стратСгий развСртывания, ΠΊΠΎΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ Ρ†Π΅Π»ΠΈ. НапримСр, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ внСсти измСнСния Π² Π½Π΅ΠΊΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для дальнСйшСго тСстирования, ΠΈΠ»ΠΈ Π² подмноТСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ/ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΈΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ провСсти ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ тСстированиС Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ…, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ общСдоступной.

Rolling (постСпСнный, Β«Π½Π°ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉΒ» Π΄Π΅ΠΏΠ»ΠΎΠΉ)

Π­Ρ‚ΠΎ стандартная стратСгия развСртывания Π² Kubernetes. Она постСпСнно, ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, замСняСт pod’Ρ‹ со старой вСрсиСй прилоТСния Π½Π° pod’Ρ‹ с Π½ΠΎΠ²ΠΎΠΉ вСрсиСй β€” Π±Π΅Π· простоя кластСра.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

Kubernetes доТидаСтся готовности Π½ΠΎΠ²Ρ‹Ρ… pod’ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ (провСряя ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ readiness-тСстов), ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΡŽ старых. Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π½Π°ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ, Π½Π΅ останавливая всСго кластСра. Π’ YAML-Ρ„Π°ΠΉΠ»Π΅ с описаниСм Ρ‚ΠΈΠΏΠ° deployment’Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· замСняСт собой старый ΠΎΠ±Ρ€Π°Π·:

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

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ обновлСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ манифСста:

spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxSurge: 25%
       maxUnavailable: 25%  
  template:
  ...

Recreate (ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ созданиС)

Π’ этом ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Ρ‚ΠΈΠΏΠ΅ развСртывания старыС pod’Ρ‹ ΡƒΠ±ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Ρ€Π°Π·ΠΎΠΌ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΌΠΈ:

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ манифСст выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
  ...

Blue/Green (синС-Π·Π΅Π»Π΅Π½Ρ‹Π΅ развСртывания)

БтратСгия синС-Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ развСртывания (ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π΅ Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ red/black, Ρ‚.Π΅. красно-Ρ‡Ρ‘Ρ€Π½ΠΎΠΉ) прСдусматриваСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ старой (Π·Π΅Π»Π΅Π½ΠΎΠΉ) ΠΈ Π½ΠΎΠ²ΠΎΠΉ (синСй) вСрсий прилоТСния. ПослС размСщСния ΠΎΠ±Π΅ΠΈΡ… вСрсий ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ доступ ΠΊ Π·Π΅Π»Π΅Π½ΠΎΠΉ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ синяя доступна для QA-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ тСстов Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис ΠΈΠ»ΠΈ прямой проброс ΠΏΠΎΡ€Ρ‚ΠΎΠ²:

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

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 (ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ развСртывания)

ΠšΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° синС-Π·Π΅Π»Π΅Π½Ρ‹Π΅, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ прогрСссивный поэтапный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. К этому Ρ‚ΠΈΠΏΡƒ относятся нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… стратСгий, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ «скрытыС» запуски ΠΈ А/Π’-тСстированиС.

Π­Ρ‚Π° стратСгия примСняСтся, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² бэкСндС прилоТСния. Π‘ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° практичСски ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… сСрвСра: ΠΎΠ΄ΠΈΠ½ обслуТиваСт ΠΏΠΎΡ‡Ρ‚ΠΈ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, с Π½ΠΎΠ²Ρ‹ΠΌΠΈ функциями, обслуТиваСт лишь Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, послС Ρ‡Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Если всС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π±Π΅Π· ошибок, новая вСрсия постСпСнно выкатываСтся Π½Π° всю инфраструктуру.

Π₯отя Π΄Π°Π½Π½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ срСдствами Kubernetes, замСняя старыС pod’Ρ‹ Π½Π° Π½ΠΎΠ²Ρ‹Π΅, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ service mesh Π²Ρ€ΠΎΠ΄Π΅ Istio.

НапримСр, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… манифСста Π² Git: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ с Ρ‚Π΅Π³ΠΎΠΌ 0.1.0 ΠΈ Β«ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹ΠΉΒ» с Ρ‚Π΅Π³ΠΎΠΌ 0.2.0. ИзмСняя вСса Π² манифСстС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шлюза Istio, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ распрСдСлСниСм Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя deployment’Π°ΠΌΠΈ:

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

ПошаговоС руководство ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Istio ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ GitOps Workflows with Istio. (ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΡ€ΠΎ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹ Π² Istio здСсь.)

ΠšΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅ развСртывания с Weaveworks Flagger

Weaveworks Flagger позволяСт Π»Π΅Π³ΠΊΠΎ ΠΈ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Π°ΠΌΠΈ.

Flagger Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌΠΈ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Istio ΠΈΠ»ΠΈ AWS App Mesh для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Prometheus для Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π°Π½Π°Π»ΠΈΠ· ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Π΅Π±Ρ…ΡƒΠΊΠ°ΠΌΠΈ для провСдСния ΠΏΡ€ΠΈΠ΅ΠΌΠΎΡ‡Π½Ρ‹Ρ… (acceptance) тСстов, Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

На основС deployment’Π° Kubernetes ΠΈ, ΠΏΡ€ΠΈ нСобходимости, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ pod’ΠΎΠ² (HPA), Flagger создаСт Π½Π°Π±ΠΎΡ€Ρ‹ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (deployment’Ρ‹ Kubernetes, сСрвисы ClusterIP ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Istio ΠΈΠ»ΠΈ App Mesh) для провСдСния Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Ρ… Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ:

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

РСализуя ΠΊΠΎΠ½Ρ‚ΡƒΡ€ управлСния (control loop), Flagger постСпСнно ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹ΠΉ сСрвСр, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ измСряя ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ доля ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… HTTP-запросов, срСдняя ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запроса ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ pod’ΠΎΠ². ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ KPI (ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ эффСктивности), канарССчная Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ растСт, Π»ΠΈΠ±ΠΎ сворачиваСтся, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π² Slack. ОписаниС ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ этого процСсса ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ Progressive Delivery for App Mesh.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

Dark (скрытыС) ΠΈΠ»ΠΈ А/Π’-развСртывания

Π‘ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ β€” Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° вариация ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½ΠΎΠΉ стратСгии (с Π½Π΅ΠΉ, кстати, Flagger Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ). Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ скрытым ΠΈ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹ΠΌ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ скрытыС развСртывания ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ, Π° Π½Π΅ с бэкСндом, ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹Π΅.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ этих Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ β€” А/Π’-тСстированиС. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ ΠΊ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Π΅Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ лишь ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΡ… части. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ тСстСрами-ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρ†Π°ΠΌΠΈ (ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «скрытоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅Β»).

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (feature toggles) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΡƒΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π»ΠΈ ΠΎΠ½Π° ΠΈΡ… ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ.

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ дСплоя Π² Kubernetes: rolling, recreate, blue/green, canary, dark (A/B-тСстированиС)

Flagger ΠΈ A/B-развСртывания

Помимо ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ вСсов, Flagger Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π° ΠΊΠ°Π½Π°Ρ€Π΅Π΅Ρ‡Π½Ρ‹ΠΉ сСрвСр Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² зависимости ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² HTTP. ΠŸΡ€ΠΈ А/Π’-тСстировании ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ HTTP ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ cookie для пСрСнаправлСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСгмСнта ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΎ особСнно эффСктивно Π² случаС frontend-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… привязки сСссии ΠΊ сСрвСру (session affinity). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Flagger.

Автор Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Stefan Prodan, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρƒ Weaveworks (ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŽ Flagger), Π·Π° всС эти ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠ΅ схСмы дСплоя.

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ