werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

На 27 ΠΌΠ°ΠΉ Π² основната Π·Π°Π»Π° Π½Π° конфСрСнцията DevOpsConf 2019, ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Ρ‰Π° сС Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° фСстивала РИВ++ 2019, Π² сСкцията β€žΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° Π΄ΠΎΡΡ‚Π°Π²ΠΊΠ°β€œ, бСшС прСдставСно Π΄ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ β€žwerf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetesβ€œ. Π’ Π½Π΅Π³ΠΎ сС ΠΎΠ±ΡΡŠΠΆΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΈ прСдизвикатСлствата, с ΠΊΠΎΠΈΡ‚ΠΎ всСки сС сблъсква ΠΏΡ€ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π² Kubernetes, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ са Π²Π΅Π΄Π½Π°Π³Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π² Open Source инструмСнта werf.

Π‘Π»Π΅Π΄ Π½Π°ΡˆΠ΅Ρ‚ΠΎ прСдставлСниС, Π½Π°ΡˆΠΈΡΡ‚ инструмСнт (ΠΏΡ€Π΅Π΄ΠΈ извСстСн ΠΊΠ°Ρ‚ΠΎ dapp) ΠΏΡ€Π΅ΠΌΠΈΠ½Π° историчСската Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΎΡ‚ 1000 Π·Π²Π΅Π·Π΄ΠΈ Π² GitHub β€” надявамС сС, Ρ‡Π΅ растящата общност ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Ρ‰Π΅ улСсни ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

И Ρ‚Π°ΠΊΠ°, прСдставямС Π²ΠΈΠ΄Π΅ΠΎΡ‚ΠΎ с Π΄ΠΎΠΊΠ»Π°Π΄Π° (~47 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‚ статия) ΠΈ основната ΠΌΡƒ ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π² тСкстов Π²ΠΈΠ΄. Π”Π° Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅!

Доставка Π½Π° ΠΊΠΎΠ΄ Π² Kubernetes

Π”ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ Ρ‰Π΅ сС фокусира Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²ΡŠΡ€Ρ…Ρƒ werf, Π° Π²ΡŠΡ€Ρ…Ρƒ CI/CD Π² Kubernetes, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‰Π°, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ софтуСр Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (Π·Π° Ρ‚ΠΎΠ²Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… Π² Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ‚ 2016 Π³ΠΎΠ΄ΠΈΠ½Π°), Π° K8s Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π² продукция (Π·Π° Ρ‚ΠΎΠ²Π° β€” Π² 2017 Π³ΠΎΠ΄ΠΈΠ½Π°).

Как ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° доставката Π² Kubernetes?

  • Има Git рСпозитория с ΠΊΠΎΠ΄ ΠΈ инструкции Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΡΡŠΠ±ΠΈΡ€Π° Π² Docker ΠΎΠ±Ρ€Π°Π· ΠΈ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π² Docker Registry.
  • Π’ ΡΡŠΡ‰ΠΈΡ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠΌΠ° инструкции ΠΈ ΠΊΠ°ΠΊ Π΄Π° сС Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π° ΠΈ стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. На Π΅Ρ‚Π°ΠΏΠ° Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Ρ‚Π΅Π·ΠΈ инструкции сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π² Kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° нуТния ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ registry ΠΈ Π³ΠΎ стартира.
  • ΠžΡ‚Π΄Π΅Π»Π½ΠΎ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ° тСстовС. Някои ΠΎΡ‚ тях ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, (спорСд ΡΡŠΡ‰ΠΈΡ‚Π΅ инструкции) ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π° ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° K8s ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€) ΠΈ тСстовСтС Π΄Π° сС стартират Ρ‚Π°ΠΌ.
  • Накрая, Π½ΡƒΠΆΠ½Π° Π΅ CI систСма, която ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΎΡ‚ Git (ΠΈΠ»ΠΈ натискания Π½Π° Π±ΡƒΡ‚ΠΎΠ½ΠΈ) ΠΈ задСйства всички ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ: сборка, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, тСстванС.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π’ΡƒΠΊ ΠΈΠΌΠ° няколко Π²Π°ΠΆΠ½ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠΈ:

  1. Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° инфраструктура (immutable infrastructure), ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° всички Π΅Ρ‚Π°ΠΏΠΈ (staging, production ΠΈ Ρ‚.Π½.) трябва Π΄Π° бъдС Π΅Π΄ΠΈΠ½. ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ съм Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Ρ‚ΡƒΠΊ.
  2. Въй ΠΊΠ°Ρ‚ΠΎ слСдвамС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° инфраструктура ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ (IaC), ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, инструкциитС Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ трябва Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° β€” Π²ΠΈΠΆΡ‚Π΅ Π² ΡΡŠΡ‰ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄.
  3. Π’Π΅Ρ€ΠΈΠ³Π° Π½Π° доставката (delivery) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ слСдното: ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΡΡŠΠ±Ρ€Π°Π½ΠΎ, тСствано, пуснато Π½Π° ΠΏΠ°Π·Π°Ρ€Π° (Π΅Ρ‚Π°ΠΏ release) ΠΈ всичко β€” доставката Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π°. Но Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ потрСбитСлят ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ стС ΠΈΠ·Π΄Π°Π»ΠΈ, Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈΠ΅ Π³ΠΎ доставятС Π² production, ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ успял Π΄Π° Π²Π»Π΅Π·Π΅ Ρ‚Π°ΠΌ ΠΈ Ρ‚ΠΎΠ·ΠΈ production Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠ». Π—Π°Ρ‚ΠΎΠ²Π° смятам, Ρ‡Π΅ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° Π½Π° доставка ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π° СдинствСно Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° Сксплоатация (run), Π° Π°ΠΊΠΎ бъдСм ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΈ, Π΄ΠΎΡ€ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΎΡ‚ production (Π·Π°ΠΌΠ΅Π½Π΅Π½ с Π½ΠΎΠ²).

