Kubernetes: Π·Π°Ρ‰ΠΎ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ Π΄Π° настроитС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° систСмнитС рСсурси?

По ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° Π½ΡƒΠΆΠ΄Π° Π΄Π° сС прСдостави спСциалСн ΠΏΡƒΠ» ΠΎΡ‚ рСсурси Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΠΈ стабилна Ρ€Π°Π±ΠΎΡ‚Π°. Но ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ станС, Π°ΠΊΠΎ няколко прилоТСния работят Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅? Как Π΄Π° осигурим Π½Π° всСки ΠΎΡ‚ тях ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ рСсурси? Как ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСсурси? Как ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅? Как Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π°ΠΊΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ?

Kubernetes: Π·Π°Ρ‰ΠΎ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ Π΄Π° настроитС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° систСмнитС рСсурси?

Врябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ с Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ основни Π²ΠΈΠ΄ΠΎΠ²Π΅ рСсурси ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² систСмата - Ρ‚ΠΎΠ²Π°, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΅ процСсорно Π²Ρ€Π΅ΠΌΠ΅ ΠΈ 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, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ. Π’ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· Π΄Π²Π° Π΅Ρ‚Π°ΠΏΠ° ΠΏΡ€ΠΈ ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° оптималния възСл Π·Π° стартиранС:

  1. Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅
  2. ΠžΠ±Ρ…Π²Π°Ρ‚

Π’Π΅Π·ΠΈ. съгласно описаната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ сС ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ възли, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ възмоТно Π΄Π° сС стартира 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:

  1. Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ β€” сС присвоява, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π° всСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² pod са посочСни заявка ΠΈ Π»ΠΈΠΌΠΈΡ‚ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ процСсор ΠΈ Ρ‚Π΅Π·ΠΈ стойности трябва Π΄Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚
  2. Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π²Π°Ρ‰ сС β€” ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΈΠΌΠ° заявка ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, с исканС < ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅
  3. Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ усилия β€” ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π΅ Π΅ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ рСсурс

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π΄Π΅Π½ възСл ΠΈΠ·ΠΏΠΈΡ‚Π° липса Π½Π° рСсурси (диск, ΠΏΠ°ΠΌΠ΅Ρ‚), 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). ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ сС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ показания Π½Π° наблюдавания рСсурс (currentMetricValue)
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ сС ΠΆΠ΅Π»Π°Π½ΠΈΡ‚Π΅ стойности Π·Π° рСсурса (desiredMetricValue), ΠΊΠΎΠΈΡ‚ΠΎ Π·Π° систСмнитС рСсурси сС Π·Π°Π΄Π°Π²Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° заявка
  3. ΠžΠΏΡ€Π΅Π΄Π΅Π»Ρ сС тСкущият Π±Ρ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (currentReplicas)
  4. Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° изчислява ТСлания Π±Ρ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (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) - Π·Π° изчислСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΡŠΡ‚-ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ изчислява срСдната стойност Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСсурс Π² %, Ρ‚.Π΅. условно ΠΏΡ€Π°Π²ΠΈ слСдното:
    1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ стойности Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° pod ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅, Ρ‚.Π΅. 101ΠΌ ΠΈ 4ΠΌ
    2. Π˜Π·Ρ‡ΠΈΡΠ»ΡΠ²Π° срСдната Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π° стойност, Ρ‚.Π΅. (101m + 4m) / 2 = 53m
    3. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ‚Π° стойност Π·Π° ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° рСсурси (Π·Π° Ρ‚ΠΎΠ²Π° заявкитС Π½Π° всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ сС сумират) 60m + 30m = 90m
    4. Π˜Π·Ρ‡ΠΈΡΠ»ΡΠ²Π° срСдния ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° процСсора ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° заявката, Ρ‚.Π΅. 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.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Врябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ограничСния Π½Π° рСсурситС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π΅ Π΅ изискванС Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ изпълнСниС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½ΠΎ всС ΠΏΠ°ΠΊ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°Π΄ΠΈ слСднитС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ:

  1. Π—Π° ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° балансиранСто Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ k8s Π²ΡŠΠ·Π»ΠΈΡ‚Π΅
  2. Π—Π° Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ вСроятността ΠΎΡ‚ възникванС Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ β€žΠΈΠ·Π³ΠΎΠ½Π²Π°Π½Π΅ Π½Π° ΠΊΠ°ΠΏΡΡƒΠ»Π°β€œ.
  3. Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ прилоТСния (HPA).
  4. Π—Π° Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° възли (Cluster Autoscaling) Π·Π° ΠΎΠ±Π»Π°Ρ‡Π½ΠΈ доставчици

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ статии Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€