Kubernetes Π½Π΅ΡΡΠΌΠ½Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠ°ΡΠ°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. Π’ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ²ΠΎΠΈΡΠ΅ API ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Ρ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ API Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΠΎΡΠ½ΠΎ Π΄Π° Π²Π½Π΅Π΄ΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°. ΠΡΠΏΡΠΎΡΠΈΡΠ΅ Ρ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π°ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΎΡΡΠ°Π²Π°Ρ ΠΏΠΎ ΠΏΡΠ΅ΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. Π’ΠΎΠ²Π° ΠΎΡΠ»ΠΈΡΠ°Π²Π° Kubernetes ΠΎΡ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΡΠ³Π° (PaaS), ΠΊΠ°ΡΠΎ Cloud Foundry ΠΈ Heroku.
ΠΠ»Π°ΡΡΠΎΡΠΌΠΈΡΠ΅ ΠΈΠΌΠ°Ρ ΠΎΠΏΡΠΎΡΡΠ΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΡΠ° Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΊΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ, Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅ ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° PaaS ΡΠΈΡΡΠ΅ΠΌΠ°.
Π Π°Π±ΠΎΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π΄ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΎΡ PaaS ΡΡΠ΅Π· ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ΡΠΎ ΠΌΡ, Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° Π½ΠΎΠ² ΠΌΠ°ΡΡΡΡΡ ΠΈ DNS ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π·Π° Π²Ρ
ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° git push
.
Kubernetes (ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ°ΠΌΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π³ΡΠ°Π΄ΠΈΠ²Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ, ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° Π΄Π° Π²ΡΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠ°ΠΌΠ°. ΠΊΠ°ΠΊ
Kubernetes Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ°ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡ Π·Π° Π½Π°ΡΠ°Π»ΠΎ, Π½ΠΎ Π½Π΅ ΠΈ Π·Π° ΡΠΈΠ½Π°Π».
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΡΠΏ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π½Π° Kubernetes, ΠΊΠ°ΠΊΡΠΎ ΠΈ Ρ ΠΎΡΡΠΈΠ½Π³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π°Ρ PaaS Π·Π° Kubernetes, ΠΊΠ°ΡΠΎ OpenShift ΠΈ Rancher. ΠΠ° ΡΠΎΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°ΡΡΠ²Π°ΡΠΈΡ ΡΠ΅ ΠΏΠ°Π·Π°Ρ Π½Π° Kube-PaaS, Knative, ΠΎΡΠ½ΠΎΠ²Π°Π½ ΠΏΡΠ΅Π· ΡΠ»ΠΈ 2018 Π³. ΠΎΡ Google ΠΈ Pivotal, Π²Π»ΠΈΠ·Π° Π² ΡΠΈΠ½Π³Π°.
Knative Π±Π΅ΡΠ΅ ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Google ΠΈ Pivotal, Ρ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠΌΠΎΡ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠ°ΡΠΎ IBM, RedHat ΠΈ Solo.im. Π’ΠΎΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ PaaS Π½Π΅ΡΠ° ΠΊΠ°ΡΠΎ Kubernetes Ρ ΠΏΡΡΠ²ΠΎΠΊΠ»Π°ΡΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈΡΠ΅ Π½Π° Kubernetes, Knative ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes ΠΈ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΡΡΠ΅Π· ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ.
ΠΠ°ΠΊΠ²ΠΎ Π΅ Knative?
Knative ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° ΠΊΠ°ΡΠΎ βΠΠ°Π·ΠΈΡΠ°Π½Π° Π½Π° Kubernetes ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π±Π΅Π· ΡΡΡΠ²ΡΡβ. Knative, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ°ΠΊΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΡΠ°ΠΊΠ°Π²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, Π°ΠΊΡΠΈΠ²Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π½Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ HTTP Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Ρ Π΄ΠΎ Π½ΡΠ»Π°, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΠΉΠΊΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ²Π°Π½Π΅ Π² ΡΡΠΈΠ» Π±Π΅Π· ΡΡΡΠ²ΡΡ.
Knative ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
- ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ (ΠΎΡΠΈΠ³ΡΡΠ΅Π½ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅),
- ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° (ΠΎΡΠΈΠ³ΡΡΠ΅Π½ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π‘Π΅ΡΠ²ΠΈΡΠ°Π½Π΅),
- Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ²Π°Π½Π΅ (ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΎ ΡΡΡΠΎ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π‘Π΅ΡΠ²ΠΈΡΠ°Π½Π΅),
- ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΡ, Π²ΠΎΠ΄Π΅ΡΠΈ Π΄ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΎ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π‘ΡΠ±ΠΈΡΠΈΠ΅).
ΠΠ»ΡΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Π·Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Knative, Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ»Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Kubernetes API, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ»ΡΠΆΠΈ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Knative ΡΡΠ»ΡΠ³ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΡΡΡ ΡΡΡΠΈΡΠ΅ API ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π·ΠΈ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ (ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡΠ»ΡΠ³ΠΈ ΠΈ Ρ.Π½.).
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Serving ΡΠΈΠ½ΡΠΎ-Π·Π΅Π»Π΅Π½ΠΎΡΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΡΡΡΠΎ Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΡΠΎ ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΎΠ²Π°ΡΠ° ΠΈ ΡΡΠ°ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΄ΠΎΡΡΠ°Π²ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π‘Π°ΠΌΠΈΡΡ Knative Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Π²Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ. ΠΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°
Istio Service Mesh ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π³ΠΎΠ»ΡΠΌΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Knative, ΠΊΠΎΠΈΡΠΎ ΠΈΡΠΊΠ°Ρ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡΠΎΠ±Π²Π°Ρ, Π±Π΅Π· Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡ ΠΏΠ°Π½Π΅Π» Π½Π° Istio, ΡΡΠΉ ΠΊΠ°ΡΠΎ Knative Π·Π°Π²ΠΈΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΡ ΡΠ»ΡΠ·Π°.
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·ΠΈ ΠΏΡΠΈΡΠΈΠ½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Gloo ΠΊΠ°ΡΠΎ ΡΠ»ΡΠ· ΠΊΡΠΌ Knative, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΠΎ Istio (Π·Π° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΡΠ°ΠΌΠΎ Π½Π° Knative), ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΈΠΌΠ° ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ.
ΠΠ΅ΠΊΠ° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ Knative Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ°Π½Π΄Π°. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΏΡΡΡΠ½ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΊΠ»ΡΡΡΠ΅Ρ, ΡΠ°Π±ΠΎΡΠ΅Ρ Π² GKE:
kubectl get namespace
NAME STATUS AGE
default Active 21h
kube-public Active 21h
kube-system Active 21h
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Knative ΠΈ Gloo. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΡΠ΅Π΄:
# ΡΡΠ°Π²ΠΈΠΌ Knative-Serving
kubectl apply -f
https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ΡΡΠ°Π²ΠΈΠΌ Gloo
kubectl apply -f
https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ Pods ΡΠ° Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ βΠ Π°Π±ΠΎΡΠ΅ΡΠΈβ:
kubectl get pod -n knative-serving
NAME READY STATUS RESTARTS AGE
activator-5dd55958cc-fkp7r 1/1 Running 0 7m32s
autoscaler-fd66459b7-7d5s2 1/1 Running 0 7m31s
autoscaler-hpa-85b5667df4-mdjch 1/1 Running 0 7m32s
controller-85c8bb7ffd-nj9cs 1/1 Running 0 7m29s
webhook-5bd79b5c8b-7czrm 1/1 Running 0 7m29s
kubectl get pod -n gloo-system
NAME READY STATUS RESTARTS AGE
discovery-69548c8475-fvh7q 1/1 Running 0 44s
gloo-5b6954d7c7-7rfk9 1/1 Running 0 45s
ingress-6c46cdf6f6-jwj7m 1/1 Running 0 44s
knative-external-proxy-7dd7665869-x9xkg 1/1 Running 0 44s
knative-internal-proxy-7775476875-9xvdg 1/1 Running 0 44s
Gloo Π΅ Π³ΠΎΡΠΎΠ² Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΡΠ»ΡΠ³Π° Knative Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ (Π΄Π° Ρ Π½Π°ΡΠ΅ΡΠ΅ΠΌ kservice) ΠΈ Π΄Π° Π½Π°ΡΠΎΡΠ²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ Π½Π΅Ρ.
Knative ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ ΠΏΡΡ Π·Π° Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ Kubernetes Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π» Deployment+Service+Ingress. Π©Π΅ ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
env:
- name: TARGET
Value: Knative user
ΠΠΎΠΏΠΈΡΠ°Ρ ΡΠΎΠ²Π° Π²ΡΠ² ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡ ΠΊΡΠΌ ΠΌΠΎΡ Kubernetes ΠΊΠ»ΡΡΡΠ΅Ρ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
kubectl apply -f ksvc.yaml -n default
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ Knative Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π°ΡΠΈΡ βhelloworld-goβ kservice:
kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8 2/2 Running 0 68s
ΠΠΎΠ΄ΡΡ Ρ Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ βhelloworld-goβ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ kservice Π΅ ΡΠ°Π·Π³ΡΡΠ½Π°ΡΠ°. ΠΠΊΠΎ Π½ΡΠΌΠ° ΡΡΠ°ΡΠΈΠΊ, Π±ΡΠΎΡΡ Π½Π° ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ Π΄ΠΎ Π½ΡΠ»Π°. Π ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ, Π°ΠΊΠΎ Π±ΡΠΎΡΡ Π½Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠ°Π³, Π±ΡΠΎΡΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ.
kubectl get ingresses.networking.internal.knative.dev -n default
NAME READY REASON
helloworld-go True
Knative ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° Π²Ρ ΠΎΠ΄Π° ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠ΅ΡΡΡΡ βingressβ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ API Π½Π° Knative. Gloo ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΎΠ·ΠΈ API ΠΊΠ°ΡΠΎ ΡΠ²ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° PaaS, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΈΠ½ΡΠΎ-Π·Π΅Π»Π΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π½Π°Π»Π°Π³Π°Π½Π΅ Π½Π° TLS, ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅.
Π‘Π»Π΅Π΄ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ° ΠΈΠ·ΡΠ΅Π·Π½Π°Π»ΠΈ (Π·Π°ΡΠΎΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ°ΡΠΈΠΊ):
kubectl get pod -n default
No resources found.
kubectl get deployment -n default
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
helloworld-go-fjp75-deployment 0 0 0 0 9m46s
ΠΠ°ΠΉ-Π½Π°ΠΊΡΠ°Ρ ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° Π³ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ΠΌ. ΠΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ URL Π°Π΄ΡΠ΅ΡΠ° Π·Π° Knative Proxy, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ glooctl
:
glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80
ΠΠ΅Π· ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ glooctl
ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΡΠ° Π² ΡΡΠ»ΡΠ³Π°ΡΠ° kube:
kubectl get svc -n gloo-system knative-external-proxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
knative-external-proxy LoadBalancer 10.16.11.157 35.190.151.188 80:32168/TCP,443:30729/TCP 77m
ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° cURL:
curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!
Knative ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΡΡΠΈ PaaS Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° Π²ΡΡΡ Π° Π½Π° Kubernetes ΠΈΠ·Π²ΡΠ½ ΠΊΡΡΠΈΡΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈΡ API ΡΠ»ΡΠ· Ρ ΠΏΡΠ»Π΅Π½ ΡΡΠ΅ΠΊ Π½Π° Gloo. Π’Π°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ°ΠΌΠΎ Π½Π°Π΄ΡΠ°ΡΠΊΠ° ΠΏΠΎΠ²ΡΡΡ Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±ΡΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Knative. Π‘ΡΡΠΎΡΠΎ ΠΈ Ρ Gloo!
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Knative Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΠΌΠ»Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π΅Π³ΠΎΠ²ΠΈΡΡ Π΅ΠΊΠΈΠΏ ΠΏΡΡΠΊΠ° Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡ ΡΠ΅Π΄ΠΌΠΈΡΠΈ ΠΈ Π΅ Π·Π°ΠΏΠΎΡΠ½Π°Π»ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° TLS, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡ ΠΏΠ°Π½Π΅Π». ΠΠΌΠ° Π³ΠΎΠ»ΡΠΌ ΡΠ°Π½Ρ, ΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±Π»Π°ΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π½ΠΎΠ²ΠΎΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Google Cloud Run, Knative ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π΅ Π² ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΎΠΏΡΠΈΡ Π·Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π±Π΅Π· ΡΡΡΠ²ΡΡ ΠΈ PaaS Π½Π° Kubernetes. Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½ΠΎΠ²ΠΈΠ½ΠΈΡΠ΅!
ΠΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈΡΠ΅ Π½Π° SouthBridge
ΠΠ½Π΅Π½ΠΈΡΡΠ° Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ Π·Π° Π½Π°Ρ, Π·Π°ΡΠΎΠ²Π° Π²ΠΈ ΠΌΠΎΠ»ΠΈΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΠΊΡΠ°ΡΠΊΠΎ ΠΏΡΠΎΡΡΠ²Π°Π½Π΅, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ Π±ΡΠ΄Π΅ΡΠΈ ΡΡΠ°ΡΠΈΠΈ Π·Π° Knative, Kubernetes, Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠΈ:
Π Π°Π½ΠΊΠ΅ΡΠ°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ°ΡΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ.
Π’ΡΡΠ±Π²Π° Π»ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ° Π΄Π° ΠΏΠΈΡΠ° ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π·Π° Knative ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠΈ Π±Π΅Π· ΡΡΡΠ²ΡΡ?
-
ΠΠ° ΠΌΠΎΠ»Ρ.
-
ΠΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ.
28 ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π³Π»Π°ΡΡΠ²Π°Ρ
Π°. 4 ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ Π²ΡΠ·Π΄ΡΡΠΆΠ°Ρ
Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com