Π”Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ към ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ схСма Π½Π° доставка Π² Kubernetes: тя Π΅ измислСна Π½Π΅ само ΠΎΡ‚ нас, Π½ΠΎ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ ΠΎΡ‚ всСки, ΠΊΠΎΠΉΡ‚ΠΎ сС Π΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Π» с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ‚ΠΎΠ·ΠΈ шаблон Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сС Π½Π°Ρ€ΠΈΡ‡Π° GitOps (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΈ ΠΈΠ΄Π΅ΠΈΡ‚Π΅ Π·Π°Π΄ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ). НСка ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° схСмата.

Π•Ρ‚Π°ΠΏ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ (build)

На ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠ°ΠΆΠ΅ ΠΏΡ€Π΅Π· 2019 Π³ΠΎΠ΄ΠΈΠ½Π° Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Docker-ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички знаят ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ Dockerfile’и ΠΈ Π΄Π° стартират docker build?.. Π’ΠΎΡ‚ Π½ΡŽΠ°Π½ΡΡ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  1. Π’Π΅Π³Π»ΠΎΡ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠΌΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ multi-stage, Π·Π° Π΄Π° оставитС Π² ΠΎΠ±Ρ€Π°Π·Π° само наистина Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  2. Броят Π½Π° слоСвСтС трябва Π΄Π° бъдС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½, ΠΊΠ°Ρ‚ΠΎ сС обСдинят Π²Π΅Ρ€ΠΈΠ³ΠΈ ΠΎΡ‚ RUN-ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΠΎ смисъл.
  3. Π’ΠΎΠ²Π° ΠΎΠ±Π°Ρ‡Π΅ добавя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ отстраняванСто Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° сборката трябва Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π°, която Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
  4. Бкоростта Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π΅ Π²Π°ΠΆΠ½Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Π±ΡŠΡ€Π·ΠΎ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°. НапримСр, Π½Π΅ искамС Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ зависимоститС Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΡ€ΠΈ всяка сборка Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  5. ЧСсто ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ с Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Dockerfile’и (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π² Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ») ΠΈ Bash-скрипт с тяхната послСдоватСлна сборка.

Π’ΠΎΠ²Π° бСшС само Π²ΡŠΡ€Ρ…ΡŠΡ‚ Π½Π° айсбСрга, с ΠΊΠΎΠΉΡ‚ΠΎ сС ΡΠ±Π»ΡŠΡΠΊΠ²Π°Ρ‚ всички. Но ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  1. ЧСсто Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½ΠΈ трябва Π½Π΅Ρ‰ΠΎ Π΄Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‚ΠΈΠΏ apt Π² външна дирСктория).
  2. ИскамС Ansible вмСсто Π΄Π° пишСм Π½Π° shell’С.
  3. ИскамС Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π±Π΅Π· Docker (Π·Π°Ρ‰ΠΎ Π½ΠΈ Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, Π² която Π΄Π° настроим всичко, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ кластСр Kubernetes, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ?).
  4. ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½Π° сборка, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π° ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½: Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΎΡ‚ Dockerfile (Π°ΠΊΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° multi-stage), няколко ΠΊΠΎΠΌΠΈΡ‚Π° ΠΎΡ‚ Π΅Π΄Π½ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ, няколко Dockerfile-Π°.
  5. Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅: искамС Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ Π½Π΅Ρ‰ΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са β€žΠ΅Ρ„ΠΈΠΌΠ΅Ρ€Π½ΠΈβ€œ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠ΅ΡˆΡŠΡ‚ ΠΈΠΌ ΠΈΠ·Ρ‡Π΅Π·Π²Π°, Π° Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° някъдС ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.
  6. Накрая, Π²ΡŠΡ€Ρ…Π° Π½Π° ТСланията Π½Π°Ρ€Π΅ΠΊΠΎΡ… автоматизация: ΠΈΠ΄Π΅Π°Π»Π½ΠΎΡ‚ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° Π²Π»Π΅Π·Π΅ΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ, Π΄Π° напишСм някаква ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π·, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° с Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π»ΠΈΡ‡Π½ΠΎ Π½Π΅ съм сигурСн, Ρ‡Π΅ всички нюанси ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½.

