27 ΠΌΠ°Ρ Π² Π³Π»Π°Π²Π½ΠΎΠΌ Π·Π°Π»Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ DevOpsConf 2019, ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡΠ΅ΠΉ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠ΅ΡΡΠΈΠ²Π°Π»Ρ
Π‘ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π½Π°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° (ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΊΠ°ΠΊ dapp) ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π»Π° ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ±Π΅ΠΆ Π² 1000 Π·Π²ΡΠ·Π΄ Π½Π° GitHub β ΠΌΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ ΡΠ°ΡΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠΏΡΠΎΡΡΠΈΡ ΠΆΠΈΠ·Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠΌ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌ.
ΠΡΠ°ΠΊ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ
ΠΠΎΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° Π² Kubernetes
Π Π΅ΡΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΏΠΎΠΉΠ΄ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΡΠΎ werf, Π° ΠΏΡΠΎ CI/CD Π² Kubernetes, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ, ΡΡΠΎ Π½Π°Ρ ΡΠΎΡΡ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ (ΠΎΠ± ΡΡΠΎΠΌ Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» Π²
ΠΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π² Kubernetes?
- ΠΡΡΡ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ±ΠΎΡΠΊΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π² Docker-ΠΎΠ±ΡΠ°Π· ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ Π² Docker Registry.
- Π ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ. ΠΠ° ΡΡΠ°Π΄ΠΈΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² Kubernetes, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈΠ· registry ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΅Π³ΠΎ.
- ΠΠ»ΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ Π΅ΡΡΡ ΡΠ΅ΡΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π·Π°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ (ΠΏΠΎ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ) ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ K8s ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅) ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΡΡ ΡΠ°ΠΌ.
- ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½ΡΠΆΠ½Π° CI-ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ· Git’Π° (ΠΈΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ) ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ°Π΄ΠΈΠΈ: build, publish, deploy, test.
ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½ΡΡ
Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠΉ:
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π°Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° (immutable infrastructure), ΠΎΠ±ΡΠ°Π· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° Π²ΡΠ΅Ρ
ΡΡΠ°ΠΏΠ°Ρ
(staging, production ΠΈ Ρ.ΠΏ.), Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»
Π·Π΄Π΅ΡΡ . - ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ (IaC), ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π»Π΅ΠΆΠ°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ β ΡΠΌ. Π²
ΡΠΎΠΌ ΠΆΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ . - Π¦Π΅ΠΏΠΎΡΠΊΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ (delivery) ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°ΠΊ: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΠ°Π»ΠΈ, ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ, ΡΠ΅Π»ΠΈΠ·Π½ΡΠ»ΠΈ (ΡΡΠ°ΠΏ release) ΠΈ Π²ΡΡ β Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°. ΠΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²Ρ Π²ΡΠΊΠ°ΡΠΈΠ»ΠΈ, Π½Π΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΡΠΎ Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π² production, Π° ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠΌΠΎΠ³ ΡΡΠ΄Π° Π·Π°ΠΉΡΠΈ ΠΈ ΡΡΠΎΡ production ΡΠ°Π±ΠΎΡΠ°Π». ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ (run), Π° Π΅ΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΡΠ½Π΅Π΅, ΡΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΡΠ±ΡΠ°Π»ΠΈ Ρ production (Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π΅Π³ΠΎ Π½Π° Π½ΠΎΠ²ΡΠΉ).
ΠΠ΅ΡΠ½ΡΠΌΡΡ ΠΊ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΡΡ
Π΅ΠΌΠ΅ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π² Kubernetes: Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ΅Π»ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ, Π½ΠΎ ΠΈ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ, ΠΊΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π»ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠΎ ΡΡΡΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Π·ΡΠ²Π°ΡΡ GitOps (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π΅ ΠΈ ΡΡΠΎΡΡΠΈΠΌΠΈ Π·Π° Π½ΠΈΠΌ ΠΈΠ΄Π΅ΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ
Π‘ΡΠ°Π΄ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ (build)
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π² 2019 Π³ΠΎΠ΄Ρ ΠΏΡΠΎ ΡΠ±ΠΎΡΠΊΡ Docker-ΠΎΠ±ΡΠ°Π·ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠΌΠ΅ΡΡ ΠΏΠΈΡΠ°ΡΡ Dockerfile’Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ docker build
?.. ΠΠΎΡ Π½ΡΠ°Π½ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:
- ΠΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
multi-stage , ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ Π² ΠΎΠ±ΡΠ°Π·Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. - ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΡΠ² Π½Π°Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΠ·
RUN
-ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎ ΡΠΌΡΡΠ»Ρ. - ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΡΡΠΊΠΈΠ²Π°ΡΡ ΡΡ Π½ΡΠΆΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΡΠ΅ΠΏΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·Π²Π°Π»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
- Π‘ΠΊΠΎΡΠΎΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π²Π°ΠΆΠ½Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π±ΡΡΡΡΠΎ Π²ΡΠΊΠ°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- ΠΠ°ΡΠ°ΡΡΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΡΠ΅Π±ΡΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ· Dockerfile’ΠΎΠ² (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°Π΄ΠΈΡΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅) ΠΈ Bash-ΡΠΊΡΠΈΠΏΡΠΎΠΌ Ρ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ.
ΠΡΠΎ Π±ΡΠ»Π° Π»ΠΈΡΡ Π²Π΅ΡΡ ΡΡΠΊΠ° Π°ΠΉΡΠ±Π΅ΡΠ³Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅. ΠΠΎ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π° Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ:
- ΠΠ°ΡΠ°ΡΡΡΡ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΈΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΈΠΏΠ° apt’Π° Π² ΡΡΠΎΡΠΎΠ½Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ).
- ΠΡ Ρ ΠΎΡΠΈΠΌ Ansible Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΈΡΠ°ΡΡ Π½Π° shell’Π΅.
- ΠΡ Ρ ΠΎΡΠΈΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π±Π΅Π· Docker (Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Π΄ΠΎ Π²ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΆΠ΅ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ?).
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ: ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· Dockerfile (Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ multi-stage), Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Dockerfile’ΠΎΠ².
- Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°: ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ Π² pod’Π°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Β«ΡΡΠ΅ΠΌΠ΅ΡΠ½ΡΠΌΠΈΒ», Ρ.ΠΊ. Ρ Π½ΠΈΡ ΠΏΡΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΊΡΡ, Π° Π·Π½Π°ΡΠΈΡ β Π΅Π³ΠΎ Π½Π°Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π³Π΄Π΅-ΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
- ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²Π΅ΡΡΠΈΠ½Ρ ΠΆΠ΅Π»Π°Π½ΠΈΠΉ Ρ Π½Π°Π·Π²Π°Π» Π°Π²ΡΠΎΠΌΠ°Π³ΠΈΠ΅ΠΉ: ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΉΡΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π½Π°Π±ΡΠ°ΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΉ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π»ΠΈΡΠ½ΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π²ΡΠ΅ Π½ΡΠ°Π½ΡΡ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ.
Π Π²ΠΎΡ Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ:
-
moby/buildkit β ΡΠ±ΠΎΡΡΠΈΠΊ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Docker Inc (ΡΠΆΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Docker), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ; -
kaniko β ΡΠ±ΠΎΡΡΠΈΠΊ ΠΎΡ Google, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π±Π΅Π· Docker; -
Buildpacks.io β ΠΏΠΎΠΏΡΡΠΊΠ° CNCF ΡΠ΄Π΅Π»Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°Π³ΠΈΡ ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ rebase Π΄Π»Ρ ΡΠ»ΠΎΡΠ²; - ΠΈ Π΅ΡΡ ΠΊΡΡΠ° Π΄ΡΡΠ³ΠΈΡ
ΡΡΠΈΠ»ΠΈΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ
buildah ,genuinetools/img β¦
β¦ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π½ΠΈΡ
Π·Π²ΡΠ·Π΄ Π½Π° GitHub. Π’ΠΎ Π΅ΡΡΡ, Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, docker build
Π΅ΡΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ-ΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π½Π΅ ΡΠ΅ΡΡΠ½ β Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ ΡΡΠΎΠΌΡ ΠΈ ΡΠ»ΡΠΆΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ
ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΡΠ°Π΅Ρ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π‘Π±ΠΎΡΠΊΠ° Π² werf
Π’Π°ΠΊ ΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π»ΠΈΡΡ ΠΊ
ΠΠ°ΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΡΠΈΠ½ΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° ΡΠ΄Π΅Π»Π°Π½Π° Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ°, Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΆΡΠ»ΡΡΠΌ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ Π΄ΠΎΠ΄Π΅Π»Π°ΡΡ ΠΊ ΠΊΠΎΠ½ΡΡ Π»Π΅ΡΠ°.
Π‘ΡΠ°Π΄ΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π² registry (publish)
ΠΠ°Π±ΡΠ°Π»ΠΈ docker push
β¦ β ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΎΠ±ΡΠ°Π· Π² registry? Π ΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: Β«ΠΠ°ΠΊΠΎΠΉ ΡΠ΅Π³ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°Π·Ρ?Β» ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΠ½ ΠΏΠΎ ΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Gitflow (ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Git’Π°) ΠΈ Kubernetes, Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡΠ΅Π΅ Π² Kubernetes ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² Git. ΠΠ΅Π΄Ρ Git β Π½Π°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΡΠ°Π²Π΄Ρ.
Π§ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ? ΠΠ°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ: ΠΎΡ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π² Git, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΉ (immutable), Π΄ΠΎ ΠΎΠ±ΡΠ°Π·Π° Docker, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅.
ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π±ΡΠ»ΠΎ ΡΠΎΠ±ΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ Π² Kubernetes (ΡΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ diff’Ρ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π²Π΅ΡΠΈ).
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ΅ΡΠ²Π°Ρ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ git tag. Π£ Π½Π°Ρ Π΅ΡΡΡ registry Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠ°ΠΊ 1.0
. Π Kubernetes Π΅ΡΡΡ stage ΠΈ production, ΠΊΡΠ΄Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π· Π²ΡΠΊΠ°ΡΠ΅Π½. Π Git ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π³ 2.0
. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² registry Ρ ΡΠ΅Π³ΠΎΠΌ 2.0
. ΠΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌ Π½Π° stage ΠΈ, Π΅ΡΠ»ΠΈ Π²ΡΡ Ρ
ΠΎΡΠΎΡΠΎ, ΠΏΠΎΡΠΎΠΌ Π½Π° production.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ΅Π³, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈ Π²ΡΠΊΠ°ΡΠΈΠ»ΠΈ. ΠΠΎΡΠ΅ΠΌΡ? ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π»ΠΎΠ³ΠΈΡΠ½ΠΎ: ΠΌΡ Π²ΡΠ΄Π°Π΅ΠΌ Π²Π΅ΡΡΠΈΡ ΡΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ»ΠΈ (Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ½Π°ΡΠ΅, Ρ.ΠΊ. Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³). ΠΠΎ-Π²ΡΠΎΡΡΡ
, ΡΠ°ΠΊΠΎΠΉ ΠΏΡΡΡ Π½Π΅ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ Gitflow.
ΠΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β git commit + tag. Π master-Π²Π΅ΡΠΊΠ΅ Π΅ΡΡΡ ΡΠ΅Π³ 1.0
; Π΄Π»Ρ Π½Π΅Π³ΠΎ Π² registry β ΠΎΠ±ΡΠ°Π·, ΡΠ°Π·Π²ΡΡΠ½ΡΡΡΠΉ Π½Π° production. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡ preview ΠΈ staging. ΠΠ°Π»ΡΡΠ΅ ΠΌΡ ΡΠ»Π΅Π΄ΡΠ΅ΠΌ Gitflow: Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (develop
) Π΄Π΅Π»Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΡΠΈ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ #c1
. ΠΡ Π΅Π³ΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π² registry, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (#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
). ΠΠΎ ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π· ΡΠΆΠ΅ ΡΠΎΠ±ΡΠ°Π½ Π² registry, ΠΏΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π΅ΡΡ ΡΠ°Π·, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠ΅Π³ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π· (ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ Π² registry ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π³ΠΈ #c25
ΠΈ 1.1
). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° production.
ΠΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ, ΡΡΠΎ Π½Π° staging Π²ΡΠΊΠ°ΡΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π· (#c25
), Π° Π½Π° production β ΠΊΠ°ΠΊ Π±Ρ Π΄ΡΡΠ³ΠΎΠΉ (1.1
), Π½ΠΎ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Β«ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΒ» ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π· ΠΈΠ· registry.
ΠΠ°ΡΡΠΎΡΡΠΈΠΉ ΠΆΠ΅ ΠΌΠΈΠ½ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ 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-ΠΎΠ±ΡΠ°Π·Π°.
ΠΠ΅ΡΠ½ΡΠΌΡΡ ΠΊ ΡΡ
Π΅ΠΌΠ΅ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΠ³Π½Π°ΡΡΡΡ, Ρ.Π΅. ΡΠ΅Π³ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π·Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠ°ΠΌΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ’merge’ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· ΡΠ΅Π»ΠΈΠ·Π° Π² master, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Π½Π°ΡΡΠΎΡΡΠΈΠΉ merge commit: Ρ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π½ΠΎ ΡΠ° ΠΆΠ΅ ΡΠΈΠ³Π½Π°ΡΡΡΠ°. Π‘ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΌΡ Π²ΡΠΊΠ°ΡΠΈΠΌ ΠΎΠ±ΡΠ°Π· ΠΈ Π½Π° production.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ Π·Π° ΠΊΠΎΠΌΠΌΠΈΡ Π²ΡΠΊΠ°ΡΠ΅Π½ Π½Π° production β ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΠΌΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½Ρ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ°Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ»ΠΎΠ΅ΠΌ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ β ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π΄Π°Π»ΡΡΠ΅.
Π’Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² werf
Π werf ΠΌΡ ΠΏΠΎΡΠ»ΠΈ Π΅ΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΈ Π³ΠΎΡΠΎΠ²ΠΈΠΌΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ±ΠΎΡΠΊΡ Ρ ΠΊΡΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅β¦ ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Docker-ΠΎΠ±ΡΠ°Π·Ρ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ², ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ ΠΈΡ stage ΠΈ image.
Π Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ werf Ρ ΡΠ°Π½ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π·Π½ΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ (beforeInstall, install, beforeSetup, setup). ΠΠ΅ΡΠ²ΡΠΉ stage-ΠΎΠ±ΡΠ°Π· ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° ΠΏΠ΅ΡΠ²ΡΡ ΡΠ°Π³ΠΎΠ². ΠΠ°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ stage-ΠΎΠ±ΡΠ°Π·Π° ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡβ¦ ΠΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ², Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π°Π±ΠΎΡ ΠΈΠ· stage-ΠΎΠ±ΡΠ°Π·ΠΎΠ². ΠΠ°ΡΠ΅ΠΌ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ image-ΠΎΠ±ΡΠ°Π·, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π΅Π³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ. Π ΡΠΆΠ΅ ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π· ΠΌΡ ΡΠ΅Π³ΠΈΡΡΠ΅ΠΌ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎΠ·ΠΆΠ΅).
ΠΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ? ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΏΠ°ΡΡ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ stage-ΠΎΠ±ΡΠ°Π·. ΠΠ³ΠΎ ΡΠΈΠ³Π½Π°ΡΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° ΡΡΠ°ΡΠΎΠ³ΠΎ stage-ΠΎΠ±ΡΠ°Π·Π° ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ°. ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ image-ΠΎΠ±ΡΠ°Π·. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ
Π½Π° Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ°ΠΏΠ°Ρ
.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, stage-ΠΎΠ±ΡΠ°Π·Ρ β ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ, Π° ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΈΠ· Π½Π΅Π³ΠΎ image-ΠΎΠ±ΡΠ°Π·Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² Docker Registry.
ΠΡΠΈΡΡΠΊΠ° registry
Π Π΅ΡΡ ΠΏΠΎΠΉΠ΄ΡΡ Π½Π΅ ΠΏΡΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠ°Π»ΠΈΡΡ Π²ΠΈΡΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΡΠ΅Π³ΠΎΠ², β ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Docker Registry. Π Π΅ΡΡ ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Docker-ΡΠ΅Π³ΠΎΠ² ΠΈ ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡ ΡΠ°ΡΡΡ Π½Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π° ΠΌΠ΅ΡΡΠΎ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ (ΠΈ/ΠΈΠ»ΠΈ ΠΌΡ Π·Π° Π½Π΅Π³ΠΎ ΠΏΠ»Π°ΡΠΈΠΌ).
ΠΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΎΡΠΈΡΡΠΊΠΈ?
- ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΈΡΡΠΈΡΡ. ΠΠ½ΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠ»Π°ΡΠΈΡΡ Π·Π° Π»ΠΈΡΠ½Π΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΡΠ΅ΠΌ ΡΠ°ΡΠΏΡΡΡΠ²Π°ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΊΠ»ΡΠ±ΠΎΠΊ ΠΈΠ· ΡΠ΅Π³ΠΎΠ². ΠΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈΡΡ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
- ΠΠΎΠ»Π½ΡΠΉ ΡΠ±ΡΠΎΡ. ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π² CI-ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΡΠ»ΠΈ Π½Π° production ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π΄Π»Ρ Π½Π΅Π³ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· β ΡΠ°ΠΊΠΎΠΉ, ΡΡΠΎ Π΅ΡΠ΅ Π½ΠΈΠΊΠ΅ΠΌ Π½Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ. ΠΡΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Ρ immutable infrastructure.
- Blue-green. ΠΠ΄ΠΈΠ½ registry Π½Π°ΡΠ°Π» ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΡΡΡΡΡ β Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π·Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ. Π’Π° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅: Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΡ registry, ΡΡΠΎ Π½Π°ΡΠ°Π» ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΡΡΡΡΡ?
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π£Π΄Π°Π»ΡΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ ΡΡΠ°ΡΡΠ΅ 1 ΠΌΠ΅ΡΡΡΠ°? ΠΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΉΠ΄ΡΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΡΡ ΡΠ΅Π»ΡΠΉ ΠΌΠ΅ΡΡΡβ¦
- ΠΡΡΡΠ½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΡΡΠΎ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ.
ΠΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π²Π°: Π½Π΅ ΡΠΈΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΈΠ· blue-green + Π²ΡΡΡΠ½ΡΡ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ° ΠΏΠΎΡΠΈΡΡΠΈΡΡ registry, ΡΠΎΠ·Π΄Π°ΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ Π²ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π² Π½Π΅Π³ΠΎ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΡΡΠ°. Π ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΡΡ ΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ pod’Ρ Π² Kubernetes ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ°ΡΡΠΉ registry, ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΠ΅ ΠΈΡ ΡΠΎΠΆΠ΅ Π² Π½ΠΎΠ²ΡΠΉ registry.
Π ΡΠ΅ΠΌΡ ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ Π² werf? ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ:
- Git head: Π²ΡΠ΅ ΡΠ΅Π³ΠΈ, Π²ΡΠ΅ Π²Π΅ΡΠΊΠΈ, β ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ Π²ΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΎ Π² Git, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈ Π² ΠΎΠ±ΡΠ°Π·Π°Ρ (Π° Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ Π½Π°Π΄ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Git’Π΅);
- Π²ΡΠ΅ pod’Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΊΠ°ΡΠ΅Π½Ρ ΡΠ΅ΠΉΡΠ°Ρ Π² Kubernetes;
- ΡΡΠ°ΡΡΠ΅ ReplicaSet’Ρ (ΡΠΎ, ΡΡΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠΊΠ°ΡΠ΅Π½ΠΎ), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Helm-ΡΠ΅Π»ΠΈΠ·Ρ ΠΈ ΠΎΡΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Ρ ΡΠ°ΠΌ.
β¦ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° whitelist β ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ°Π·ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ΄Π°Π»ΡΡΡ. ΠΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΡΠΈΡΠ°Π΅ΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΡΠΈΡΠΎΡΡΠΊΠΈΠ΅ stage-ΠΎΠ±ΡΠ°Π·Ρ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΈΡ ΡΠΎΠΆΠ΅.
Π‘ΡΠ°Π΄ΠΈΡ Π΄Π΅ΠΏΠ»ΠΎΡ (deploy)
ΠΠ°Π΄ΡΠΆΠ½Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ
ΠΠ΅ΡΠ²ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π΄Π΅ΠΏΠ»ΠΎΠ΅, β Π²ΡΠΊΠ°Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ YAML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Kubernetes-ΡΠ΅ΡΡΡΡΠΎΠ² Π²ΡΠ΅Π³Π΄Π° ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Kubernetes Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
- ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ;
- ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ;
- ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ;
- ΡΠ΅ΠΊΡΠΈΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΡΠ°ΡΡΡΠΎΠΌ;
- ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΡ admission webhook;
- ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² (ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°).
ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΡΡΡΠ° (new), ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π²Π·ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ, Β«ΠΆΠΈΠ²ΡΡΒ», ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (live). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΡΠ°Π²Π½ΠΈΡΡ new Ρ ΠΏΡΠΎΡΠ»ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΡΠ½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ (last-applied) ΠΈ Π½Π°ΠΊΠ°ΡΠΈΡΡ Π½Π° live ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΏΠ°ΡΡ.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ 2-way merge. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Helm.
ΠΡΡΡ Π΅ΡΡ ΠΈ 3-way merge, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ:
- ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ last-applied ΠΈ new, ΠΌΡ ΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΎ;
- ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ new ΠΈ live, ΠΌΡ ΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½ΠΎ;
- ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΡ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ Π½Π° live.
ΠΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ 1000+ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ Helm, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΆΠΈΠ²ΡΠΌ Ρ 2-way merge. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΡΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΠ°ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠΌΠΈ Helm’Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π Π΅Π°Π»ΡΠ½ΡΠΉ ΡΡΠ°ΡΡΡ Π²ΡΠΊΠ°ΡΠ°
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΡΠ° CI-ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»Π° Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ Kubernetes, ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (apply) Π² ΠΊΠ»Π°ΡΡΠ΅Ρ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ Helm ΠΈΠ»ΠΈ kubectl apply
. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ N-way merge, Π½Π° ΡΡΠΎ Kubernetes API ΠΎΠ΄ΠΎΠ±ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ CI-ΡΠΈΡΡΠ΅ΠΌΠ΅, Π° ΡΠ° β ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π²Π΅Π΄Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ Π²ΡΠΊΠ°Ρ. ΠΡΠ»ΠΈ Kubernetes ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ β ΠΌΡ Π΅ΡΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠ°ΡΡ pod’ΠΎΠ² Π²ΠΎ frontend’Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π° Π² backend’Π΅ β Π½Π΅Ρ, ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π§ΡΠΎΠ±Ρ Π²ΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π² ΡΡΠΎΠΉ ΡΡ
Π΅ΠΌΠ΅ Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π²Π΅Π½ΠΎ β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡ Kubernetes API ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ°ΡΡΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅Ρ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Π΅ΡΠ΅ΠΉ. ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Open Source-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Go β
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ΅ΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ werf Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π²ΡΡΡΡ Π½Π° Deployments ΠΈΠ»ΠΈ StatefulSets. ΠΠ»Π°Π²Π½Π°Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ β fail-mode
β ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
-
IgnoreAndContinueDeployProcess
β ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΡΠΊΠ°ΡΠ° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΉ; -
FailWholeDeployProcessImmediately
β ΠΎΡΠΈΠ±ΠΊΠ° Π² ΡΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π΅ΠΏΠ»ΠΎΡ; -
HopeUntilEndOfDeployProcess
β Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊ ΠΊΠΎΠ½ΡΡ Π΄Π΅ΠΏΠ»ΠΎΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ fail-mode
:
ΠΠΎΠ³Π΄Π° Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·, Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
(MongoDB) Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ Π³ΠΎΡΠΎΠ²Π° β Deployment’Ρ ΡΠΏΠ°Π΄ΡΡ. ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π·Π°ΠΏΡΡΡΠΈΠ»Π°ΡΡ, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π²ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠΉΠ΄ΡΡ.
ΠΡΡΡ Π΅ΡΡ Π΄Π²Π΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π»Ρ kubedog Π² werf:
-
failures-allowed-per-replica
β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ΅ΡΡΠ½Π½ΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ; -
show-logs-until
β ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅Ρ ΠΌΠΎΠΌΠ΅Π½Ρ, Π΄ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ werf ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ (Π² stdout) Π»ΠΎΠ³ΠΈ ΠΈΠ· Π²ΡΠ΅Ρ Π²ΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ pod’ΠΎΠ². ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎPodIsReady
(ΡΡΠΎΠ±Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π²ΡΡΠ΄ Π»ΠΈ Π½ΡΠΆΠ½Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π° pod Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ ΡΡΠ°ΡΠΈΠΊ), ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡControllerIsReady
ΠΈEndOfDeploy
.
Π§ΡΠΎ Π΅ΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡ Π΄Π΅ΠΏΠ»ΠΎΡ?
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π΄Π²ΡΡ ΠΏΡΠ½ΠΊΡΠΎΠ² Π½Π°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ:
- Π²ΠΈΠ΄Π΅ΡΡ Π»ΠΎΠ³ΠΈ β ΠΏΡΠΈΡΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅, Π° Π½Π΅ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄;
- ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ job Β«ΠΌΠΎΠ»ΡΠ°Β» Π²ΠΈΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ;
- ΠΈΠΌΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΠΊΠ°Ρ Π½Π° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ (Π° ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π·Π½Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΡΠ°ΡΡΡ Π΄Π΅ΠΏΠ»ΠΎΡ). ΠΡΠΊΠ°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌ: ΠΈΠ»ΠΈ ΠΎΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°, ΠΈΠ»ΠΈ Π²ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
ΠΡΠΎΠ³ΠΈ
ΠΠ°ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ
ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½ΡΠ°Π½ΡΠΎΠ² Π½Π° ΡΠ°Π·Π½ΡΡ
ΡΡΠ°ΠΏΠ°Ρ
Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ (build, publish, deploy) Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ CI-ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΡΠΈΠ»ΠΈΡΡ
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ werf ΠΌΡ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π΄Ρ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Ρ
ΠΎΡΡ Π±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅Ρ ΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ Π² Π΄Π΅Π»Π΅. ΠΠΎΠ±ΠΈΡΡΡΡ Ρ
ΠΎΡΠΎΡΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΠΌΠ΅ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅.
ΠΠΈΠ΄Π΅ΠΎ ΠΈ ΡΠ»Π°ΠΉΠ΄Ρ
ΠΠΈΠ΄Π΅ΠΎ Ρ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ (~47 ΠΌΠΈΠ½ΡΡ):
ΠΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
P.S.
ΠΡΡΠ³ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΠΏΡΠΎ Kubernetes Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π² Kubernetes Β» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 27 Π°ΠΏΡΠ΅Π»Ρ 2019 Π½Π° Β«Π‘ΡΠ°ΡΠΊΠ΅Β»); - Β«
Π Π°ΡΡΠΈΡΡΠ΅ΠΌ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Kubernetes Β» (ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠΎΠ»ΠΎΠ²ΠΎΠ²; 8 Π°ΠΏΡΠ΅Π»Ρ 2019 Π½Π° Saint HighLoad++); - Β«
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Kubernetes Β» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 8 Π½ΠΎΡΠ±ΡΡ 2018 Π½Π° HighLoad++); - Β«
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ Kubernetes Β» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 28 ΠΌΠ°Ρ 2018 Π½Π° RootConf); - Β«
ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ CI/CD Ρ Kubernetes ΠΈ GitLab Β» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 7 Π½ΠΎΡΠ±ΡΡ 2017 Π½Π° HighLoad++); - Β«
ΠΠ°Ρ ΠΎΠΏΡΡ Ρ Kubernetes Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Β» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 6 ΠΈΡΠ½Ρ 2017 Π½Π° RootConf).
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com