Kubernetes: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เบชเบณเบ„เบฑเบ™เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš?

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบ™เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบญเบธเบ—เบดเบ”เบ•เบปเบ™เป€เบžเบทเปˆเบญเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡เบกเบฑเบ™. เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ”เบฝเบงเบเบฑเบ™? เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒ? เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ”เป‰เปเบ™เบงเปƒเบ”? เบงเบดเบ—เบตเบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เป‚เบซเบผเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡? เบงเบดเบ—เบตเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ–เป‰เบฒเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™?

Kubernetes: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เบชเบณเบ„เบฑเบ™เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš?

เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ•เบปเป‰เบ™เบ•เปเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš - เบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเปเบฅเบฐ RAM. เปƒเบ™ k8s manifests เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบงเบฑเบ”เปเบ—เบเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • CPU - เปƒเบ™ cores
  • RAM - เปƒเบ™ bytes

เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบชเบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™ - เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป ะธ เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป - เบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบŸเบฃเบตเบ‚เบญเบ‡ node เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ container (เปเบฅเบฐ pod เบ—เบฑเบ‡เบซเบกเบปเบ”), เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ container.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ manifest เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบ—เบฑเบ‡เบชเบญเบ‡เบ›เบฐเป€เบžเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™, เปเบ•เปˆเบžเบถเบ”เบ•เบดเบเปเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ–เป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เบˆเบฐเป€เบญเบปเบฒเบกเบนเบ™เบ„เปˆเบฒเป€เบ—เบปเปˆเบฒเบเบฑเบšเบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบ). เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบˆเบฐเบ–เบทเบเบˆเปเบฒเบเบฑเบ”เปƒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™.
  • เบ–เป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ–เบทเบเบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰ - i.e. container เป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเป‚เบ”เบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡ node เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบ–เบฑเบ‡เบชเบฐเป€เบžเบฒเบฐ, เปเบ•เปˆเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบš namespace เป‚เบ”เบเปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ” โ€” เบญเบฐเบ—เบดเบšเบฒเบเบ™เบฐเป‚เบเบšเบฒเบเบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เปƒเบ™เบฅเบฐเบ”เบฑเบšเบšเบฑเบ™เบˆเบธ / เบเบฑเบเปƒเบ™ ns เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต / เบเบฑเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ–เบฑเบ‡เป„เบ‚เบกเบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™ / เบเบฑเบ (เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™), เบˆเปเบฒเบเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบกเบนเบ™เบ„เปˆเบฒเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป
  • เป‚เบ„เบ•เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ โ€” เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบเบฒเบ™โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เป‚เบ”เบโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบˆเบธโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปƒเบ™ ns เปเบฅเบฐโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹, เป€เบ›เบฑเบ™โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบเบฒเบ™โ€‹, เป€เบžเบทเปˆเบญโ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบ”เบฒโ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบก (เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ‚เบฑเป‰เบกโ€‹เบ‡เบงเบ”โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบ”เบฑเบš nodeโ€‹)

เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ manifests เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™:

  • เปƒเบ™เบฅเบฐเบ”เบฑเบšเบšเบฑเบ™เบˆเบธเบชเบฐเป€เบžเบฒเบฐ:

    containers:
    - name: app-nginx
      image: nginx
      resources:
        requests:
          memory: 1Gi
        limits:
          cpu: 200m

    เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ container เบ—เบตเปˆเบกเบต nginx, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ 1G เบ‚เบญเบ‡ RAM เบŸเบฃเบตเปเบฅเบฐ 0.2 CPU เปƒเบ™ node, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ” container เบชเบฒเบกเบฒเบ”เบšเปเบฅเบดเป‚เบžเบ 0.2 CPU เปเบฅเบฐ RAM เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ node.

  • เปƒเบ™เบฅเบฐเบ”เบฑเบšเบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก 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 เบชเปเบฒเบฅเบฑเบš CPU เปเบฅเบฐ 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

    เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™ namespace เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธเบ—เบฑเบ‡เบซเบกเบปเบ”, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเบฐเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 100m เบชเปเบฒเบฅเบฑเบš CPU เปเบฅเบฐ 1G เบชเปเบฒเบฅเบฑเบš OP, เบˆเปเบฒเบเบฑเบ” - 1 CPU เปเบฅเบฐ 2G. เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบเบฑเบ‡เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป / เบˆเปเบฒเบเบฑเบ”เบชเปเบฒเบฅเบฑเบš CPU (50m < x < 2) เปเบฅเบฐ RAM (500M < x < 4G).

  • เบ‚เปเป‰เบˆเบณเบเบฑเบ”เบฅเบฐเบ”เบฑเบš Pod:

    apiVersion: v1
    kind: LimitRange
    metadata:
     name: nxs-limit-pod
    spec:
     limits:
     - type: Pod
       max:
         cpu: 4
         memory: 1Gi

    เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฑเบเปƒเบ™ ns เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฐเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡ 4 vCPU เปเบฅเบฐ 1G.

เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบขเบฒเบเบšเบญเบเป€เบˆเบปเป‰เบฒเบงเปˆเบฒเบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ.

เบเบปเบ™เป„เบเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes

เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบญเบปเบ‡เบ›เบฐเบเบญเบš k8s เปเบกเปˆเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ pods เปƒเบ™เบšเบฑเบ™เบ”เบฒ nodes, เป€เบŠเบฑเปˆเบ™: เบœเบนเป‰ เบเบณ เบ™เบปเบ”เป€เบงเบฅเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบชเบฐเป€เบžเบฒเบฐ. เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เบœเปˆเบฒเบ™เบชเบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบกเบทเปˆเบญเป€เบฅเบทเบญเบ node เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง:

  1. เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡
  2. เบฅเบฐเบ”เบฑเบš

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบญเบตเบ‡เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบกเปˆเบ™เป€เบฅเบทเบญเบ nodes เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง pod เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบŠเบธเบ” เบ„เบฒเบ” (เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบงเปˆเบฒ node เบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบžเบฝเบ‡เบžเปเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ pod - PodFitsResources), เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ nodes, เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™ เบšเบนเบฅเบดเบกเบฐเบชเบดเบ” เบ„เบฐเปเบ™เบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบฎเบฒเบ‡เบงเบฑเบ™ (เบฅเบงเบกเบ—เบฑเบ‡, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบซเบผเบฒเบเบ—เบตเปˆ node เบกเบต, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบซเบผเบฒเบเบˆเบธเบ” - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation) เปเบฅเบฐ pod เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™ node เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ” (เบ–เป‰เบฒเบซเบผเบฒเบ nodes เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™. เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเปเบšเบšเบชเบธเปˆเบก).

เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ, เป€เบกเบทเปˆเบญเบ›เบฐเป€เบกเบตเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ‚เบญเบ‡ node, เบ–เบทเบเบ™เปเบฒเบžเบฒเป‚เบ”เบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ etcd - i.e. เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป / เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ pod เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ node เบ™เบตเป‰, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ•เบปเบงเบˆเบดเบ‡. เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ 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%)

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ node เบชเบฐเป€เบžเบฒเบฐ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบเบฑเบเบฎเป‰เบญเบ‡เบ‚เป. เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเป€เบšเบดเปˆเบ‡เบ„เบทเป€เบกเบทเปˆเบญ cronjob-cron-events-1573793820-xt6q9 pod เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง (เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฐเบ”เบฑเบšเบšเบฑเบ™เบ—เบถเบเบ—เบต 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 nodes เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง (nxs-k8s-s8, nxs-k8s-s9, nxs-k8s-s10). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ„เบดเบ”เป„เบฅเปˆเบ„เบฐเปเบ™เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡ (เบฅเบงเบกเบ—เบฑเบ‡ BalancedResourceAllocation, LeastResourceAllocation) เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ node เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” node เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบชเบธเบ”. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบเบฑเบเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ node เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบˆเบธเบ”เบชเบนเบ‡เบชเบธเบ” (เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบชเบญเบ‡ nodes เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบกเบตเบˆเปเบฒเบ™เบงเบ™เบˆเบธเบ”เบ”เบฝเบงเบเบฑเบ™ 100037, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เปเบšเบšเบชเบธเปˆเบกเบ–เบทเบเป€เบฅเบทเบญเบ - nxs-k8s-s10).

เบชเบฐเบซเบฅเบธเบš: เบ–เป‰เบฒ node เปเบฅเปˆเบ™ pods เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบš k8s (เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™) เบ™เบตเป‰เบˆเบฐเป€เบ—เบปเปˆเบฒเบเบฑเบšเบงเปˆเบฒเบšเปเปˆเบกเบต pods เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบขเบนเปˆเปƒเบ™ node เบ—เบฑเบ‡เบซเบกเบปเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™, เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, เบกเบตเบเบฑเบเบ—เบตเปˆเบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ gluttonous (เบ•เบปเบงเบขเปˆเบฒเบ‡, wowza) เปเบฅเบฐเบšเปเปˆเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบกเบทเปˆเบญเบเบฑเบเบ™เบตเป‰เบเบดเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ node, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš k8s node. เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ unloaded เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบฎเบฒเบ‡เบงเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบˆเบธเบ”เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบˆเบฑเบ”เบญเบฑเบ™เบ”เบฑเบš (เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เบˆเบธเบ”เบ›เบฐเป€เบกเบตเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ) เป€เบ›เบฑเบ™ node เบ—เบตเปˆเบšเปเปˆเบกเบต pods เป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เป‚เบซเบผเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes เบšเปเปˆเบชเบฐเป€เบซเบกเบตเบเบฑเบ™.

เบเบฒเบ™เบ‚เบฑเบšเป„เบฅเปˆ Pod

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบฎเบนเป‰, เปเบ•เปˆเบฅเบฐเบเบฑเบเปเบกเปˆเบ™เบกเบญเบšเปเบฒเบเปœเบถเปˆเบ‡เปƒเบ™ 3 เบŠเบฑเป‰เบ™เบฎเบฝเบ™ QoS:

  1. เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ โ€” เบ–เบทเบโ€‹เบกเบญเบšโ€‹เปเบฒเบโ€‹เป€เบกเบทเปˆเบญโ€‹เบชเบณโ€‹เบฅเบฑเบšโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เปƒเบ™โ€‹เบเบฑเบ เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เป เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบˆเบณโ€‹เบเบฑเบ”โ€‹เบ–เบทเบโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เบชเบณโ€‹เบฅเบฑเบšโ€‹เปœเปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเบณ เปเบฅเบฐ CPU, เปเบฅเบฐ เบ„เปˆเบฒโ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบปเบ‡โ€‹เบเบฑเบ™.
  2. เบฅเบฐเป€เบšเบตเบ”เป„เบ”เป‰ โ€” เบขเปˆเบฒเบ‡โ€‹เบซเบ™เป‰เบญเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ–เบฑเบ‡โ€‹เปƒเบ™โ€‹เบเบฑเบโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เปเบฅเบฐโ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹, เบกเบตโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบ < limit
  3. เบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ” โ€” เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ–เบฑเบ‡โ€‹เบ”เบฝเบงโ€‹เปƒเบ™โ€‹เบเบฑเบโ€‹เปเบกเปˆเบ™โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹

เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป€เบกเบทเปˆเบญ node เบ›เบฐเบชเบปเบšเบเบฑเบšเบเบฒเบ™เบ‚เบฒเบ”เปเบ„เบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เปเบœเปˆเบ™, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ), kubelet เป€เบฅเบตเปˆเบกเบˆเบฑเบ”เบฅเปเบฒเบ”เบฑเบšเปเบฅเบฐเบ‚เบฑเบšเป„เบฅเปˆ pods เบ•เบฒเบกเบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ‚เบญเบ‡ pod เปเบฅเบฐเบŠเบฑเป‰เบ™ QoS เบ‚เบญเบ‡เบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš RAM, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบŠเบฑเป‰เบ™ QoS, เบˆเบธเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบฅเบฒเบ‡เบงเบฑเบ™เบ•เบฒเบกเบซเบผเบฑเบเบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™: -998
  • เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”: 1000
  • เบฅเบฐเป€เบšเบตเบ”เป„เบ”เป‰: min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999)

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ”เป‰เบงเบเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบ”เบฝเบงเบเบฑเบ™, kubelet เบ—เปเบฒเบญเบดเบ”เบˆเบฐเบ‚เบฑเบšเป„เบฅเปˆเบเบฑเบเบ”เป‰เบงเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ” QoS class เบˆเบฒเบ node.

เบชเบฐเบซเบฅเบธเบš: เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฑเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ–เบทเบเบ‚เบฑเบšเป„เบฅเปˆเบญเบญเบเบˆเบฒเบ node เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ‚เบฒเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเป‰เบญเบกเบเบฑเบšเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”, เบ—เปˆเบฒเบ™เบเปเปˆเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เปเบเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป / เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™.