Π•Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅:

  • moby/buildkit β€” ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π» ΠΎΡ‚ компанията Docker Inc (Π²Π΅Ρ‡Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ Π² Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Docker), ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Ρ€Π΅ΡˆΠΈ всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ;
  • kaniko β€” ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π» ΠΎΡ‚ Google, позволяващ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π±Π΅Π· Docker;
  • Buildpacks.io β€” ΠΎΠΏΠΈΡ‚ Π½Π° CNCF Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ автоматизация ΠΈ, Π² частност, интСрСсно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с rebase Π·Π° слоСвС;
  • ΠΈ ΠΎΡ‰Π΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти, ΠΊΠ°Ρ‚ΠΎ buildah, genuinetools/img…

… ΠΈ Π²ΠΈΠΆΡ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ Π·Π²Π΅Π·Π΄ΠΈ ΠΈΠΌΠ°Ρ‚ Π² GitHub. ВоСст, ΠΎΡ‚ Π΅Π΄Π½Π° страна, docker build ΠΈΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π½Π΅ Π΅ Ρ€Π΅ΡˆΠ΅Π½ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎ β€” доказатСлство Π·Π° Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π»ΠΈ, всСки ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠ°Π²Π° част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅.

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π² werf

Π’Π°ΠΊΠ° сС Π΄ΠΎΠ±Π»ΠΈΠΆΠΈΡ…ΠΌΠ΅ Π΄ΠΎ werf (ΠΏΠΎ-Ρ€Π°Π½ΠΎ извСстния ΠΊΠ°Ρ‚ΠΎ dapp) β€” Open Source инструмСнт Π½Π° компанията β€žΠ€Π»Π°Π½Ρ‚β€œ, ΠΊΠΎΠΉΡ‚ΠΎ създавамС ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Всичко Π·Π°ΠΏΠΎΡ‡Π½Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ с Bash скриптовС, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‰ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Dockerfile, Π° послСднитС 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° пълно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ със собствСно Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ (ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π½Π° Ruby, Π° слСд Ρ‚ΠΎΠ²Π° прСписан Π½Π° Go, Π° ΡΡŠΡ‰ΠΎ ΠΈ ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½). Какви Π²ΡŠΠΏΡ€ΠΎΡΠΈ относно ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ са Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π² werf?

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, напълно рСалистично, Π²Π΅Ρ‡Π΅ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ хост, Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, отбСлязани Π² ΠΆΡŠΠ»Ρ‚ΠΎ, ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈΠΌ Π΄ΠΎ края Π½Π° лятото.

Π•Ρ‚Π°ΠΏ Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² registry (publish)

Π‘ΡŠΠ±Ρ€Π°Π»ΠΈ смС docker push… β€” ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° слоТно ΠΈΠΌΠ° Π² Ρ‚ΠΎΠ²Π° Π΄Π° ΠΊΠ°Ρ‡ΠΈΠΌ ΠΎΠ±Ρ€Π°Π· Π² registry? И Ρ‚ΡƒΠΊ възниква Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚: β€žΠšΠ°ΠΊΡŠΠ² Ρ‚Π°Π³ Π΄Π° поставим Π½Π° ΠΎΠ±Ρ€Π°Π·Π°?β€œ Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π° Ρ‚ΠΎΠΉ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Gitflow (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° Git стратСгия) ΠΈ Kubernetes, Π° индустрията сС стрСми Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ случващото сС Π² Kubernetes Π΄Π° слСдва Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π² Git. Нали Git Π΅ Π½Π°ΡˆΠΈΡΡ‚ СдинствСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° истина.

