3-way merge Π² werf: Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes с Helm Β«Π½Π° стСроидах»

Π‘Π»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹) Π΄ΠΎΠ»Π³ΠΎ ΠΆΠ΄Π°Π»ΠΈ: werf, наша Open Source-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для сборки ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΈΡ… доставки Π² Kubernetes, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ! Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому, появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ adoption’а ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… K8s-рСсурсов Π² Helm-Ρ€Π΅Π»ΠΈΠ·Ρ‹ Π±Π΅Π· пСрСсоздания этих рСсурсов.

3-way merge Π² werf: Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes с Helm «Π½Π° стСроидах»

Если совсСм ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ ставим WERF_THREE_WAY_MERGE=enabled β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΉ Β«ΠΊΠ°ΠΊ Π² kubectl applyΒ», совмСстимый с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ инсталляциями Π½Π° Helm 2 ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС.

Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Ρ‚Π΅ΠΎΡ€ΠΈΠΈ: Ρ‡Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Π°ΠΊΠΎΠ΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ, ΠΊΠ°ΠΊ люди ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ с ΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π²Π°ΠΆΠ½Ρ‹ Π² CI/CD-процСссах с инфраструктурой Π½Π° Π±Π°Π·Π΅ Kubernetes? А послС этого β€” посмотрим, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ прСдставляСт собой 3-way-merge Π² werf, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΊΠ°ΠΊ этим ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡?

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ с Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Π° рСсурсов, описанных Π² YAML-манифСстах, Π² Kubernetes.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСсурсами Kubernetes API ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: create, patch, replace ΠΈ delete. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π²Ρ‹ΠΊΠ°Ρ‚ рСсурсов Π² кластСр. Как?

Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ kubectl

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Kubernetes β€” использованиС ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ kubectl для создания, измСнСния ΠΈ удалСния этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΎΡ‰Π΅ говоря:

  • ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ kubectl run ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Deployment ΠΈΠ»ΠΈ Job:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ kubectl scale β€” ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ:
    kubectl scale --replicas=3 deployment/mysql
  • ΠΈ Ρ‚.Π΄.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда. Однако Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. Π•Π³ΠΎ тяТСло Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  2. Как ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² Git? Как Π΄Π΅Π»Π°Ρ‚ΡŒ review ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, происходящих с кластСром?
  3. Как ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ пСрСзапускС?
  4. …

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠ»ΠΎΡ…ΠΎ сочСтаСтся с Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния ΠΈ инфраструктуры ΠΊΠ°ΠΊ ΠΊΠΎΠ΄Π° (IaC; ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ GitOps ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ соврСмСнного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π² Kubernetes-экосистСмС). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ дальнСйшСго развития эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² kubectl Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ create, get, replace ΠΈ delete

Π‘ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ созданиСм всС просто: отправляСм манифСст Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ create Ρƒ kube api ΠΈ рСсурс создан. YAML-прСдставлСниС манифСста ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Git, Π° для создания β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ kubectl create -f manifest.yaml.

Π‘ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠΆΠ΅ просто: подставляСм Ρ‚ΠΎΡ‚ ΠΆΠ΅ manifest.yaml ΠΈΠ· Git Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ kubectl delete -f manifest.yaml.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ replace позволяСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ рСсурса Π½Π° Π½ΠΎΠ²ΡƒΡŽ, Π±Π΅Π· пСрСсоздания рСсурса. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² рСсурс, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ get, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ replace. Π’ kube apiserver встроСн optimistic locking ΠΈ, Ссли послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ get ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ помСнялся, Ρ‚ΠΎ опСрация replace Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² Git ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ replace, Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ get, ΠΌΠ΅Ρ€ΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΈΠ· Git’а с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ replace. Π¨Ρ‚Π°Ρ‚Π½ΠΎ kubectl позволяСт лишь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ kubectl replace -f manifest.yaml, Π³Π΄Π΅ manifest.yaml β€” ΡƒΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ (Π² нашСм случаС β€” смСрТСнный) манифСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ merge манифСстов, Π° это Π΄Π΅Π»ΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅β€¦

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ хотя manifest.yaml ΠΈ хранится Π² Git, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ β€” это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ софт.

