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

ΠΠ°ΠΊ Π² ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Skaffold?
- Π£ΡΠΈΠ»ΠΈΡΠ°ΡΠ° ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Ρ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄. ΠΠΊΠΎ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΠ΅ ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ Ρ pod'Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Kubernetes. ΠΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ β Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π°. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ β ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° Π½ΠΎΠ² ΠΎΠ±ΡΠ°Π·.
- Π‘ΡΠ±ΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° container-structure-test, ΡΠ°Π³ΠΈΡΠ° ΡΠ΅ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π² Docker Registry.
- Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠ±ΡΠ°Π·ΡΡ ΡΠ΅ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° β ΡΠ°Π·Π³ΡΡΡΠ° ΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° 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ΠΠ·Π±ΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π΄Π²Π° pod-Π°, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΠΎ Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 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 Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, 8 ΡΠ°ΠΉΠ»Π°leeroy-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 ΠΈΠΌΠ° Service ΡΠ°ΠΌΠΎ Π·Π° app (Π·Π° Π²ΡΡΡΠ΅ΡΠ½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ). ΠΠΎΡΡΡΡ Π½Π° pod-Π° 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 Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° "push"-Π²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π·Π° Π΄Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΡΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ.
ΠΡΡΠ½Π΅ΠΌ ΡΠ΅ ΠΊΡΠΌ 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: ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠ° "ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ°", Ρ.Π΅. Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΠΈ ΡΠ΅ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ½Π΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Π½ΠΎ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ Π·Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° pod-ΠΎΠ²Π΅ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° pod-ΠΎΠ²Π΅ΡΠ΅.
ΠΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ 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 ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ "bootstrap-Π²Π°Ρ" Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° init, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: Π΄Π° Π²ΠΎΠ΄ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Π½Π° stage Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° run (ΡΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠ°ΠΊΡΠΎ ΠΈ dev, ΡΠ°ΠΌΠΎ ΡΠ΅ Π½Π΅ ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄ΡΡΠ³Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠ° katacoda ΠΈΠΌΠ° Ρ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΎΡΠ΅ ΠΏΠΎ-ΠΏΡΠΎΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΡΠ°ΠΌ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ²Π° ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ° Ρ Kubernetes, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Skaffold. ΠΡΠ»ΠΈΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅.
ΠΠ΄ΠΈΠ½ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Skaffold Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ. ΠΠ΅ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠ²ΡΡΠ²Π° ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Minikube Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΡΠΈ Ρ Π°ΡΠ΄ΡΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° Π²Π½Π΅Π΄ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° ΠΎΡΠ°ΠΊΠ²Π° Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎΡΠΎ ΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅... Π ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Skaffold ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ°Π²Π° ΠΏΠΎΡΡΠ°Π²Π΅Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ Π½Π° Reddit, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³.
Π Π² ΠΎΡ Weaveworks ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Skaffold Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π°Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Kubernetes ΠΈ ΡΠ° Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΠ½ΠΎ ΠΊΡΠΌ Π½ΡΠΆΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅. Π‘ Π½Π΅Π³ΠΎ Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ βΠΊΡΠ°ΡΡΠΊβ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΠΉΡΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, Π½ΠΎ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ ΠΈ ΠΏΠΎ-ΠΌΠ°ΡΠ°Π±Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°Π³Π»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Skaffold Π² CI/CD ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ°ΠΊΡΠ² Ρ 10 ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Kubernetes, gRPC, Istio ΠΈ OpenCensus Tracing.
Skaffold Π²Π΅ΡΠ΅ Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΏΠΎΡΡΠΈ 8000+ Π·Π²Π΅Π·Π΄ΠΈ Π² GitHub, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ΅ ΠΎΡ Google ΠΈ Π΅ ΡΠ°ΡΡ ΠΎΡ β ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ Π΄Π° ΡΠ΅ ΡΠΌΡΡΠ°, ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π΄ΡΠ»Π³ΠΎ ΠΈ ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎ.
P.S.
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «»;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