เบเบปเบ™โ€‹เป„เบโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ•เบฒเบกโ€‹เบฅเบงเบ‡โ€‹เบ™เบญเบ™โ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบžเบญเบ”โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบ (HPAโ€‹)

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ—เบฐเบงเบตเบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบซเบผเบธเบ”เบฅเบปเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ pods เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบฅเบฐเบšเบปเบš - CPU / RAM เบซเบผเบทเบœเบนเป‰เปƒเบŠเป‰ - rps), เป€เบŠเบฑเปˆเบ™ k8s entity เป€เบ›เบฑเบ™. HPA (Horizontal Pod Autoscaler). เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  1. เบเบฒเบ™เบญเปˆเบฒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ” (CurrentMetricValue)
  2. เบ„เปˆเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ” (desiredMetricValue), เป€เบŠเบดเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป.
  3. เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡ replicas เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เบเปเบฒโ€‹เบ™เบปเบ” (currentReplicasโ€‹)
  4. เบชเบนเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ„เบดเบ”เป„เบฅเปˆเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡ replicas (desiredReplicas)
    desiredReplicas = [ currentReplicas * ( currentMetricValue / desiredMetricValue )]

เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰, scaling เบˆเบฐโ€‹เบšเปเปˆโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆ coefficient (currentMetricValue / desiredMetricValue) เปƒเบเป‰โ€‹เบเบฑเบš 1 (เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบ•เบปเบงโ€‹เป€เบญเบ‡; เป‚เบ”เบโ€‹เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบกเบฑเบ™โ€‹เปเบกเปˆเบ™ 0.1).

เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ hpa เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ app-test (เบญเบฐเบ—เบดเบšเบฒเบเป€เบ›เบฑเบ™ Deployment), เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ replicas เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบ CPU:

  • เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ manifest

    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 Manifesto

    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 เบ—เบตเปˆเบˆเบฐเบเบงเบ”เบชเบญเบš Deployment app-test เปเบฅเบฐเบ„เบงเบšเบ„เบธเบกเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ pods เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ” cpu (เบžเบงเบเป€เบฎเบปเบฒเบ„เบฒเบ”เบงเปˆเบฒ pod เบ„เบงเบ™เบšเปเบฅเบดเป‚เบžเบ 30% เป€เบ›เบตเป€เบŠเบฑเบ™เบ‚เบญเบ‡ CPU เบ—เบตเปˆเบกเบฑเบ™เบฎเป‰เบญเบ‡เบ‚เป), เบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ replicas เป„เบ”เป‰. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ 2-10.

    เบ”เบฝเบงเบ™เบตเป‰, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบเบปเบ™เป„เบเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ hpa เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒ เบ™เบณ เปƒเบŠเป‰เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบชเปˆ เปœเบถเปˆเบ‡ เปƒเบ™ hearths:

     # kubectl top pod
    NAME                                                   CPU(cores)   MEMORY(bytes)
    app-test-78559f8f44-pgs58            101m         243Mi
    app-test-78559f8f44-cj4jz            4m           240Mi

เป‚เบ”เบโ€‹เบฅเบงเบกโ€‹เปเบฅเป‰เบงโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

  • เบ„เปˆเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ (desiredMetricValue) - เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ hpa, เบžเบงเบเป€เบฎเบปเบฒเบกเบต 30%
  • เบกเบนเบ™เบ„เปˆเบฒเบ›เบฐเบˆเบธเบšเบฑเบ™ (currentMetricValue) - เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ, controller-manager เบ„เบดเบ”เป„เบฅเปˆเบกเบนเบ™เบ„เปˆเบฒเบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™ %, i.e. เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:
    1. เป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡ pod metrics เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ metric, i.e. 101m เปเบฅเบฐ 4m
    2. เบ„เบดเบ”เป„เบฅเปˆเบ„เปˆเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบชเบฐเป€เบฅเปˆเบ, i.e. (101m + 4m) / 2 = 53m
    3. เป„เบ”เป‰เบฎเบฑเบšเบกเบนเบ™เบ„เปˆเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰) 60m + 30m = 90m
    4. เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹เบญเบฑเบ”โ€‹เบ•เบฒโ€‹เบชเปˆเบงเบ™โ€‹เบชเบฐโ€‹เป€เบฅเปˆเบโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เป‚เบžเบ CPU เบ—เบฝเบšโ€‹เบเบฑเบš pod เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹, i.e. 53m / 90m * 100% = 59%

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเปเบฒเบ™เบงเบ™ replicas เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เป„เบฅเปˆเบ„เปˆเบฒเบชเปเบฒเบ›เบฐเบชเบดเบ”:

ratio = 59% / 30% = 1.96

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡ replicas เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹เป‚เบ”เบ ~2 เป€เบ—เบปเปˆเบฒโ€‹เปเบฅเบฐโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เป€เบ›เบฑเบ™ [2 * 1.96โ€‹] = 4โ€‹.

เบชเบฐเบซเบผเบธเบš: เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบปเบ™เป„เบเบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบžเบฒเบŠเบฐเบ™เบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเบฑเบเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™.

เบเบปเบ™เป„เบเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™เบ‚เบญเบ‡เป‚เบ™เบ” (Cluster Autoscaler)

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบšเบ•เปเปˆเบฅเบฐเบšเบปเบšเป€เบ›เบฑเบ™เบเบฒเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบซเบผเบ”, เบเบฒเบ™เบกเบต hpa เบ—เบตเปˆเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบšเปเปˆเบžเบฝเบ‡เบžเป. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ hpa, เบกเบฑเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™ replicas เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 2 เป€เบ—เบปเปˆเบฒ, เปเบ•เปˆ nodes เบšเปเปˆเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ pods เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง (i.e. node เบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™. เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบเบฑเบš pods เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป) เปเบฅเบฐ pods เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฐเบซเบผเบฑเบšเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบเบฑเบ‡เบ„เป‰เบฒเบ‡.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ–เป‰เบฒเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบกเบต IaaS/PaaS เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, GKE/GCE, AKS, EKS, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™: Node Autoscaler. เบกเบฑเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบˆเปเบฒเบ™เบงเบ™เบชเบนเบ‡เบชเบธเบ”เปเบฅเบฐเบ•เปเบฒเปˆเบชเบธเบ”เบ‚เบญเบ‡ nodes เปƒเบ™ cluster เปเบฅเบฐเบ›เบฑเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ nodes เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ (เป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒ API เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบŸเบฑเบ‡เป€เบžเบทเปˆเบญเบชเบฑเปˆเบ‡ / เบ–เบญเบ™ node) เป€เบกเบทเปˆเบญเบ‚เบฒเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™ cluster เปเบฅเบฐ pods. เบšเปเปˆเบชเบฒเบกเบฒเบ”เบเบณเบ™เบปเบ”เป€เบงเบฅเบฒเป„เบ”เป‰ (เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบเบฑเบ‡เบ„เป‰เบฒเบ‡เบขเบนเปˆ).

เบชเบฐเบซเบผเบธเบš: เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐ เปœเบฒเบ” เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป„เบ”เป‰, เบกเบฑเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ เบเบณ เบ™เบปเบ” เบ„เบณ เบฎเป‰เบญเบ‡เบ‚เปเปƒเบ™เบ–เบฑเบ‡ pods เป€เบžเบทเปˆเบญเปƒเบซเป‰ k8s เบชเบฒเบกเบฒเบ”เบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เป‚เบซเบผเบ”เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบฅเบฒเบเบ‡เบฒเบ™เบ•เบฒเบกเบ„เบงเบฒเบก เป€เปเบฒเบฐ เบชเบปเบกเบงเปˆเบฒเบšเปเปˆเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เบเบธเปˆเบกเป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง pod เบ•เปเปˆเป„เบ›.

เบชเบฐเบซเบฅเบธเบš

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  1. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบฒเบเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ k8s nodes
  2. เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™ "เบ‚เบฑเบšเป„เบฅเปˆเบเบฑเบ" เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™
  3. เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™เบ‚เบญเบ‡เบžเบญเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ (HPA) เป€เบฎเบฑเบ”เบงเบฝเบ
  4. เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™เบ‚เบญเบ‡เป‚เบ™เบ” (Cluster Autoscaling) เบชเบณเบฅเบฑเบšเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ„เบฅเบฒเบง

เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบญเบทเปˆเบ™เป†เปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™