Π˜Ρ‚ΠΎΠ³ΠΎ: ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π²Ρ‹ΠΊΠ°Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ create, replace ΠΈ delete, обСспСчив Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ инфраструктуры Π² Git’С вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ CI/CD?

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, моТСм… Для этого потрСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ merge манифСстов ΠΈ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ обвязку, которая:

  • провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² кластСрС,
  • выполняСт ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ΅ созданиС рСсурса,
  • обновляСт ΠΈΠ»ΠΈ удаляСт Π΅Π³ΠΎ.

ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π½Π°Π΄ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ рСсурс ΠΌΠΎΠ³ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ со Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ послСднСго get ΠΈ автоматичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ случай optimistic locking β€” Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ обновлСния.

Однако Π·Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд, ΠΊΠΎΠ³Π΄Π° kube-apiserver ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ обновлСния рСсурсов: ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ patch, которая снимаСт с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‡Π°ΡΡ‚ΡŒ описанных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

Patch

Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ.

ΠŸΠ°Ρ‚Ρ‡ΠΈ β€” это основной способ примСнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² Kubernetes. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ patch Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ:

  • ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ kube-apiserver трСбуСтся ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ Π² JSON-Π²ΠΈΠ΄Π΅ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚,
  • Π° apiserver сам разбСрСтся с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ.

Optimistic locking Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ трСбуСтся. Π­Ρ‚Π° опСрация Π±ΠΎΠ»Π΅Π΅ дСкларативная ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с replace, хотя сначала ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ create ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ манифСсту ΠΈΠ· Git’а,
  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ delete β€” удаляСм, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ большС Π½Π΅ трСбуСтся,
  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ patch β€” измСняСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, приводя Π΅Π³ΠΎ ΠΊ Π²ΠΈΠ΄Ρƒ, описанному Π² Git.

Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‡!

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ°Ρ‚Ρ‡ΠΈ Π² Helm 2: 2-way-merge

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ установкС Ρ€Π΅Π»ΠΈΠ·Π° Helm выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ create для рСсурсов Ρ‡Π°Ρ€Ρ‚Π°.

ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ€Π΅Π»ΠΈΠ·Π° Helm для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса:

  • считаСт ΠΏΠ°Ρ‚Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиСй рСсурса ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Ρ‡Π°Ρ€Ρ‚Π° ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсиСй Ρ‡Π°Ρ€Ρ‚Π°,
  • примСняСт этот ΠΏΠ°Ρ‚Ρ‡.

Π’Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ‚Ρ‡ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ 2-way-merge patch, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π΅Π³ΠΎ создании ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ 2 манифСста:

  • манифСст рСсурса ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°,
  • манифСст рСсурса ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ рСсурса.

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ опСрация delete Π² kube apiserver вызываСтся для рСсурсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ с 2 way merge patch ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: ΠΎΠ½ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ рассинхрону Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния рСсурса Π² кластСрС ΠΈ манифСста Π² Git.

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅

  • Π’ Git, Π² Ρ‡Π°Ρ€Ρ‚Π΅ хранится манифСст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»Π΅ image Ρƒ Deployment ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ubuntu:18.04.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‡Π΅Ρ€Π΅Π· kubectl edit помСнял Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого поля Π½Π° ubuntu:19.04.
  • ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ Ρ‡Π°Ρ€Ρ‚Π° Helm Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‡, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ image Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии Ρ€Π΅Π»ΠΈΠ·Π° ΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ‡Π°Ρ€Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.
  • ПослС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ дСплоя image остаСтся ubuntu:19.04, хотя Π² Ρ‡Π°Ρ€Ρ‚Π΅ написано ubuntu:18.04.

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°ΡΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ потСряли Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронизированный рСсурс?

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

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ синхронизированного рСсурса: ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Π΅ рСсурса ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно прописаны Π² манифСстС ΠΈΠ· Git’а (ΠΈΠ»ΠΈ Π±Ρ‹Π»ΠΈ прописаны Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹).

3-way-merge patch

Основная идСя 3-way-merge patch: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ‚Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ послСднСй ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ вСрсиСй манифСста ΠΈΠ· Git’а ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ вСрсиСй манифСста ΠΈΠ· Git’а с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии манифСста ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ кластСра. Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ синхронизированного рСсурса:

  • Π½ΠΎΠ²Ρ‹Π΅ поля, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ‚Ρ‡Π°;
  • Ρ€Π°Π½Π΅Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ поля Π² послСднСй ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ вСрсии ΠΈ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ β€” ΠΎΠ±Π½ΡƒΠ»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ‚Ρ‡Π°;
  • поля Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΡ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ вСрсии манифСста, β€” ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ‚Ρ‡Π°.

