
ΠΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°, Π½Π° 5 ΠΌΠ°ΡΡ 2018 Π³., Google ΠΏΡΡΠ½Π° ΠΏΡΡΠ²Π°ΡΠ° Π°Π»ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ²ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° CI/CD, Π½Π°ΡΠ΅ΡΠ΅Π½ , ΡΠΈΡΡΠΎ ΡΠ΅Π» Π±Π΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ βΠΏΡΠΎΡΡΠ° ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Kubernetesβ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ°Ρ Π²ΡΡΡ
Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°, Π° Π½Π΅ Π²ΡΡΡ
Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ. ΠΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π·Π° Skaffold? ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΡΠΎΠΉ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΈΠΊΠ° Π² ΡΡΠΊΠ°Π²Π° ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΡΡ ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΄ΠΎΡΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ. ΠΠ΅ΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
NB: ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π²Π΅ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΌΠ΅ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π·Π° Skaffold Π² Π½Π°ΡΠΈΡ ΠΎΠ±Ρ , ΡΠΈΠΉΡΠΎ ΠΆΠΈΠ²ΠΎΡ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Kubernetes.
Π’Π΅ΠΎΡΠΈΡ. ΠΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
Π’Π°ΠΊΠ° ΡΠ΅, Π½Π°ΠΉ-ΠΎΠ±ΡΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Skaffold ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΊΡΠ»Π° CI/CD (Π½Π° Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅, Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅), ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π±ΡΡΠ·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°, Ρ.Π΅. Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π±ΡΡΠ·ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° - ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes. Π ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡ Π΅ΠΌΠΈ (dev, stage, production...), Π·Π° ΠΊΠΎΠΈΡΠΎ Skaffold ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Skaffold Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go, ΠΏΠΎΠ΄ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΈΡ Π»ΠΈΡΠ΅Π½Π· Apache 2.0 (GitHub).
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ. ΠΡΡΠ²ΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- Skaffold ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° CI/CD ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ.
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΠΈ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π²ΡΠ² ΡΠΎΠ½ΠΎΠ² ΡΠ΅ΠΆΠΈΠΌ ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° Docker ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° Kubernetes.
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Ρ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ-ΡΡΡΡΠΊΡΡΡΠ°-ΡΠ΅ΡΡ.
- ΠΡΠ΅ΠΏΡΠ°ΡΠ° ΠΏΠΎΡΡΠΎΠ²Π΅.
- Π§Π΅ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
- ΠΠΎΠΌΠ°Π³Π° ΠΏΡΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Java, Node.js, Python, Go.
Π‘Π΅Π³Π° Π·Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅:
- Π‘Π°ΠΌΠΈΡΡ Skaffold Π½ΡΠΌΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΎΡ ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Kubernetes Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
- Π Π°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° Π²Π½Π΅Π΄ΡΠΈΡΠ΅ ΠΊΠΎΠ΄Π° Π² ΠΌΠ΅ΡΡΠ½ΠΈΡ Minikube, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅, ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π½Π° Π΅ΡΠ°ΠΏ ΠΈΠ»ΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ? ΠΠ° ΡΠ°Π·ΠΈ ΡΠ΅Π» ΠΈΠΌΠ° ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ Π·Π° Π΅Π΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- CLI. Π‘Π°ΠΌΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² YAML. Π ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΊΡΠΌ ΠΎΠΏΠΈΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ , Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ²Π° Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΡΠΊΠΎΠΉ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ Π½Π΅Π³ΠΎ, Π½ΠΎ Π½Π΅ Π½Π°ΠΈΡΡΠΈΠ½Π°.
- ΠΠΎΠ΄ΡΠ»Π½ΠΎΡΡ. Skaffold Π½Π΅ Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π΅Π½ ΠΊΠΎΠΌΠ±Π°ΠΉΠ½, Π° ΡΠ΅ ΡΡΡΠ΅ΠΌΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ»ΡΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅:
- ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° docker Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π² ΠΊΠ»ΡΡΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° kaniko ΠΈΠ»ΠΈ Π² Google Cloud Build;
- Bazel Π»ΠΎΠΊΠ°Π»Π½ΠΎ;
- Jib Maven ΠΈ Jib Gradle Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΈΠ»ΠΈ Π² Google Cloud Build;
- ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΄ΡΡΠ³ΠΎ (ΠΏΠΎ-Π³ΡΠ²ΠΊΠ°Π²ΠΎ/ΠΏΠΎΠ·Π½Π°ΡΠΎ/...) ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠΊΡΠΈΠΏΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Skaffold Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ° (). Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡ;
- ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ;
- ΠΠ° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- Kubectl;
- Π¨Π»Π΅ΠΌ;
- ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π° Skaffold ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΅ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ (ΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°):

ΠΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΠΉ-ΠΎΠ±ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π‘ΠΊΠ°ΡΠΎΠ»Π΄?
- ΠΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΠ»Π΅Π΄ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄. ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΡΠ΅ ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ Ρ ΠΌΠΎΠ΄ΡΠ»Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes. ΠΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
- Π‘Π³Π»ΠΎΠ±Π΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ-ΡΡΡΡΠΊΡΡΡΠ°-ΡΠ΅ΡΡ, ΠΌΠ°ΡΠΊΠΈΡΠ° ΡΠ΅ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° Docker.
- Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·Π³ΡΡΡΠ° - ΡΠ°Π·Π³ΡΡΡΠ° ΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes.
- ΠΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
skaffold dev, ΡΠΎΠ³Π°Π²Π° Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Skaffold ΡΠ°ΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈ Π²ΡΠΈΡΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΡΠ½ΠΎΠ²ΠΎ.

ΠΠ»ΡΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Skaffold
ΠΡΠ°ΠΊΡΠΈΠΊΡΠ²Π°ΠΉΡΠ΅. ΠΠΏΠΈΡΠ²Π°ΠΌ Skaffold
ΠΠ° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°ΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Skaffold, ΡΠ΅ Π²Π·Π΅ΠΌΠ° ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ . ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΡΡΠΈΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ. Π©Π΅ ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌ Π²ΡΠΈΡΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π² Minikube. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ Π»Π΅ΡΠ½ΠΎ ΠΈ ΠΎΡΠ½Π΅ΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ ΠΈ ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π° kubectl, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Skaffold:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1ΠΠ΅ΠΊΠ° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΠΌΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° Skaffold Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservicesΠΠ·Π±ΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π΄Π²Π΅ ΠΏΠΎΠ΄ΠΎΠ²Π΅, Π²ΡΡΠΊΠ° ΡΡΠ΄ΡΡΠΆΠ°ΡΠ° ΠΏΠΎ Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Go. ΠΠ΄Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΡΡ (leeroy-web), ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ Π²ΡΠΎΡΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β Π±Π΅ΠΊΠ΅Π½Π΄ΡΡ (leeroy-app). ΠΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°:
~/skaffold/examples/microservices # tree
.
βββ leeroy-app
β βββ app.go
β βββ Dockerfile
β βββ kubernetes
β βββ deployment.yaml
βββ leeroy-web
β βββ Dockerfile
β βββ kubernetes
β β βββ deployment.yaml
β βββ web.go
βββ README.adoc
βββ skaffold.yaml
4 directories, 8 filesleeroy-app ΠΈ leeroy-web ΡΡΠ΄ΡΡΠΆΠ°Ρ Go ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠΎΡΡΠΈ Dockerfiles Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΎ:
~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app . ΠΡΠΌΠ° Π΄Π° Π΄Π°ΠΌ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ - Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π΄Π° Π·Π½Π°ΠΌ ΡΠΎΠ²Π° leeroy-web ΠΏΡΠΈΠ΅ΠΌΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΈ Π³ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠ° ΠΊΡΠΌ leeroy-app. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Deployment.yaml ΠΈΠΌΠ° ΡΡΠ»ΡΠ³Π° ΡΠ°ΠΌΠΎ Π·Π° app (Π·Π° Π²ΡΡΡΠ΅ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅). ΠΠΎΠ΄ ΠΏΠΎΡΡ web Π½ΠΈΠ΅ ΡΠ΅ Π³ΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΈΠΌ Π½Π° ΡΠ΅Π±Π΅ ΡΠΈ Π·Π° Π±ΡΡΠ· Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° skaffold.yaml:
~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
artifacts:
- image: leeroy-web
context: ./leeroy-web/
- image: leeroy-app
context: ./leeroy-app/
deploy:
kubectl:
manifests:
- ./leeroy-web/kubernetes/*
- ./leeroy-app/kubernetes/*
portForward:
- resourceType: deployment
resourceName: leeroy-web
port: 8080
localPort: 9000 ΠΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ, ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΡΡΠΊ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠΌΠ° ΠΈ ΡΠ°ΠΉΠ» Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ - ~/.skaffold/config. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ° ΡΡΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΡΠ΅Π· CLI - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
skaffold config set --global local-cluster true Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ Π³Π»ΠΎΠ±Π°Π»Π½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° local-cluster Π² ΡΠΌΠΈΡΡΠ» true, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Skaffold Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΡΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
ΠΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ skaffold.yaml:
- ΠΠ° ΡΡΠ΅Π½Π°ΡΠ°
buildΡΡΠΎΡΠ½ΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ ΠΈ Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:// Ρ.ΠΊ. Minikube ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, // ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΡΡΡ Π²Π½ΡΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ°Π·Ρ # minikube ssh $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE leeroy-app 7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e 7d55a5080359 4 hours ago 13MB leeroy-app v0.37.1-171-g0270a0c-dirty 7d55a5080359 4 hours ago 13MB leeroy-web 5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681 5063bfb29d98 5 hours ago 13.1MB leeroy-web v0.37.1-171-g0270a0c-dirty 5063bfb29d98 5 hours ago 13.1MBΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Skaffold ΡΠ°ΠΌ Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π» ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ°. ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅.
- ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ
context: ./leeroy-app/, Ρ.Π΅. ΡΡΠΎΡΠ½ΡΠ²Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΡ, Π² ΠΊΠΎΠΉΡΠΎ Π΅ ΡΡΠ±ΡΠ°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. - ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π΅ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ kubectl ΠΈ ΠΌΠ°ΡΠΊΠ° Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ.
-
PortForward: ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΠΌΠ΅ ΠΏΠΎΡΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈkubectl port-forward, Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° Skaffold Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΡ ΠΏΠΎΡΡ 9000 ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ° ΠΊΡΠΌ 8080 Π² Deployment Ρ ΠΈΠΌΠ΅ΡΠΎleeroy-web.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ skaffold dev: ΠΠΊΠΈΠΏΡΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΠΎΡΡΠΎΡΠ½Π΅Π½ βΠΏΡΠΈΠΌΠΊΠ° Π·Π° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°β, Ρ.Π΅. Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΠΈ ΡΠ΅ Π³ΠΎ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Π½ΠΎ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ Π·Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅.
ΠΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ skaffold dev --port-forward ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅:

ΠΡΡΠ²ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ ΠΊΠ΅ΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°, Π²Π½Π΅Π΄ΡΡΠ²Π° ΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°Ρ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ --port-forward, Skaffold ΠΏΡΠ΅ΠΏΡΠ°ΡΠΈ ΠΏΠΎΡΡΠ° ΠΊΡΠΌ web, ΠΊΠ°ΠΊΡΠΎ Π³ΠΎ ΠΏΠΎΠΏΠΈΡΠ°Ρ
Π°, Π½ΠΎ ΡΡΠΊ app ΡΠΎΠΉ Ρ
Π²ΡΡΠ»ΠΈ ΠΏΠΎ ΡΠ²ΠΎΠ΅ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ (ΠΈΠ·Π±ΡΠ° Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠΈΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½). Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°.
ΠΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ ΡΠ°Π±ΠΎΡΠΈ?
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-6998dfcc95-2nxvf 1/1 Running 0 103s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!! ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π° leeroy-app/app.go - ΠΌΠΈΠ½Π°Π²Π°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ... ΠΈ:
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-ffd79d986-l6nwp 1/1 Running 0 11s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!! Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ°ΠΌΠΈΡΡ Skaffold ΠΏΠΎΠΊΠ°Π·Π° ΡΡΡΠΎΡΠΎ Π½Π΅ΡΠΎ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ°: ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ°Π·Π³ΡΡΠ½Π° leeroy-app, Π° Π½Π΅ Π½Π°Π²Π΅Π΄Π½ΡΠΆ.
ΠΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π΅, ΡΠ΅ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Skaffold ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° init, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° Ρ ΡΠ°Π·Π³ΡΡΠ½Π΅ΡΠ΅ Π½Π° Π΅ΡΠ°ΠΏ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° run (ΡΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΠΊΠ°ΡΠΎ dev, ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠ° ΠΊΠ°ΡΠ°ΠΊΠΎΠ΄Π° ΠΈΠΌΠ° ΠΡΠ΅ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΅ Ρ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π³ΠΎΡΠΎΠ² ΠΏΡΡΡΡΠ½ΠΈΠΊ Ρ Kubernetes, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Skaffold. Π‘ΡΡΠ°Ρ ΠΎΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ, Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠΎΠ±Π²Π°ΡΠ΅ ΡΠ°ΠΌΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈ.
ΠΠ΄ΠΈΠ½ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Skaffold Π΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ. ΠΠ΅ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠ²ΡΡΠ²Π° ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Minikube Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΡΠΈ Ρ Π°ΡΠ΄ΡΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΠΏΡΡΠ½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° ΠΎΡΠ°ΠΊΠ²Π° Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ... Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Skaffold ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½ΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ Π½Π° Reddit, ΠΊΠ°ΠΊΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π²Π΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΈ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³.
Π Π² ΠΎΡ Weaveworks ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Skaffold Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΡΠΌ Kubernetes ΠΈ ΡΠ° ΡΠΎΠΊΡΡΠΈΡΠ°Π½ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π²ΡΡΡ Ρ Π½ΡΠΆΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° βΠΊΡΡβ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, Π½ΠΎ Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Skaffold Π² CI/CD ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΠ°ΠΊΡΠ² ΠΎΡ 10 ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Kubernetes, gRPC, Istio ΠΈ OpenCensus Tracing.
Skaffold Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΡΡΠΈ 8000+ Π·Π²Π΅Π·Π΄ΠΈ Π² GitHub, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π΅ ΠΎΡ Google ΠΈ Π΅ ΡΠ°ΡΡ ΠΎΡ β ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ Π΄Π° ΡΠ΅ ΡΠΌΡΡΠ°, ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ.
PS
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «»;
- «»;
- «»;
- Β«".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com
