8 Π°ΠΏΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ
ΠΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ ΡΠ°Π΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ
Π―Π΄ΡΠΎ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² K8s
Kubernetes ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΡΡΠ°ΡΠ»Ρ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π²Π½ΠΎ ΡΡΡΠΎΡΠ»ΠΈΡΡ:
- ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π΅Π³ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌ, ΠΌΡ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³Π° ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Chef, Ansibleβ¦), Π° ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΠΈ Ρ.ΠΏ.
- ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡ ΠΎ Π½ΡΠ°Π½ΡΠ°Ρ ΡΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ: bare metal, ΠΎΠ±Π»Π°ΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈ Ρ.ΠΏ.
- Π‘ K8s ΠΊΠ°ΠΊ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΏΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ: ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΌΠΎΠ²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΈ Ρ.ΠΏ.
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²ΡΡ Π½Π΅ ΡΠ°ΠΊ Π³Π»Π°Π΄ΠΊΠΎ: Ρ Kubernetes ΠΏΡΠΈΡΠ»ΠΈ ΠΈ ΡΠ²ΠΎΠΈ β Π½ΠΎΠ²ΡΠ΅ β Π²ΡΠ·ΠΎΠ²Ρ.
Kubernetes Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ±Π°ΠΉΠ½ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π―Π΄ΡΠΎ Kubernetes ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° Π½Π°Π±ΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅:
Π ΡΠ΄ΡΠ΅ Kubernetes ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² β Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ
ΠΌΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π²
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, K8s ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π·Π°ΠΊΡΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ β ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ β ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Kubernetes ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Β«ΠΎΠ±ΡΡΠ» Π½ΡΠΆΠ½ΡΡ ΡΠΎΡΠΌΡΒ» [Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ]. Π§ΡΠΎ ΠΆΠ΅ ΡΡΠΎ Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΠ΅? Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Kubernetes, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄ΠΈΠ²ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΡ, ΡΡΠΎΠ»Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ pod’ΠΎΠ² ΠΊΠ°ΠΊ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠ·Π»Π°, ΡΠ°ΠΊ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ·Π»Π°ΠΌΠΈ, ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π―Π΄ΡΠΎ Kubernetes Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π½ΡΠΆΠ½ΡΠ΅ ΡΠ²ΡΠ·ΠΈ β Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (
ΠΠ»ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
(Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄ΠΈΡΠΊ, ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ Π±Π»ΠΎΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Cephβ¦). ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π² ΡΠ΄ΡΠ΅, Π½ΠΎ Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ
Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
- Ingress-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ (ΠΈΡ
ΠΎΠ±Π·ΠΎΡ ΡΠΌ. Π²
Π½Π°ΡΠ΅ΠΉ Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ ΡΡΠ°ΡΡΠ΅ ). -
cert-manager : -
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ β ΡΡΠΎ ΡΠ΅Π»ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ (ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ cert-manager), ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²(Ρ) ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ(Ρ). ΠΠΎΠ³ΠΈΠΊΠ° ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π½ΡΠ°Π·ΠΈΠ΅ΠΉ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π‘Π£ΠΠ) Π² ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ (ΡΠ΅ΠΌ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ). ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ β ΠΏΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡ ΠΈ Π½Π΅ Π³ΠΎΡΠΎΠ²Ρ ΠΊ production, ΡΡΠΎ Π»ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ: - ΠΠ΅ΡΡΠΈΠΊΠΈ β ΠΎΡΠ΅ΡΠ΅Π΄Π½Π°Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ Π² Kubernetes ΠΎΡΠ΄Π΅Π»ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Metrics API) ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Prometheus adapter, Datadog cluster agentβ¦).
- ΠΠ»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π³Π΄Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½ΡΠΆΠ½Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ
Prometheus ΠΈ Grafana , Π½ΠΎ ΠΈ kube-state-metrics, node-exporter ΠΈ Ρ.ΠΏ.
Π ΡΡΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉβ¦ ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π€Π»Π°Π½ΡΒ» Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ 29 Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ (Π²ΡΠ΅ ΠΎΠ½ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡ 249 ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Kubernetes). ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΡ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠΈΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°:
- ΠΡΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ (Ρ.Π΅. ΡΡΠ΅Π±ΡΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΠ½Π°) registry Ρ ΠΎΠ±ΡΠ°Π·Π°ΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ pod’Ρ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΠ΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² registry. ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° β ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠ΅ΡΠ° Π² namespace’Π΅, ΡΡΠΎΠ±Ρ pod’Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π·Ρ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ΅Π½ ΡΠ΅ΠΊΡΠ΅Ρ) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, Π° ΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΠ΅ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ, ΡΠ°ΠΊ ΡΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ² ΡΡΠΊΠ°ΠΌΠΈ ΠΎΡΠΏΠ°Π΄Π°Π΅Ρ. Π’ΡΡ ΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ: ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ namespace’Π° ΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΡΠ΅ΠΊΡΠ΅Ρ Π² namespace.
- ΠΡΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΈΠ· pod’ΠΎΠ² ΠΊ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΡ Π·Π°ΠΏΡΠ΅ΡΡΠ½. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ: Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΡΠ°Π±ΠΎΡΠ°Π» ΠΏΡΠΎΡΡΠΎ, Π½Π΅ ΡΡΠ΅Π±ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π½Π°Π²ΡΠΊΠΎΠ², β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ Π½Π°Π»ΠΈΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ Π»Π΅ΠΉΠ±Π»Π° Π² namespace’Π΅. ΠΠ°ΠΊ Π½Π°ΠΌ ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ? Π‘ΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π»Π΅ΠΉΠ±Π»Π° Π² namespace’Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ policy Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ.
- Π‘Ρ
ΠΎΠΆΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: ΠΏΡΡΡΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π° ΡΠ·Π΅Π» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ
taint , Π΅ΡΠ»ΠΈ Π½Π° Π½ΡΠΌ Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ Π»Π΅ΠΉΠ±Π» (Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ). ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Ρβ¦
Π Π»ΡΠ±ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π½Π°Π΄ΠΎ ΡΠ΅ΡΠ°ΡΡ ΡΡΡΠΈΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
ΠΠΎΠ΄ΡΡΠΎΠΆΠΈΠ²Π°Ρ Π²ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ, ΠΌΡ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ Π΄Π»Ρ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² Kubernetes ΡΡΠ΅Π±ΡΠ΅ΡΡΡ: Π°) ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π±) ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ (Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡΡ Π°Π΄ΠΌΠΈΠ½ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ).
ΠΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Kubernetes?
Π ΡΠ΅Π»ΠΎΠΌ ΡΡ Π΅ΠΌΠ° ΠΏΡΠΎΡΡΠ°:
β¦ Π½ΠΎ ΡΡΡ Π²ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΡΡΠΎ:
- Kubernetes API β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΌΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΡ;
- ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΆΠ΅ Π½Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ (ΡΠ·ΡΠΊ Go Π²ΡΠ±ΡΠ°Π½ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ β
Operator SDK ); - Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ.
ΠΡΠΎΠ³: Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°) ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠ°ΡΡΠΈ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΎ Π΄Π»Ρ Β«Π±ΠΎΠ»ΡΡΠΈΡ Β» ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² β ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π΄Π»Ρ Π‘Π£ΠΠ MySQL. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π²ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ (ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ², Π΄ΠΎΡΡΡΠΏ pod’ΠΎΠ² Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρβ¦), ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΎΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ ΠΌΡ ΠΏΠΎΠΉΠΌΡΠΌ, ΡΡΠΎ Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΠΈΠ»ΠΈΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Π ΠΎΠ±ΡΠ΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΄ΠΈΠ»Π΅ΠΌΠΌΠ°: ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Β«ΠΏΠΎ ΡΡΠ°ΡΠΈΠ½ΠΊΠ΅Β» (Π½ΠΎ Π±ΡΡΡΡΠΎ). ΠΠ»Ρ Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ β Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΠΊΡΠ°ΠΉΠ½ΠΎΡΡΡΠΌΠΈ β ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ:
Shell-operator
ΠΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ? Π ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ pod, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π»Π΅ΠΆΠΈΡ Go-Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Ρ shell-operator. Π ΡΠ΄ΠΎΠΌ Ρ Π½ΠΈΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π°Π±ΠΎΡ Ρ ΡΠΊΠΎΠ² (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ β ΡΠΌ. Π½ΠΈΠΆΠ΅). Π‘Π°ΠΌ shell-operator ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π² Kubernetes API, ΠΏΠΎ ΡΠ°ΠΊΡΡ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Ρ ΡΠΊΠΈ.
ΠΠ°ΠΊ shell-operator ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ ΡΠΊΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ? ΠΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ shell-operator’Ρ ΡΠ°ΠΌΠΈ Ρ ΡΠΊΠΈ ΠΈ Π΄Π΅Π»Π°ΡΡ ΠΎΠ½ΠΈ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ.
Π₯ΡΠΊ β ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π½Π° Bash ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ --config
ΠΈ Π² ΠΎΡΠ²Π΅Ρ Π½Π° Π½Π΅Π³ΠΎ Π²ΡΠ΄Π°ΡΡ JSON. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ (Π΄Π»Ρ ΡΡΠΈΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²) ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ:
ΠΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° shell-operator ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² β ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ² Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠΌΡ registry Ρ ΠΎΠ±ΡΠ°Π·Π°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΡΠ°ΠΏΠΎΠ².
ΠΡΠ°ΠΊΡΠΈΠΊΠ°: 1. ΠΠΈΡΠ΅ΠΌ Ρ ΡΠΊ
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π² Ρ
ΡΠΊΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ --config
, ΡΠΊΠ°Π·Π°Π², ΡΡΠΎ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ namespace’Ρ, Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ β ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡ
ΡΠΎΠ·Π΄Π°Π½ΠΈΡ:
[[ $1 == "--config" ]] ; then
cat << EOF
{
"onKubernetesEvent": [
{
"kind": "namespace",
"event": ["add"]
}
]
}
EOF
β¦
ΠΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ°? Π’ΠΎΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ:
β¦
else
createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΌΡ ΡΠ·Π½Π°ΡΠΌ, ΠΊΠ°ΠΊΠΎΠΉ namespace Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½, Π° Π²ΡΠΎΡΡΠΌ β ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ΅ΡΠ΅Π· kubectl
ΡΠ΅ΠΊΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½.
ΠΡΠ°ΠΊΡΠΈΠΊΠ°: 2. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π·
ΠΡΡΠ°Π»ΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Ρ ΡΠΊ shell-operator’Ρ β ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ? Π‘Π°ΠΌ shell-operator ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Docker-ΠΎΠ±ΡΠ°Π·Π°, ΡΠ°ΠΊ ΡΡΠΎ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Ρ ΡΠΊ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² ΡΡΠΎΠΌ ΠΎΠ±ΡΠ°Π·Π΅:
FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks
ΠΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈ push’Π½ΡΡΡ:
$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1
Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΡΠΈΡ β Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΠΎΠ±ΡΠ°Π· Π² ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Deployment:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-operator
spec:
template:
spec:
containers:
- name: my-operator
image: registry.example.com/my-operator:v1 # 1
serviceAccountName: my-operator # 2
Π Π½ΡΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°:
- ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°;
- ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ) Π½ΡΠΆΠ½Ρ ΠΏΡΠ°Π²Π° Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ Π² Kubernetes ΠΈ ΡΡΠΎΠ±Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΠ΅ΡΡ ΠΏΠΎ namespace’Π°ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ Π΄Π»Ρ Ρ ΡΠΊΠ° ServiceAccount (ΠΈ Π½Π°Π±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»).
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ΄Π½ΡΠΌ Π΄Π»Ρ Kubernetes ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΠΎΠ·Π΄Π°Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ².
ΠΡΡΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ shell-operator
Π§ΡΠΎΠ±Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΡΠΈΠΏΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ
ΡΠΊ, ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ, ΠΎΡΠ±ΠΈΡΠ°Ρ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ Π»Π΅ΠΉΠ±Π»Π°ΠΌ (ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ matchExpressions
):
"onKubernetesEvent": [
{
"selector": {
"matchLabels": {
"foo": "bar",
},
"matchExpressions": [
{
"key": "allow",
"operation": "In",
"values": ["wan", "warehouse"],
},
],
}
β¦
}
]
ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ jq-ΡΠΈΠ»ΡΡΡΠ° β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ JSON’Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅, Π³Π΄Π΅ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ»Π΅Π΄ΠΈΡΡ.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Ρ ΡΠΊΠ° shell-operator ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ Π½ΡΠΆΠ΄.
Π‘ΠΎΠ±ΡΡΠΈΡ, ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΡΠΊΠΈ, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ Kubernetes events: Π² shell-operator ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° Ρ ΡΠΊΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ crontab Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ΅), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ onStartup. ΠΡΠ΅ ΡΡΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Ρ ΡΠΊ.
Π Π΅ΡΡ Π΄Π²Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ shell-operator:
- ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ. Π‘ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ Kubernetes (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°) Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°), ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ Π² Ρ ΡΠΊΠ°Ρ . ΠΡΠ»ΠΈ Ρ ΡΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ (ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ).
- ΠΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π΄Π»Ρ Prometheus, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ shell-operator, ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Ρ ΡΠΊΡ ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΠΎΠ΄Π²ΠΎΠ΄Ρ ΠΈΡΠΎΠ³ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ
ΠΠ»Ρ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Kubernetes Π±ΡΠ»Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ. Π Π½Π΅ΠΉ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΡΠΈ Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ.
Π Π°Π±ΠΎΡΡ Ρ Kubernetes ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π»ΠΈ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ» Ingress. Π ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π΅Π³ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ, ΠΈ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ YAML-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ: bare metal, AWSβ¦
ΠΠ»Π°ΡΡΠ΅ΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ β Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠ»ΡΡΡΠ°Π»ΠΈ ΡΠ°ΠΌΠΈ ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΡΡΠ°Π»ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΠΌΠΈ:
Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π²ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΎΠΊ, ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΡΠΎ ΡΠΊΡΠΈΠΏΡΠ° (install-ingress.sh
), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡΡΡ, Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π½ΡΠΆΠ½ΡΡ YAML-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π²ΡΠΊΠ°ΡΡΠ²Π°Π» Π΅Ρ Π² Kubernetes.
ΠΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅, ΡΠΎ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΉ Π½Π°Ρ ΠΏΡΡΡ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²Ρ:
- Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ YAML-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ (Π½Π° ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ°ΠΏΠ°Ρ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ sed);
- Ρ ΡΠΎΡΡΠΎΠΌ ΡΠΈΡΠ»Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² ΠΏΡΠΈΡΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (ΡΠ°ΠΌΠΎΠ΅ ΡΠ°Π½Π½Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ Π² Git, ΠΏΠΎ cron’Ρ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ);
- ΡΡ
ΠΎΠΆΠΈΠΉ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΡΡ Π΄Π»Ρ Prometheus (
install-prometheus.sh
), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»Π΅Π½ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²Π²ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ (ΠΏΠΎ-Ρ ΠΎΡΠΎΡΠ΅ΠΌΡ β ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅), ΠΏΡΠΈΡΡΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΠΏΠ°ΡΠΎΠ»ΠΈ) ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ: - ΡΠΈΡΠΊ Π²ΡΠΊΠ°ΡΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π° ΡΠ°ΡΡΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΎΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡΠ°ΠΌ (Ρ.Π΅. Π΄Π²ΡΠΌ ΡΠΊΡΠΈΠΏΡΠ°ΠΌ: Π΄Π»Ρ Ingress ΠΈ Prometheus) ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠΎΠΊ Π² Git, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ cron’ΠΎΠ² Π½Π° ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ : ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΎΠ²ΡΡ β ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ );
- Ρ
kubectl apply
ΡΡΠ°Π»ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈ ΡΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΡ ΡΡΠ°ΡΡΡΡ/ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ ; - Π½Π΅ Ρ
Π²Π°ΡΠ°Π»ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ:
- ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ²,
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (Π²Π²ΠΎΠ΄Π½ΡΡ Π΄Π»Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ) Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° (discovery),
- Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ continuous discovery.
ΠΠ΅ΡΡ ΡΡΠΎΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠΉ ΠΎΠΏΡΡ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β
Addon-operator
Π Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ β ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ shell-operator. ΠΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΆΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π Ρ ΡΠΊΠ°ΠΌ shell-operator’Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ:
- Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ values,
- Helm-ΡΠ°ΡΡ,
- ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ values ΠΈ β Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β ΠΏΡΠΎΡΠΈΡ Helm ΠΏΠ΅ΡΠ΅Π²ΡΠΊΠ°ΡΠΈΡΡ ΡΠ°ΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π² Kubernetes, Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ
ΡΠΊ, Π° ΠΈΠ· ΡΡΠΎΠ³ΠΎ Ρ
ΡΠΊΠ° β Π²Π½Π΅ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΡΠΊΠ°ΡΠ΅Π½ ΡΠ°ΡΡ. Π ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅ΠΉΡΡ ΡΡ
Π΅ΠΌΠ΅ ΠΌΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π½Π°Π±ΠΎΡ Ρ
ΡΠΊΠΎΠ² ΠΈ ΡΠ°ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ:
ΠΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π° ΠΊ Π½ΠΈΠΌ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Ρ
ΡΠΊΠΈ, Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ values ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΡΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π² Kubernetes ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π° ΡΡΠΎ ΠΎΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠΊΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅Ρ Π²ΡΠΊΠ°Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅:
ΠΡΠ° ΡΡ
Π΅ΠΌΠ° ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π²ΡΠ΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΡΡΠΎ Π±ΡΠ»ΠΈ ΠΎΠ·Π²ΡΡΠ΅Π½Ρ Π²ΡΡΠ΅:
- ΠΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Helm.
- ΠΠΎΠΏΡΠΎΡ Π°Π²ΡΠΎΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Ρ ΠΎΠ΄ΠΈΡ Π² registry ΠΈ, Π΅ΡΠ»ΠΈ Π²ΠΈΠ΄ΠΈΡ ΡΠ°ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠ΅ΡΠ΅Π²ΡΠΊΠ°ΡΡΠ²Π°Π΅Ρ Π΅Ρ (Ρ.Π΅. Β«ΡΠ°ΠΌ ΡΠ΅Π±ΡΒ»).
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ConfigMap, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ (ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΎΠ½ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°).
- ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ, discovery ΠΈ continuous discovery ΡΠ΅ΡΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ ΡΠΊΠΎΠ².
- Π‘ΡΠ΅ΠΉΠ΄ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅Π³Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Docker ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ.
- ΠΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΡΠΈΠΊ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΡ ΡΡΠ°ΡΡΡ.
ΠΡΡ ΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ° Π½Π° Go, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ addon-operator. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΡΡ Π΅ΠΌΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΎΡΠ΅:
ΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° ΡΡΠΎΠΉ ΡΡ
Π΅ΠΌΠ΅ β Π½Π°Π±ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΡΠ΅ΡΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ Π²Π½ΠΈΠ·Ρ). Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΈ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π½ΡΠΆΠ½ΡΠ΅ Π΅ΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅.
Β«Π€Π»Π°Π½ΡΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
ΠΠ΄Π΅ Π²Π·ΡΡΡ ΡΠ°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ addon-operator? ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°ΠΏ Π΄Π»Ρ Π½Π°Ρ, ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π»Π΅ΡΠΎΠΌ.
ΠΠΈΠ΄Π΅ΠΎ ΠΈ ΡΠ»Π°ΠΉΠ΄Ρ
ΠΠΈΠ΄Π΅ΠΎ Ρ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ (~50 ΠΌΠΈΠ½ΡΡ):
ΠΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:
P.S.
ΠΡΡΠ³ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Kubernetes Β»; (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 8 Π½ΠΎΡΠ±ΡΡ 2018 Π½Π° HighLoad++); - Β«
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ Kubernetes Β»; (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 28 ΠΌΠ°Ρ 2018 Π½Π° RootConf); - Β«
ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ CI/CD Ρ Kubernetes ΠΈ GitLab Β»; (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 7 Π½ΠΎΡΠ±ΡΡ 2017 Π½Π° HighLoad++); - Β«
ΠΠ°Ρ ΠΎΠΏΡΡ Ρ Kubernetes Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Β»; (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 6 ΠΈΡΠ½Ρ 2017 Π½Π° RootConf).
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com