ИмСнно ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‡ΠΈ kubectl apply:

  • послСдняя примСнСнная вСрсия манифСста сохраняСтся Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°,
  • цСлСвая β€” бСрСтся ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ YAML-Ρ„Π°ΠΉΠ»Π°,
  • тСкущая β€” ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ кластСра.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ, ΠΏΠΎΡ€Π° Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ сдСлали Π² werf.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² werf

Π Π°Π½Π΅Π΅ werf, ΠΊΠ°ΠΊ ΠΈ Helm 2, использовал 2-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ.

Repair patch

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ β€” 3-way-merge, β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ repair-ΠΏΠ°Ρ‚Ρ‡ΠΈ.

ΠŸΡ€ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный 2-way-merge-ΠΏΠ°Ρ‚Ρ‡, Π½ΠΎ werf Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ‚Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ синхронизировал Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС рСсурса с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ написано Π² Git (создаСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ‚Ρ‡ с использованиСм Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° синхронизированного рСсурса, описанного Π²Ρ‹ΡˆΠ΅).

Π’ случаС возникновСния рассинхрона, Π² ΠΊΠΎΠ½Ρ†Π΅ дСплоя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ WARNING с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм ΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти рСсурс ΠΊ синхронизированному Π²ΠΈΠ΄Ρƒ. Π’Π°ΠΊΠΆΠ΅ этот ΠΏΠ°Ρ‚Ρ‡ записываСтся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ werf.io/repair-patch. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ€ΡƒΠΊΠ°ΠΌΠΈ сам ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ этот ΠΏΠ°Ρ‚Ρ‡: werf Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ.

ГСнСрация repair-ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ β€” это врСмСнная ΠΌΠ΅Ρ€Π°, которая позволяСт ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Π½Π° Π΄Π΅Π»Π΅ созданиС ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ 3-way-merge, Π½ΠΎ автоматичСски эти ΠΏΠ°Ρ‚Ρ‡ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

3-way-merge patch Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²

Начиная с 1 дСкабря 2019 Π³. beta- ΠΈ alpha-вСрсии werf Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ для примСнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΎΠ²Ρ‹Ρ… Helm-Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· werf. Π£ΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π»ΠΈΠ·Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с 2-way-merge + repair-ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ.

Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ явно настройкой WERF_THREE_WAY_MERGE_MODE=onlyNewReleases ΡƒΠΆΠ΅ сСйчас.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ„ΠΈΡ‡Π° появлялась Π² werf Π½Π° протяТСнии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²: Π² Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»Π΅ ΠΎΠ½Π° стала Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ с вСрсии v1.0.5-alpha.19, Π° Π² Π±Π΅Ρ‚Π°-ΠΊΠ°Π½Π°Π»Π΅ β€” с v1.0.4-beta.20.

3-way-merge patch для всСх Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²

Начиная с 15 дСкабря 2019 Π³. beta- ΠΈ alpha-вСрсии werf Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ для примСнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ для всСх Ρ€Π΅Π»ΠΈΠ·ΠΎΠ².

Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ явно настройкой WERF_THREE_WAY_MERGE_MODE=enabled ΡƒΠΆΠ΅ сСйчас.

Как Π±Ρ‹Ρ‚ΡŒ с Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ рСсурсов?

Π’ Kubernetes сущСствуСт 2 Ρ‚ΠΈΠΏΠ° Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: HPA (Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ) ΠΈ VPA (Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ).

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ автоматичСски Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ β€” количСство рСсурсов. И количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ, ΠΈ трСбования ΠΊ рСсурсам ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² манифСстС рСсурса (см. spec.replicas ΠΈΠ»ΠΈ spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅).

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сконфигурируСт рСсурс Π² Ρ‡Π°Ρ€Ρ‚Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния ΠΏΠΎ рСсурсам ΠΈΠ»ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ ΠΈ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ рСсурса Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ автоскСйлСры, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ werf Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ эти значСния Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ записано Π² манифСстС Ρ‡Π°Ρ€Ρ‚Π°.

