ΠΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ½ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΡΠ°ΡΠΈΠΊ-Π½Π°Π³ΡΡΠ·ΠΊΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΡΡΠΏΠΏΡ. ΠΡΠ° Π·Π°ΠΌΠ΅ΡΠΊΠ° ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Kubernetes ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ ΠΊΠΎΠ΅-ΡΡΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΎ Helm ΠΈ ΡΠ΅ΡΡΡΡΠ°Ρ
Kubernetes.
ΠΡΠΎΡΡΠΎΠΉ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π΄Π²Π° ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ΅ΡΡΡΡΠ°: ΡΠ°ΠΌ ΡΠ΅ΡΠ²ΠΈΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ. ΠΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½Ρ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌΠΈ ΡΡΠ°ΡΠΈΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Β«ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΠΎΠΉΒ» Π²Π΅ΡΡΠΈΠ΅ΠΉ, Π° Π²ΡΠΎΡΠΎΠΉ β ΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ. Π ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ°. ΠΡΠ»ΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Yaml, ΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π² Kubernetes ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
kind: Deployment
metadata:
name: app-canary
labels:
app: app
spec:
replicas: 1
...
image: myapp:canary
---
kind: Deployment
metadata:
name: app
labels:
app: app
spec:
replicas: 5
...
image: myapp:stable
---
kind: Service
selector:
app: app # Selector will route traffic to both deployments.
ΠΡΠ΅ ΠΏΡΠΎΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° kubectl, Π° Π²
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΊΠ°ΡΡΠ° ΡΠ°ΡΡΠΎΠ² Helm, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΆΠ΅ Π²Π½Π΅ΡΠ΅Π½Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΡΠ΅ Π½Π°ΠΌΠΈ Π²ΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
~/charts/app
βββ Chart.yaml
βββ README.md
βββ templates
β βββ NOTES.txt
β βββ _helpers.tpl
β βββ deployment.yaml
β βββ service.yaml
βββ values.yaml
ΠΡΠ½ΠΎΠ²Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Helm β ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΠ²Π΅ΡΡΠΈΡΠΌΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ². Stable-Π²Π΅ΡΡΠΈΡ β ΡΡΠΎ Π½Π°ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ Π²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Helm ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· Ρ Π½Π°ΡΠΈΠΌ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠ»Π°Π²Π½ΠΎΠ΅ β ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΠΌΠ΅Π½ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΈ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΌ ΡΠ΅Π»ΠΈΠ·ΠΎΠΌ. Π£ΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°:
selector:
app.kubernetes.io/name: myapp
ΠΠ°ΡΠΈ ΠΊΠ°ΠΊ Β«ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠ΅Β», ΡΠ°ΠΊ ΠΈ stable-ΡΠ΅ΡΡΡΡΡ Π΄Π΅ΠΏΠ»ΠΎΡ Π±ΡΠ΄ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΡΡ ΠΌΠ΅ΡΠΊΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΡΡ . ΠΡΠ»ΠΈ Π²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΡ ΡΠ°ΡΡΠΎΠ² Helm ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠ°ΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° ΡΠ²Π΅ΠΆΠ΅ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v1 # Goes into app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π°Ρ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ·. Π§ΡΠΎΠ±Ρ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π΄Π²ΡΡ Π²Π΅ΡΠ°Ρ . ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅Π»ΠΈΠ·Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΌΡ Π½Π΅ Π½Π°ΠΊΠ°ΡΠΈΠ»ΠΈ Π°ΠΏΠ΄Π΅ΠΉΡ Π½Π° ΡΠ΅ΠΊΡΡΡΡ stable-Π²Π΅ΡΡΠΈΡ. ΠΠ΅ΡΡΠΈΡ ΠΈ ΡΠ΅Π³ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ².
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v2 # Goes into app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1
ΠΠΎΡ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈ Π²ΡΠ΅! ΠΡΠ»ΠΈ ΠΏΠΈΠ½Π³Π°Π½ΡΡΡ ΡΠ»ΡΠΆΠ±Ρ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΠΈΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, ΡΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com