ΠΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΏΡΠ» ΠΎΡ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΈ ΡΡΠ°Π±ΠΈΠ»Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡΡ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡΡΠΎ Π·Π°Ρ ΡΠ°Π½Π²Π°Π½Π΅? ΠΠ°ΠΊ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΠΌ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ? ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ? ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅? ΠΠ°ΠΊ Π΄Π° ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π°ΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ?
Π’ΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Ρ ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΡΠ΅ΡΡΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° - ΡΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ RAM. Π ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ΅ Π½Π° k8s ΡΠ΅Π·ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Ρ Π² ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠΈ:
- CPU - Π² ΡΠ΄ΡΠ°
- RAM - Π² Π±Π°ΠΉΡΠΎΠ²Π΅
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡΡΡ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ - ΠΈΡΠΊΠ°Π½ΠΈΡ ΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ. ΠΠ°ΡΠ²ΠΊΠΈ - ΠΎΠΏΠΈΡΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Π²ΡΠ·Π΅Π» Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ), Π΄ΠΎΠΊΠ°ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π·Π°Π΄Π°Π²Π°Ρ ΡΠ²ΡΡΠ΄ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, Π½Π°Π»ΠΈΡΠ½ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅, ΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΡΡ Π½Π΅ ΡΡΡΠ±Π²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΈ Π΄Π²Π°ΡΠ° ΡΠΈΠΏΠ°, Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
- ΠΠΊΠΎ ΡΠ°ΠΌΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° Π΄Π°Π΄Π΅Π½ ΡΠ΅ΡΡΡΡ ΡΠ° ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ, ΡΠΎΠ³Π°Π²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π·Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΡΠ°Π²Π½Π° Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° (ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠ°ΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅). Π’Π΅Π·ΠΈ. Π²ΡΡΡΠ½ΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎ ΡΡΡΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ.
- ΠΠΊΠΎ Π·Π° Π΄Π°Π΄Π΅Π½ ΡΠ΅ΡΡΡΡ ΡΠ° ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΠ³Π°Π²Π° Π½Π΅ ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ Π³ΠΎΡΠ½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΡΡΡΡ - Ρ.Π΅. ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠ°ΠΌΠΎ ΠΎΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ°ΠΌΠΈΡ Π²ΡΠ·Π΅Π».
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π½ΠΎ ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ:
- LimitRange β ΠΎΠΏΠΈΡΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ/ΡΡΡΡΠ»ΠΊΠ° Π² ns ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°/ΡΡΡΡΠ»ΠΊΠ°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΄Π΅Π±Π΅Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ/ΡΡΡΡΠ»ΠΊΠΈ (ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ), Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈ Π±ΡΠΎΡΡ ΠΈΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π² ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² Π»ΠΈΠΌΠΈΡΠΈ ΠΈ Π·Π°ΡΠ²ΠΊΠΈ
- ΠΠ²ΠΎΡΠΈ Π·Π° ΡΠ΅ΡΡΡΡΠΈ β ΠΎΠΏΠΈΡΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π² ns ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠ°ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π·Π° ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π΄ΠΈ (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ΅Π΄ΠΈΡΠ΅ Π½Π΅ ΡΠ° ΡΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π²ΡΠ·Π΅Π»)
Π‘Π»Π΅Π΄Π²Π°Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π·Π°Π΄Π°Π²Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅:
-
ΠΠ° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ:
containers: - name: app-nginx image: nginx resources: requests: memory: 1Gi limits: cpu: 200m
Π’Π΅Π·ΠΈ. Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ nginx, ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π° ΠΏΠΎΠ½Π΅ 1G ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π° RAM ΠΈ 0.2 CPU Π½Π° Π²ΡΠ·Π΅Π»Π°, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° 0.2 CPU ΠΈ ΡΡΠ»Π°ΡΠ° Π½Π°Π»ΠΈΡΠ½Π° RAM Π½Π° Π²ΡΠ·Π΅Π»Π°.
-
ΠΠ° Π½ΠΈΠ²ΠΎ ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ ns:
apiVersion: v1 kind: ResourceQuota metadata: name: nxs-test spec: hard: requests.cpu: 300m requests.memory: 1Gi limits.cpu: 700m limits.memory: 2Gi
Π’Π΅Π·ΠΈ. ΡΡΠΌΠ°ΡΠ° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ Π² ns ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° 300m Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΈ 1G Π·Π° OP, Π° ΡΠ±ΠΎΡΡΡ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΅ 700m Π·Π° CPU ΠΈ 2G Π·Π° OP.
-
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π² ns:
apiVersion: v1 kind: LimitRange metadata: name: nxs-limit-per-container spec: limits: - type: Container defaultRequest: cpu: 100m memory: 1Gi default: cpu: 1 memory: 2Gi min: cpu: 50m memory: 500Mi max: cpu: 2 memory: 4Gi
Π’Π΅Π·ΠΈ. Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° Π½Π° 100m Π·Π° CPU ΠΈ 1G Π·Π° OP, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ - 1 CPU ΠΈ 2G. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π·Π°Π΄Π°Π²Π° ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² Π·Π°ΡΠ²ΠΊΠ°/Π»ΠΈΠΌΠΈΡ Π·Π° CPU (50m < x < 2) ΠΈ RAM (500M < x < 4G).
-
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΠΎΠ΄:
apiVersion: v1 kind: LimitRange metadata: name: nxs-limit-pod spec: limits: - type: Pod max: cpu: 4 memory: 1Gi
Π’Π΅Π·ΠΈ. Π·Π° Π²ΡΠ΅ΠΊΠΈ pod Π² ns ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡ 4 vCPU ΠΈ 1G.
Π‘Π΅Π³Π° Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅
ΠΠ°ΠΊΡΠΎ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΡ k8s Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° pods ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡ Scheduler, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ. Π’ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡΠ΅Π· Π΄Π²Π° Π΅ΡΠ°ΠΏΠ° ΠΏΡΠΈ ΠΈΠ·Π±ΠΎΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΡ Π²ΡΠ·Π΅Π» Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅:
- ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅
- ΠΠ±Ρ Π²Π°Ρ
Π’Π΅Π·ΠΈ. ΡΡΠ³Π»Π°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ°Ρ Π²ΡΠ·Π»ΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° pod Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π»ΠΈ Π²ΡΠ·Π΅Π»ΡΡ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ΅ΡΡΡΡΠΈ, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° pod - PodFitsResources), ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ Π²ΡΠ·Π»ΠΈ, ΡΠΏΠΎΡΠ΅Π΄ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈ ΡΠ΅ ΠΏΡΠΈΡΡΠΆΠ΄Π°Ρ ΡΠΎΡΠΊΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈΠΌΠ° Π΄Π°Π΄Π΅Π½ Π²ΡΠ·Π΅Π», ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΡ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Ρ - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) ΠΈ ΠΏΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π° Ρ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΊΠΈ (Π°ΠΊΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ·Π΅Π»Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π½Π° ΡΠΎΠ²Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, ΡΠΎΠ³Π°Π²Π° ΠΈΠ·Π±ΡΠ°Π½ Π΅ ΡΠ»ΡΡΠ°Π΅Π½) .
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΡΠ΅Π½ΡΠ²Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Π²ΡΠ·Π΅Π», ΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ Π² etcd - Ρ.Π΅. Π·Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π·Π°ΡΠ²Π΅Π½/ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠ΅ΡΡΡΡ Π½Π° Π²ΡΠ΅ΠΊΠΈ pod, ΡΠ°Π±ΠΎΡΠ΅Ρ Π½Π° ΡΠΎΠ·ΠΈ Π²ΡΠ·Π΅Π», Π½ΠΎ Π½Π΅ ΠΈ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ. Π’Π°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΎΡ ΠΈΠ·Ρ
ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° kubectl describe node $NODE
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
# kubectl describe nodes nxs-k8s-s1
..
Non-terminated Pods: (9 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
ingress-nginx nginx-ingress-controller-754b85bf44-qkt2t 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system kube-flannel-26bl4 150m (0%) 300m (1%) 64M (0%) 500M (1%) 233d
kube-system kube-proxy-exporter-cb629 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system kube-proxy-x9fsc 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system nginx-proxy-k8s-worker-s1 25m (0%) 300m (1%) 32M (0%) 512M (1%) 233d
nxs-monitoring alertmanager-main-1 100m (0%) 100m (0%) 425Mi (1%) 25Mi (0%) 233d
nxs-logging filebeat-lmsmp 100m (0%) 0 (0%) 100Mi (0%) 200Mi (0%) 233d
nxs-monitoring node-exporter-v4gdq 112m (0%) 122m (0%) 200Mi (0%) 220Mi (0%) 233d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 487m (3%) 822m (5%)
memory 15856217600 (2%) 749976320 (3%)
ephemeral-storage 0 (0%) 0 (0%)
Π’ΡΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π», ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ ΠΈΠ·ΠΈΡΠΊΠ²Π°. Π Π΅ΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠΎΠ΄ΡΡ cronjob-cron-events-1573793820-xt6q9 (ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ 10-ΡΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ -v=10):
Π΄Π½Π΅Π²Π½ΠΈΠΊ
I1115 07:57:21.637791 1 scheduling_queue.go:908] About to try and schedule pod nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.637804 1 scheduler.go:453] Attempting to schedule pod: nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.638285 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s5 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638300 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s6 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s3 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s4 is allowed, Node is running only 17 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638365 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s12 is allowed, Node is running only 9 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s11 is allowed, Node is running only 11 out of 110 Pods.
I1115 07:57:21.638385 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s1 is allowed, Node is running only 19 out of 110 Pods.
I1115 07:57:21.638402 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s2 is allowed, Node is running only 21 out of 110 Pods.
I1115 07:57:21.638383 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638335 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, Node is running only 18 out of 110 Pods.
I1115 07:57:21.638408 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s13 is allowed, Node is running only 8 out of 110 Pods.
I1115 07:57:21.638478 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638505 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638577 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638583 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s7 is allowed, Node is running only 25 out of 110 Pods.
I1115 07:57:21.638932 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 9
I1115 07:57:21.638946 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 8
I1115 07:57:21.638961 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: BalancedResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 9
I1115 07:57:21.638971 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.638975 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: LeastResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 8
I1115 07:57:21.638990 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.639022 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639030 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639034 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639041 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639053 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639059 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639061 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639063 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639073 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639077 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639085 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639088 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639103 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639109 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639114 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639127 1 generic_scheduler.go:781] Host nxs-k8s-s10 => Score 100037
I1115 07:57:21.639150 1 generic_scheduler.go:781] Host nxs-k8s-s8 => Score 100034
I1115 07:57:21.639154 1 generic_scheduler.go:781] Host nxs-k8s-s9 => Score 100037
I1115 07:57:21.639267 1 scheduler_binder.go:269] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10"
I1115 07:57:21.639286 1 scheduler_binder.go:279] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10": all PVCs bound and nothing to do
I1115 07:57:21.639333 1 factory.go:733] Attempting to bind cronjob-cron-events-1573793820-xt6q9 to nxs-k8s-s10
Π’ΡΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡΡ ΡΠΈΠ»ΡΡΠΈΡΠ° ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΠΏΠΈΡΡΠΊ ΠΎΡ 3 Π²ΡΠ·Π΅Π»Π°, Π½Π° ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ BalancedResourceAllocation, LeastResourceAllocation) Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ Π²ΡΠ·Π»ΠΈ, Π·Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ Π²ΡΠ·Π΅Π». Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΏΠΎΠ΄ΡΡ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π° Ρ Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΡΠΎΡΠΊΠΈ (ΡΡΠΊ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π° Π½Π°Π²Π΅Π΄Π½ΡΠΆ ΠΈΠΌΠ°Ρ Π΅Π΄Π½Π°ΠΊΡΠ² Π±ΡΠΎΠΉ ΡΠΎΡΠΊΠΈ 100037, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π±ΠΈΡΠ° ΡΠ»ΡΡΠ°Π΅Π½ - nxs-k8s-s10).
ΠΡΠΎΠ΄ΡΠΊΡΠΈΡ: Π°ΠΊΠΎ Π²ΡΠ·Π΅Π» ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΠΎΠ³Π°Π²Π° Π·Π° k8s (ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ) ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π½Π° ΡΠΎΠ²Π°, ΡΡΠΊΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠΎ Π½ΡΠΌΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΡΠΎΠ·ΠΈ Π²ΡΠ·Π΅Π». Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄ Ρ Π»Π°ΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ wowza) ΠΈ Π·Π° Π½Π΅Π³ΠΎ Π½Π΅ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄ Π²ΡΡΡΠ½ΠΎΡΡ ΠΈΠ·ΡΠ΄Π΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Π²ΡΠ·Π΅Π»Π°, Π½ΠΎ Π·Π° k8s ΡΠΎΠ·ΠΈ Π²ΡΠ·Π΅Π» ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° Π½Π΅Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ ΠΈ ΡΠ΅ ΠΌΡ Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΡΡΠ΄Π΅Π½ΠΈ ΡΡΡΠΈΡ Π±ΡΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΏΡΠΈ ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ (ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΡΠΊΠΈ, ΠΎΡΠ΅Π½ΡΠ²Π°ΡΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ) ΠΊΠ°ΡΠΎ Π²ΡΠ·Π΅Π», ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΠΊΠΎΠ΅ΡΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅.
ΠΠ·Π³ΠΎΠ½Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄
ΠΠ°ΠΊΡΠΎ Π·Π½Π°Π΅ΡΠ΅, Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ Π΅Π΄ΠΈΠ½ ΠΎΡ 3 ΠΊΠ»Π°ΡΠ° QoS:
- Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½ΠΎ β ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² pod ΡΠ° ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π·Π°ΡΠ²ΠΊΠ° ΠΈ Π»ΠΈΠΌΠΈΡ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈ ΡΠ΅Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ
- ΡΠ°Π·ΡΡΡΠ°Π²Π°Ρ ΡΠ΅ β ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² Π³ΡΡΠΏΠ°ΡΠ° ΠΈΠΌΠ° Π·Π°ΡΠ²ΠΊΠ° ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Ρ ΠΈΡΠΊΠ°Π½Π΅ < ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅
- Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ ΡΡΠΈΠ»ΠΈΡ β ΠΊΠΎΠ³Π°ΡΠΎ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² Π³ΡΡΠΏΠ°ΡΠ° Π½Π΅ Π΅ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΡΠ΅ΡΡΡΡ
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π°Π΄Π΅Π½ Π²ΡΠ·Π΅Π» ΠΈΠ·ΠΏΠΈΡΠ° Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ (Π΄ΠΈΡΠΊ, ΠΏΠ°ΠΌΠ΅Ρ), kubelet Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΊΠ»Π°ΡΠΈΡΠ° ΠΈ ΠΈΠ·Π³ΠΎΠ½Π²Π° pods ΡΠΏΠΎΡΠ΅Π΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ, ΠΊΠΎΠΉΡΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π½Π° pod ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ QoS ΠΊΠ»Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° RAM, ΡΠΎΠ³Π°Π²Π° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠ»Π°ΡΠ° QoS ΡΠΎΡΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΡΡΠΆΠ΄Π°Ρ ΡΡΠ³Π»Π°ΡΠ½ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ:
- ΠΠ°ΡΠ°Π½ΡΠΈΡΠ°Π½ΠΎ: -998
- ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠΎΡΠΎ ΡΡΠΈΠ»ΠΈΠ΅: 1000
- Π Π°Π·ΡΡΡΠΈΠΌ: min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)
Π’Π΅Π·ΠΈ. ΡΡΡ ΡΡΡΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, kubelet ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΠΈΠ·Π³ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Ρ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡ QoS ΠΊΠ»Π°Ρ ΠΎΡ Π²ΡΠ·Π΅Π»Π°.
ΠΡΠΎΠ΄ΡΠΊΡΠΈΡ: Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° ΠΆΠ΅Π»Π°Π½ΠΈΡΡ ΠΏΠΎΠ΄ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π³ΠΎΠ½Π΅Π½ ΠΎΡ Π²ΡΠ·Π΅Π»Π° Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π² Π½Π΅Π³ΠΎ, ΡΠΎΠ³Π°Π²Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΡΠ΅ ΠΈ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°/Π»ΠΈΠΌΠΈΡΠ° Π·Π° Π½Π΅Π³ΠΎ.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (HPA)
ΠΠΎΠ³Π°ΡΠΎ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π° Π±ΡΠΎΡΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ (ΡΠΈΡΡΠ΅ΠΌΠ° - CPU/RAM ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» - rps), ΡΠ°ΠΊΡΠ² k8s ΠΎΠ±Π΅ΠΊΡ ΠΊΠ°ΡΠΎ HPA (Horizontal Pod Autoscaler). ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π½Π° ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡ (currentMetricValue)
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ΅ΡΡΡΡΠ° (desiredMetricValue), ΠΊΠΎΠΈΡΠΎ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°
- ΠΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΡ Π±ΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ (currentReplicas)
- Π‘Π»Π΅Π΄Π½Π°ΡΠ° ΡΠΎΡΠΌΡΠ»Π° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΠΆΠ΅Π»Π°Π½ΠΈΡ Π±ΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ (desiredReplicas)
ΠΆΠ΅Π»Π°Π½ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ = [ ΡΠ΅ΠΊΡΡΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ * ( ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅ΡΡΠΈΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ / ΠΆΠ΅Π»Π°Π½Π° ΠΌΠ΅ΡΡΠΈΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ )]
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½ΡΠΌΠ° Π΄Π° Π½Π°ΡΡΡΠΏΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ΅ΡΠΈΡΠΈΠ΅Π½ΡΡΡ (currentMetricValue / desireMetricValue) Π΅ Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ 1 (Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΌΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°ΡΠ° Π³ΡΠ΅ΡΠΊΠ°; ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΡ Π΅ 0.1).
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ hpa, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅), ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π±ΡΠΎΡ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°:
-
ΠΠ°Π½ΠΈΡΠ΅ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
kind: Deployment apiVersion: apps/v1beta2 metadata: name: app-test spec: selector: matchLabels: app: app-test replicas: 2 template: metadata: labels: app: app-test spec: containers: - name: nginx image: registry.nixys.ru/generic-images/nginx imagePullPolicy: Always resources: requests: cpu: 60m ports: - name: http containerPort: 80 - name: nginx-exporter image: nginx/nginx-prometheus-exporter resources: requests: cpu: 30m ports: - name: nginx-exporter containerPort: 9113 args: - -nginx.scrape-uri - http://127.0.0.1:80/nginx-status
Π’Π΅Π·ΠΈ. Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΠΏΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π² Π΄Π²Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° nginx ΠΈ nginx-exporter, Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ ΠΈΡΠΊΠ°Π½ΠΈΡ Π·Π° CPU.
-
ΠΠ°Π½ΠΈΡΠ΅ΡΡ Π½Π° HPA
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: app-test-hpa spec: maxReplicas: 10 minReplicas: 2 scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: app-test metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 30
Π’Π΅Π·ΠΈ. Π‘ΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ hpa, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π²Π° ΡΠ΅ΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π±ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° (ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΏΠΎΠ΄ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° 30% ΠΎΡ CPU, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ°), ΠΊΠ°ΡΠΎ Π±ΡΠΎΡΡ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ 2-10.
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° hpa, Π°ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΠΎΠ²Π°Ρ ΠΊΡΠΌ Π΅Π΄Π½ΠΎ ΠΎΡ ΠΎΠ³Π½ΠΈΡΠ°ΡΠ°:
# kubectl top pod NAME CPU(cores) MEMORY(bytes) app-test-78559f8f44-pgs58 101m 243Mi app-test-78559f8f44-cj4jz 4m 240Mi
ΠΠ±ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠ΅Π»Π°Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ (desiredMetricValue) - ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° hpa ΠΈΠΌΠ°ΠΌΠ΅ 30%
- Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ (currentMetricValue) - Π·Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡΡ-ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΡΠ΅Π΄Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡ Π² %, Ρ.Π΅. ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠΎΠ»ΡΡΠ°Π²Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° pod ΠΎΡ ΡΡΡΠ²ΡΡΠ° Π½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅, Ρ.Π΅. 101ΠΌ ΠΈ 4ΠΌ
- ΠΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΡΠ΅Π΄Π½Π°ΡΠ° Π°Π±ΡΠΎΠ»ΡΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Ρ.Π΅. (101m + 4m) / 2 = 53m
- ΠΠΎΠ»ΡΡΠ°Π²Π° Π°Π±ΡΠΎΠ»ΡΡΠ½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π·Π° ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ (Π·Π° ΡΠΎΠ²Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΡΠ΅ ΡΡΠΌΠΈΡΠ°Ρ) 60m + 30m = 90m
- ΠΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΡΠ΅Π΄Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π½Ρ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Ρ.Π΅. 53m / 90m * 100% = 59%
Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π°Π»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ Π±ΡΠΎΡ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅; Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ΅ΡΠΈΡΠΈΠ΅Π½ΡΠ°:
ratio = 59% / 30% = 1.96
Π’Π΅Π·ΠΈ. Π±ΡΠΎΡΡ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ ~2 ΠΏΡΡΠΈ ΠΈ Π΄Π° Π²ΡΠ·Π»ΠΈΠ·Π° Π½Π° [2 * 1.96] = 4.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎΠ·ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΅ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π² Π½Π°Π±Π»ΡΠ΄Π°Π²Π°Π½ΠΈΡ pod.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ·Π»ΠΈ (Cluster Autoscaler)
ΠΠ° Π΄Π° ΡΠ΅ Π½Π΅ΡΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π½ΠΎΡΠΎ Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΊΠΎΠΊΠΎΠ²Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ hpa. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π² ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° Π½Π° hpa, ΡΠΎΠΉ ΡΠ΅ΡΠ°Π²Π°, ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ 2 ΠΏΡΡΠΈ, Π½ΠΎ Π²ΡΠ·Π»ΠΈΡΠ΅ Π½ΡΠΌΠ°Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΡΠ°ΠΊΡΠ² Π±ΡΠΎΠΉ ΠΏΠΎΠ΄ΠΎΠ²Π΅ (Ρ.Π΅. Π²ΡΠ·Π΅Π»ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΊΡΠΌ Π³ΡΡΠΏΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠΈ) ΠΈ ΡΠ΅Π·ΠΈ Π³ΡΡΠΏΠΈ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΠ°Π½Π΅.
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ, Π°ΠΊΠΎ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΡΡ ΠΈΠΌΠ° ΡΡΠΎΡΠ²Π΅ΡΠ΅Π½ IaaS/PaaS (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ GKE/GCE, AKS, EKS ΠΈ Ρ.Π½.), ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠΎ ΠΡΠ·Π΅Π» Autoscaler. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ Π±ΡΠΎΠΉ Π²ΡΠ·Π»ΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΊΡΡΠΈΡ Π±ΡΠΎΠΉ Π²ΡΠ·Π»ΠΈ (ΡΡΠ΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° API Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π½Π° ΠΎΠ±Π»Π°ΠΊ, Π·Π° Π΄Π° ΠΏΠΎΡΡΡΠ°ΡΠ΅/ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅ Π²ΡΠ·Π΅Π»), ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ° Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½ΠΈ (ΡΠ° Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅).
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΡΠ΅ Π²ΡΠ·Π»ΠΈΡΠ΅, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° pod, ΡΠ°ΠΊΠ° ΡΠ΅ k8s Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΠΎΡΠ΅Π½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ Π΄Π° Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°, ΡΠ΅ Π½ΡΠΌΠ° ΡΠ΅ΡΡΡΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ pod.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π΅ Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π·Π° ΡΡΠΏΠ΅ΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΈΡΠΈΠ½ΠΈ:
- ΠΠ° ΠΏΠΎ-ΡΠΎΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ k8s Π²ΡΠ·Π»ΠΈΡΠ΅
- ΠΠ° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° ΠΎΡ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ βΠΈΠ·Π³ΠΎΠ½Π²Π°Π½Π΅ Π½Π° ΠΊΠ°ΠΏΡΡΠ»Π°β.
- ΠΠ° ΡΠ°Π±ΠΎΡΠ° Ρ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (HPA).
- ΠΠ° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ·Π»ΠΈ (Cluster Autoscaling) Π·Π° ΠΎΠ±Π»Π°ΡΠ½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ°ΡΠΈΠΈ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
Tekton Pipeline - ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈ Π½Π° Kubernetes ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° Nginx ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° ΠΎΡ ClickHouse Π±Π΅Π· Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΊΡΠΌ ClickHouse Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ? Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ Π² Golang Π’ΡΠΈ Π»Π΅ΡΠ½ΠΈ ΡΡΠΈΠΊΠ° Π·Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ Π½Π° Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΠΈ ΡΠ΅Π± ΠΏΡΠΎΠ΅ΠΊΡΠΈ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com