РСшСний Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄Π²Π°. Для Π½Π°Ρ‡Π°Π»Π° Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ явного указания Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² манифСстС Ρ‡Π°Ρ€Ρ‚Π°. Если ΠΆΠ΅ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ‡Π°Ρ€Ρ‚Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ограничСния рСсурсов ΠΈ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ), Ρ‚ΠΎ werf ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ werf Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅, Π° лишь установит ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ создании рСсурса.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ β€” см. Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ HPA ΠΈ VPA.

Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ использованиС 3-way-merge patch

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ использованиС Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π² werf с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния WERF_THREE_WAY_MERGE_MODE=disabled. Однако начиная с 1 ΠΌΠ°Ρ€Ρ‚Π° 2020 Π³ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹ΠΉ Π·Π°ΠΏΡ€Π΅Ρ‚ пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ лишь использованиС 3-way-merge-ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ.

Adoption рСсурсов Π² werf

ОсвоСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° примСнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΌ сразу Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΈΡ‡Ρƒ, ΠΊΠ°ΠΊ adoption ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² кластСрС рСсурсов Π² Helm-Ρ€Π΅Π»ΠΈΠ·.

Helm 2 ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² манифСсты Ρ‡Π°Ρ€Ρ‚Π° рСсурс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ сущСствуСт Π² кластСрС, Π±Π΅Π· пСрСсоздания с нуля этого рСсурса (см. #6031, #3275). ΠœΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈ werf ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ рСсурсы Π² Ρ€Π΅Π»ΠΈΠ·. Для этого Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ рСсурса ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ кластСра Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рСсурс Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ‡Π°Ρ€Ρ‚Π΅ ΠΈ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ werf’ом Ρ€Π΅Π»ΠΈΠ·Π° с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ рСсурс Π±ΡƒΠ΄Π΅Ρ‚ принят Π² этот Ρ€Π΅Π»ΠΈΠ· ΠΈ останСтся ΠΏΠΎΠ΄ Π΅Π³ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² процСссС принятия рСсурса Π² Ρ€Π΅Π»ΠΈΠ· werf ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС рСсурса ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ кластСра ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, описанному Π² Ρ‡Π°Ρ€Ρ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅ ΠΆΠ΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ синхронизированного рСсурса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: настройка WERF_THREE_WAY_MERGE_MODE Π½Π΅ влияСт Π½Π° adoption рСсурсов β€” Π² случаС adoption всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ β€” Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ дальнСйшиС ΠΏΠ»Π°Π½Ρ‹

НадСюсь, послС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ стало понятнСС, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΈ. Π‘ практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° werf ΠΈΡ… рСализация стала Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ шагом Π½Π° ΠΏΡƒΡ‚ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Helm-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ дСплоя. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с синхронизациСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ ΠΏΡ€ΠΈ использовании Helm 2. ВмСстС с Ρ‚Π΅ΠΌ, Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая полСзная Ρ„ΠΈΡ‡Π° adoption’а ΡƒΠΆΠ΅ Π²Ρ‹ΠΊΠ°Ρ‡Π΅Π½Π½Ρ‹Ρ… Kubernetes-рСсурсов Π² Helm-Ρ€Π΅Π»ΠΈΠ·.

Π’ Helm-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ трудности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ использованиС Go-шаблонов, ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈΡ… Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… обновлСния рСсурсов ΠΈ adoption’С ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π° этой страницС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Helm 3

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ замСчания достойна Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠ°Ρ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π° днях новая маТорная вСрсия Helm β€” v3, β€” которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 3-way-merge-ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΈ избавляСтся ΠΎΡ‚ Tiller. Новая вСрсия Helm Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… установок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ хранСния Ρ€Π΅Π»ΠΈΠ·ΠΎΠ².

Werf со своСй стороны Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ избавился ΠΎΡ‚ использования Tiller, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π° 3-way-merge ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΏΡ€ΠΈ этом ΠΎΡΡ‚Π°Π²ΡˆΠΈΡΡŒ совмСстимым с ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ инсталляциями Π½Π° Helm 2 (Π½ΠΈΠΊΠ°ΠΊΠΈΡ… скриптов ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΠΎΠΊΠ° werf Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ Π½Π° Helm 3, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ werf Π½Π΅ Ρ‚Π΅Ρ€ΡΡŽΡ‚ основных прСимущСств Helm 3 ΠΏΠ΅Ρ€Π΅Π΄ Helm 2 (Π² werf ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ werf Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Helm 3 Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ werf 1.1 ΠΈΠ»ΠΈ werf 1.2 (Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, главная вСрсия werf β€” 1.0; ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ устройство вСрсионирования werf см. здСсь). Π—Π° это врСмя Helm 3 успССт ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

P.S.

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

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