Какво Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° слоТно ΠΈΠΌΠ° Π² Ρ‚ΠΎΠ²Π°? Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° воспроизводимост: ΠΎΡ‚ ΠΊΠΎΠΌΠΈΡ‚Π° Π² Git, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎ своята ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½), Π΄ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Docker, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° останС ΡΡŠΡ‰ΠΈΡΡ‚.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° нас Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠ΄Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΡ‚ ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΈΡ‚ Π΅ ΡΡŠΠ±Ρ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ Π² Kubernetes (Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ diff'ΠΎΠ²Π΅ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅Ρ‰Π°).

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ Π·Π° Ρ‚Π°Π³ΠΈΡ€Π°Π½Π΅

ΠŸΡŠΡ€Π²Π°Ρ‚Π° Π΅ проста git tag. ИмамС Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ с ΠΎΠ±Ρ€Π°Π·, Ρ‚Π°Π³ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ 1.0. Π’ Kubernetes ΠΈΠΌΠ°ΠΌΠ΅ stage ΠΈ production, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Π΅ ΠΊΠ°Ρ‡Π΅Π½. Π’ Git ΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΈ Π² някакъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ слагамС Ρ‚Π°Π³ 2.0. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π³ΠΎ ΠΏΠΎ инструкциитС ΠΎΡ‚ рСпозитория ΠΈ Π³ΠΎ поставямС Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° с Ρ‚Π°Π³ 2.0. ΠŸΡƒΡΠΊΠ°ΠΌΠ΅ Π³ΠΎ Π½Π° stage ΠΈ, Π°ΠΊΠΎ всичко Π΅ Π½Π°Ρ€Π΅Π΄, слСд Ρ‚ΠΎΠ²Π° Π½Π° production.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ слагамС Ρ‚Π°Π³, Π° Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° тСствамС ΠΈ пускамС. Π—Π°Ρ‰ΠΎ? ΠŸΡŠΡ€Π²ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ просто Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ: ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ вСрсия Π½Π° софтуСр, ΠΊΠΎΠΉΡ‚ΠΎ Π΄ΠΎΡ€ΠΈ Π½Π΅ смС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ (Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ½Π°Ρ‡Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, трябва Π΄Π° слоТим Ρ‚Π°Π³). Π’Ρ‚ΠΎΡ€ΠΎ, Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π½Π΅ Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с Gitflow.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° опция Π΅ git commit + tag. Π’ master ΠΊΠ»ΠΎΠ½Π° ΠΈΠΌΠ° Ρ‚Π°Π³ 1.0; Π·Π° Π½Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° – ΠΎΠ±Ρ€Π°Π·, Ρ€Π°Π·Π³ΠΎΡ€Π½Π°Ρ‚ Π½Π° production. ОсвСн Ρ‚ΠΎΠ²Π°, Π² Kubernetes кластСра ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΈ preview ΠΈ staging. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° слСдвамС Gitflow: Π² основния ΠΊΠ»ΠΎΠ½ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (develop) ΠΏΡ€Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ сС появява ΠΊΠΎΠΌΠΈΡ‚ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ #c1. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π³ΠΎ ΠΈ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€(#c1). Π‘ Ρ‚Π°ΠΊΡŠΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³ΠΎ пускамС Π½Π° preview. Аналогично дСйствамС ΠΈ с ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ #c2 ΠΈ #c3.

. ΠšΠΎΠ³Π°Ρ‚ΠΎ осъзнаСм, Ρ‡Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° стабилизирамС всичко. Π’ Git създавамС ΠΊΠ»ΠΎΠ½ release_1.1 (Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° #c3 ΠΎΡ‚ develop). Π—Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π»ΠΈΠ· Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π΅Ρ‚Π°ΠΏ. Π—Π°Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π³ΠΎ пуснСм Π½Π° staging. ΠŸΠΎΠΏΡ€Π°Π²ΡΠΌΠ΅ Π±ΡŠΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π² #c4 ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π³ΠΎ пускамС Π½Π° staging. ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π² develop, ΠΎΡ‚ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ измСнСния ΠΎΡ‚ release_1.1. Π’ някакъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΡΡŠΠ±Ρ€Π°Π½ ΠΈ ΠΊΠ°Ρ‡Π΅Π½ Π½Π° staging ΠΊΠΎΠΌΠΈΡ‚, с ΠΊΠΎΠΉΡ‚ΠΎ смС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ (#c25).

. Π’ΠΎΠ³Π°Π²Π° ΠΏΡ€Π°Π²ΠΈΠΌ merge (с fast-forward) Π½Π° Ρ€Π΅Π»ΠΈΠ·Π½Π°Ρ‚Π° ΠΊΠ»ΠΎΠ½Π° (release_1.1) Π² master. Π‘Π»Π°Π³Π°ΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΈΡ‚ Ρ‚Π°Π³ с Π½ΠΎΠ²Π° вСрсия (1.1). Но Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Π²Π΅Ρ‡Π΅ Π΅ ΡΡŠΠ±Ρ€Π°Π½ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅, Π·Π° Π΄Π° Π½Π΅ Π³ΠΎ ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, просто добавямС Π²Ρ‚ΠΎΡ€ΠΈ Ρ‚Π°Π³ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ ΠΎΠ±Ρ€Π°Π· (сСга Ρ‚ΠΎΠΉ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° ΠΈΠΌΠ° Ρ‚Π°Π³ΠΎΠ²Π΅ #c25 ΠΈ 1.1). Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π³ΠΎ пускамС Π½Π° production.

Има Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, Ρ‡Π΅ Π½Π° staging Π΅ ΠΊΠ°Ρ‡Π΅Π½ Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π· (#c25), Π° Π½Π° production – ΠΊΠ°Ρ‚ΠΎ Ρ‡Π΅ Π»ΠΈ Π΄Ρ€ΡƒΠ³ (1.1), Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ «физичСски» Ρ‚ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠΈΡΡ‚ минус Π΅, Ρ‡Π΅ няма ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° merge commit'ΠΈ, трябва Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ fast-forward.

МоТСм Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡Π΅ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ трик… НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° прост Dockerfile:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

Π©Π΅ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ»Π° Π½Π° Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Ρ‡Π΅ Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ΠΌ:

  • SHA256 ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ (ruby:2.3 ΠΈ nginx:alpine), ΠΊΠΎΠΈΡ‚ΠΎ са ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΈ суми Π½Π° тяхното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅;
  • всички ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (RUN, CMD ΠΈ Ρ‚.Π½.);
  • SHA256 ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ.

… ΠΈ Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π° сума (ΠΎΡ‚Π½ΠΎΠ²ΠΎ SHA256) ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ». Π’ΠΎΠ²Π° сигнатура Π½Π° всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ опрСдСля ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Docker-ΠΎΠ±Ρ€Π°Π·Π°.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към схСмата ΠΈ вмСсто ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΊΠΈΠ²Π° сигнатури, Ρ‚.Π΅. Π΄Π° Ρ‚Π°Π³ΠΈΡ€Π°Π½Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ със сигнатури.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° β€˜merge’нСм ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ‚ Ρ€Π΅Π»ΠΈΠ· Π² master, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ истински merge commit: Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½ΠΎ ΡΡŠΡ‰Π°Ρ‚Π° сигнатура. Π‘ Ρ‚Π°ΠΊΡŠΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‰Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π½Π° производството.

ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ Π΅, Ρ‡Π΅ сСга Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ какъв ΠΊΠΎΠΌΠΌΠΈΡ‚ Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ Π½Π° производството β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΈΡ‚Π΅ суми работят само Π² Π΅Π΄Π½Π° посока. Π’Π°Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сС Ρ€Π΅ΡˆΠ°Π²Π° с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ слой ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ β€” Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠΎ-късно.

Π’Π°Π³ΠΈΡ€Π°Π½Π΅ Π² werf

Π’ werf ΠΎΡ‚ΠΈΠ΄ΠΎΡ…ΠΌΠ΅ ΠΎΡ‰Π΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡Π΅ ΠΈ сС подготвямС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ с кСш, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°β€¦ И Ρ‚Π°ΠΊΠ°, ΠΏΡ€ΠΈ нас сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚ Docker-ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΎΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ°, Π½ΠΈΠ΅ Π³ΠΈ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ stage ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’ Git-рСпозитория Π½Π° werf сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ спСцифични инструкции Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, описващи Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ (beforeInstall, install, beforeSetup, setup). ΠŸΡŠΡ€Π²ΠΈΡΡ‚ stage-ΠΎΠ±Ρ€Π°Π· ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ със сигнатура, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π° сума Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° добавямС изходния ΠΊΠΎΠ΄, Π·Π° новия stage-ΠΎΠ±Ρ€Π°Π· изчислявамС Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π° сума… Π’Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сС повтарят Π·Π° всички Π΅Ρ‚Π°ΠΏΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ stage-ΠΎΠ±Ρ€Π°Π·ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ„ΠΈΠ½Π°Π»Π΅Π½ image-ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠ΄. И Π²Π΅Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Ρ‚Π°Π³ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ (подробности ΠΏΠΎ-късно).

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

НСка слСд Ρ‚ΠΎΠ²Π° Π΄Π° сС появи Π½ΠΎΠ² ΠΊΠΎΠΌΠΈΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ само ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Какво Ρ‰Π΅ сС случи? Π—Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ΄Π° Ρ‰Π΅ бъдС създадСн ΠΏΠ°Ρ‚Ρ‡, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π½ΠΎΠ² stage-ΠΎΠ±Ρ€Π°Π·. НСговият подпис Ρ‰Π΅ бъдС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума Π½Π° стария stage-ΠΎΠ±Ρ€Π°Π· ΠΈ новия ΠΏΠ°Ρ‚Ρ‡. ΠžΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Ρ‰Π΅ бъдС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ ΠΈ Π½ΠΎΠ² Ρ„ΠΈΠ½Π°Π»Π΅Π½ image-ΠΎΠ±Ρ€Π°Π·. Подобно ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‰Π΅ сС случва ΠΈ ΠΏΡ€ΠΈ измСнСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, stage-ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ - кСш, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π° Π²Π΅Ρ‡Π΅ ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ image-ΠΎΠ±Ρ€Π°Π·ΠΈ сС ΠΊΠ°Ρ‡Π²Π°Ρ‚ Π² Docker Registry.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠŸΠΎΡ‡ΠΈΡΡ‚Π²Π°Π½Π΅ Π½Π° registry

Π’Π΅ΠΌΠ°Ρ‚Π° Π½Π΅ Π΅ Π·Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° слоСвС, ΠΊΠΎΠΈΡ‚ΠΎ са останали висящи слСд ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅ - Ρ‚ΠΎΠ²Π° Π΅ стандартна Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° самия Docker Registry. Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° ситуация, Π² която сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚ мноТСство Docker-Ρ‚Π°Π³ΠΎΠ²Π΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ част ΠΎΡ‚ тях Π²Π΅Ρ‡Π΅ Π½Π΅ са Π½ΠΈ Π½ΡƒΠΆΠ½ΠΈ, Π° Π·Π°Π΅ΠΌΠ°Ρ‚ място (ΠΈ/ΠΈΠ»ΠΈ Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅ Π·Π° Π½Π΅Π³ΠΎ).

Какви стратСгии Π·Π° почистванС ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚?

  1. МоТС просто Π΄Π° Π½Π΅ почистватС. Понякога наистина Π΅ ΠΏΠΎ-лСсно Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠΎ Π·Π° излишно пространство, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° Ρ€Π°Π·ΠΏΠ»Π΅Ρ‚Π΅Ρ‚Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΊΠ»ΡƒΠ±ΠΎΠΊ ΠΎΡ‚ Ρ‚Π°Π³ΠΎΠ²Π΅. Но Ρ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚.
  2. ПълСн Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅. Ако ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅Ρ‚Π΅ всички ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ само Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ Π² CI-систСмата, ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Ако Π½Π° production ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ сС рСстартира, Π·Π° Π½Π΅Π³ΠΎ Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ Π½ΠΎΠ² ΠΎΠ±Ρ€Π°Π· - Ρ‚Π°ΠΊΡŠΠ², ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‰Π΅ Π½Π΅ Π΅ тСстван ΠΎΡ‚ Π½ΠΈΠΊΠΎΠ³ΠΎ. Π’ΠΎΠ²Π° ΡƒΠ±ΠΈΠ²Π° идСята Π·Π° immutable infrastructure.
  3. Blue-green. Π•Π΄ΠΈΠ½ registry Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€Π΅Π»ΠΈΠ²Π° - ΠΊΠ°Ρ‡Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈ Π² Π΄Ρ€ΡƒΠ³. Π‘ΡŠΡ‰ΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄: Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° почиствамС Ρ‚ΠΎΠ·ΠΈ registry, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€Π΅Π»ΠΈΠ²Π°?
  4. По Π²Ρ€Π΅ΠΌΠ΅. Π”Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ всички ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΏΠΎ-стари ΠΎΡ‚ 1 мСсСц? Но ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° услуга, която Π½Π΅ Π΅ Π±ΠΈΠ»Π° обновявана цяла мСсСца...
  5. Π ΡŠΡ‡Π½ΠΎ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅.

Наистина ТизнСспособнитС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ са Π΄Π²Π°: Π΄Π° Π½Π΅ сС почиства ΠΈΠ»ΠΈ комбинация ΠΎΡ‚ blue-green + Ρ€ΡŠΡ‡Π½ΠΎ. Π’ послСдния случай става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° слСдното: ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° почиститС registry, ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π½ΠΎΠ² ΠΈ добавятС всички Π½ΠΎΠ²ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ Π² Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π·, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мСсСц. А слСд мСсСц Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΠΊΠΎΠΈ pod’овС Π² Kubernetes всС ΠΎΡ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ стария registry ΠΈ Π³ΠΈ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚Π΅ ΠΈ Π² новия registry.

Π”ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ стигнахмС Π² werf? ΠœΡ‹ собираСм:

  1. Git head: всички Ρ‚Π°Π³ΠΎΠ²Π΅, всички ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, - ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, Ρ‡Π΅ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Ρ‚Π°Π³Π½Π°Ρ‚ΠΎ Π² Git, Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈ Π² ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ (Π° Π°ΠΊΠΎ Π½Π΅ Π΅, Ρ‚ΠΎ трябва Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ Π² самия Git);
  2. всички pod’и, ΠΊΠΎΠΈΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° са ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ Π² Kubernetes;
  3. стари ReplicaSet’и (Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ наскоро бяха ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° сканирамС Helm-Ρ€Π΅Π»ΠΈΠ·ΠΈΡ‚Π΅ ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ послСднитС ΠΎΠ±Ρ€Π°Π·ΠΈ Ρ‚Π°ΠΌ.

… ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π½Π°Π±ΠΎΡ€ whitelist β€” списък с ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ няма Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅. Всичко останало изчиствамС, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ бСзстопанствСни stage-ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅ ΡΡŠΡ‰ΠΎ.

Π‘Ρ‚Π΅ΠΏΠ΅Π½ Π½Π° дСплоя (deploy)

НадСТдна дСкларативност

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π±ΠΈΡ… искал Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ дСплоя, Π΅ актуализацията Π½Π° конфигурацията Π½Π° рСсурситС, обявСна Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ‚ YAML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с описаниСто Π½Π° Kubernetes-рСсурситС Π²ΠΈΠ½Π°Π³ΠΈ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ наистина Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Kubernetes добавя Π² конфигурацията:

  1. ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ;
  2. слуТСбна информация;
  3. мноТСство стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅;
  4. сСкция с настоящия статус;
  5. ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° admission webhook;
  6. Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ (ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ°).

Π—Π°Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появи Π½ΠΎΠ²Π° конфигурация Π½Π° рСсурс (Π½ΠΎΠ²), Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ Π΄Π° я ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅ΠΌ с Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π°, β€žΠΆΠΈΠ²Π°β€œ, конфигурация (live). Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ трябва Π΄Π° сравним Π½ΠΎΠ² с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π° конфигурация (last-applied) ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ Π½Π° live получСния ΠΏΠ°Ρ‚Ρ‡.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сС Π½Π°Ρ€ΠΈΡ‡Π° 2-way merge. Π’ΠΎΠΉ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Helm.

Има ΠΈ 3-way merge, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΎΡ‚Π»ΠΈΡ‡Π°Π²Π° с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅:

  • ΠΏΡ€ΠΈ сравнСниС last-applied ΠΈ Π½ΠΎΠ², Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΎ;
  • ΠΏΡ€ΠΈ сравнСниС Π½ΠΎΠ² ΠΈ live, Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ;
  • сумарния ΠΏΠ°Ρ‚Ρ‡ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΠΌΠ΅ Π½Π° live.

Π”Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π°Π΄ 1000 прилоТСния с Helm, Π·Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅Π°Π»Π½ΠΎ ΠΆΠΈΠ²Π΅Π΅ΠΌ с 2-way merge. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠΉ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ с Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ, ΠΏΠΎΠΌΠ°Π³Π°Ρ‰ΠΈ Π½Π° Helm Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ.

Π Π΅Π°Π»Π΅Π½ статус Π½Π° пусканСто

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΡ€Π΅Π΄Π½ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° CI систСма Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π»Π° Π½ΠΎΠ²Π° конфигурация Π·Π° Kubernetes, тя я ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (apply) Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° β€” с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Helm ΠΈΠ»ΠΈ kubectl apply. Π‘Π»Π΅Π΄Π²Π° Π²Π΅Ρ‡Π΅ описания N-way merge, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Kubernetes API ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ отговаря Π½Π° CI систСмата, Π° тя β€” Π½Π° потрСбитСля.

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Π΄Π΅ΠΏΠ»ΠΎΠΉ . Ако Kubernetes Π΅ Ρ€Π°Π·Π±Ρ€Π°Π» ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ трябва Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ, ΠΏΡ€ΠΈΠ»Π°Π³Π° Π³ΠΈ β€” всС ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ какъв Ρ‰Π΅ бъдС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚. НапримСр, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΡŠΡ‚ Π½Π° pod’итС във Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π° Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° β€” Π½Π΅, ΠΈ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° стартиранитС ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.. Если Kubernetes понял, Ρ‡Ρ‚ΠΎ Π·Π° измСнСния Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, примСняСт Π΅Π³ΠΎ β€” ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ получится Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅. НапримСр, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ рСстарт pod’ов Π²ΠΎ frontend’С ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π° Π² backend’С β€” Π½Π΅Ρ‚, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² прилоТСния.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ всичко ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π² Ρ‚Π°Π·ΠΈ схСма сС Π½Π°Π»Π°Π³Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ β€” спСциалСн Ρ‚Ρ€Π°ΠΊΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° информация Π·Π° статуса ΠΎΡ‚ Kubernetes API ΠΈ Ρ‰Π΅ я ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ€Π΅Π°Π»Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° Π½Π΅Ρ‰Π°Ρ‚Π°. Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Open Source Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Go β€” kubedog (Π²ΠΈΠΆΡ‚Π΅ анонса ѝ Ρ‚ΡƒΠΊ), β€” която Ρ€Π΅ΡˆΠ°Π²Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π° Π² werf.

ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚Ρ€Π°ΠΊΠ΅Ρ€ Π½Π° Π½ΠΈΠ²ΠΎ werf сС настройва с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС поставят Π½Π° Deployments ΠΈΠ»ΠΈ StatefulSets. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° анотация β€” fail-mode β€” Ρ€Π°Π·Π±ΠΈΡ€Π° слСднитС стойности:

  • IgnoreAndContinueDeployProcess β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ с дСплоя;
  • FailWholeDeployProcessImmediately β€” Π³Ρ€Π΅ΡˆΠΊΠ° Π² Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ спира процСса Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ;
  • HopeUntilEndOfDeployProcess β€” надявамС сС, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‰Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎ края Π½Π° дСплоя.

НапримСр, Ρ‚Π°ΠΊΠ°Π²Π° комбинация ΠΎΡ‚ рСсурси ΠΈ стойности Π½Π° анотацията fail-mode:

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (MongoDB) ΠΌΠΎΠΆΠ΅ всС ΠΎΡ‰Π΅ Π΄Π° Π½Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° β€” Deployment-ΠΈΡ‚Π΅ Ρ‰Π΅ ΠΏΠ°Π΄Π½Π°Ρ‚. Но ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ тя стартира, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ всС ΠΏΠ°ΠΊ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅.

Има ΠΎΡ‰Π΅ Π΄Π²Π΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π·Π° kubedog Π² werf:

  • failures-allowed-per-replica β€” Π±Ρ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ падСния Π½Π° всяка Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°;
  • show-logs-until β€” Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π΄ΠΎ ΠΊΠΎΠΉΡ‚ΠΎ werf ΠΏΠΎΠΊΠ°Π·Π²Π° (Π² stdout) Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΎΡ‚ всички Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Ρ‰ΠΈ сС pod-ΠΎΠ²Π΅. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠ²Π° Π΅ PodIsReady (Π·Π° Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π΅Π΄Π²Π° Π»ΠΈ Π½ΠΈ трябват, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π° pod Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΈΠ΄Π²Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ), Π½ΠΎ са допустими ΠΈ стойности ControllerIsReady ΠΈ EndOfDeploy.

Какво ΠΎΡ‰Π΅ искамС ΠΎΡ‚ дСплоя?

ОсвСн Π²Π΅Ρ‡Π΅ описанитС Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, искамС Π΄Π°:

  • Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ β€” Π½ΠΎ само Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅, Π° Π½Π΅ всички Π½Π°Ρ€Π΅Π΄;
  • прослСдявамС Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊΠ°,Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π°ΠΊΠΎ job Β«ΠΌΡŠΠ»Ρ‡ΠΈΒ» няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случва;
  • ΠΈΠΌΠ°ΠΌΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ ΠΎΡ‚ΠΊΠ°Ρ‚ Π² случай, Ρ‡Π΅ Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄ (Π° Π·Π°Ρ‚ΠΎΠ²Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π΅ Π΄Π° Π·Π½Π°Π΅ΠΌ рСалния статус Π½Π° дСплоя). Π Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚ΠΈΡΡ‚ процСс трябва Π΄Π° бъдС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π΅Π½: ΠΈΠ»ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° Π΄ΠΎΠΊΡ€Π°ΠΉ, ΠΈΠ»ΠΈ всичко сС Π²Ρ€ΡŠΡ‰Π° Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

РСзюмС

ΠšΠ°Ρ‚ΠΎ компания, Π·Π° Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ всички описани нюанси Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° доставки (build, publish, deploy), Π½ΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° CI систСма ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°. werf.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° werf Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Ρ…ΠΌΠ΅ Π² Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌΠ΅, Π°ΠΊΠΎ ΠΏΠΎ-ΡˆΠΈΡ€ΠΎΠΊΠ°Ρ‚Π° общност ΠΏΠΎΠ½Π΅ ΠΎΠΏΠΈΡ‚Π° Ρ‚Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π”Π° постигнСм Π΄ΠΎΠ±ΡŠΡ€ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎ-лСсно.

Π’ΠΈΠ΄Π΅ΠΎ ΠΈ слайдовС

Π’ΠΈΠ΄Π΅ΠΎ ΠΎΡ‚ прСдставянСто (~47 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ):

ΠŸΡƒΡΠ½Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎΡ‚ΠΎ

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°:

P.S.

Π”Ρ€ΡƒΠ³ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π·Π° Kubernetes Π² нашия Π±Π»ΠΎΠ³:

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster