เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเบฐโ€‹เบเบฝเบกโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบŠเบฒโ€‹เบเบฒเบ™ "เป€เบงเบ—เบตเบžเบทเป‰เบ™เบ–เบฒเบ™เป‚เบ„เบ‡เบฅเปˆเบฒเบ‡เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Kubernetes".

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

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

เบ‚เป‰เบญเบเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบเบฑเบš Kubernetes เบชเปเบฒเบฅเบฑเบš AWS เปƒเบ™เปƒเบˆ, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ (เป€เบเบทเบญเบš) เบ„เบทเบเบฑเบ™เบเบฑเบšเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบŸเบฑเบ‡เบญเบทเปˆเบ™เป†. เบ‚เป‰เบญเบเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบเบธเปˆเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบกเบตเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเป‰เบง (cluster-autoscaler). เบเบฒเบ™เป€เบญเบปเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบญเบ เปเบฅเบฐเบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบˆเบฐเบ›เบฐเบขเบฑเบ”เป€เบ‡เบดเบ™เป„เบ”เป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบ–เป‰เบฒเบกเบฑเบ™เบเบฑเบ‡เบซเบผเบธเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เบปเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ (เบ•เบปเบงเบขเปˆเบฒเบ‡ EC2).

เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบเบงเบกเป€เบญเบปเบฒ:

  • เบ—เปเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฐโ€‹เบญเบฒเบ”โ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ (kube-janitor)
  • เบซเบผเบธเบ”เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ (kube-downscaler)
  • เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบ•เบฒเบกโ€‹เบฅเบงเบ‡โ€‹เบ™เบญเบ™ (HPAโ€‹)โ€‹,
  • เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบˆเบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ› (kube-resource-report, VPA)
  • เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ Spot เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹

เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰

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

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

(Henning Jacobs:
Zhiza:
Corey Quinn:
Myth: เบšเบฑเบ™เบŠเบต AWS เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบต.
เบ„เบงเบฒเบกเบˆเบดเบ‡: เบ„เบฐเปเบ™เบ™ AWS เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบต.

Ivan Kurnosov (เบ•เบญเบšเป‚เบ•เป‰):
เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡โ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹: เบ„เบฐโ€‹เปเบ™เบ™ AWS เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบฅเบทเบกโ€‹เบ›เบดเบ”โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™ / เบฅเบถเบšโ€‹.

Kubernetes Janitor (kube-janitor) เบŠเปˆเบงเบเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ janitor เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบปเปˆเบงเป‚เบฅเบเปเบฅเบฐเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™:

  • เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡เบเบธเปˆเบกเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบชเบนเบ‡เบชเบธเบ”เบ•เปเปˆเบŠเบตเบงเบดเบ” (TTL) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” PR/test.
  • เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบ”เป‰เบงเบ janitor/ttl, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบžเบทเปˆเบญเป€เบญเบปเบฒ spike/prototype เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบ 7 เบกเบทเป‰.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบปเปˆเบงเป„เบ›เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒ YAML. เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ --rules-file เปƒเบ™ kube-janitor. เบ™เบตเป‰เปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒ namespaces เบ—เบฑเบ‡เบซเบกเบปเบ”เบญเบญเบเบ”เป‰เบงเบ -pr- เปƒเบ™โ€‹เบŠเบทเปˆโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบชเบญเบ‡โ€‹เบกเบทเป‰โ€‹:

- id: cleanup-resources-from-pull-requests
  resources:
    - namespaces
  jmespath: "contains(metadata.name, '-pr-')"
  ttl: 2d

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เปƒเบŠเป‰เบ›เป‰เบฒเบเบเบณเบเบฑเบšเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเปˆเบ™เป€เบ—เบดเบ‡ Deployment and StatefulSet pods เบชเบณเบฅเบฑเบš Deployments/StatefulSets เปƒเปเปˆเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบ›เบต 2020, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป‚เบ”เบเบšเปเปˆเบกเบตเบ›เป‰เบฒเบเบเบณเบเบฑเบšเบ™เบตเป‰เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเปœเบถเปˆเบ‡เบญเบฒเบ—เบดเบ”:

- id: require-application-label
  # ัƒะดะฐะปะธั‚ัŒ deployments ะธ statefulsets ะฑะตะท ะผะตั‚ะบะธ "application"
  resources:
    - deployments
    - statefulsets
  # ัะผ. http://jmespath.org/specification.html
  jmespath: "!(spec.template.metadata.labels.application) && metadata.creationTimestamp > '2020-01-01'"
  ttl: 7d

เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบชเบฒเบ—เบดเบ”เปเบšเบšเบˆเบณเบเบฑเบ”เป€เบงเบฅเบฒ 30 เบ™เบฒเบ—เบตเปƒเบ™เบเบธเปˆเบกเบ—เบตเปˆเปเบฅเปˆเบ™ kube-janitor:

kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m

เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ (AWS EBS). เบเบฒเบ™เบฅเบถเบš Kubernetes StatefulSet เบšเปเปˆเป„เบ”เป‰เบฅเบถเบšเบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เบตเปˆเบ„เบปเบ‡เบ„เป‰เบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™ (PVC - PersistentVolumeClaim). เบ›เบฐเบฅเบดเบกเบฒเบ™ EBS เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบซเบผเบฒเบเบฎเป‰เบญเบเป‚เบ”เบฅเบฒเบ•เปเปˆเป€เบ”เบทเบญเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. Kubernetes Janitor เบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ” PVC เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบˆเบฐเป€เบญเบปเบฒ PVCs เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเป‚เบกเบ”เบนเบ™เปเบฅเบฐเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบญเป‰เบฒเบ‡เบญเบตเบ‡เป‚เบ”เบ StatefulSet เบซเบผเบท CronJob:

# ัƒะดะฐะปะธั‚ัŒ ะฒัะต PVC, ะบะพั‚ะพั€ั‹ะต ะฝะต ัะผะพะฝั‚ะธั€ะพะฒะฐะฝั‹ ะธ ะฝะฐ ะบะพั‚ะพั€ั‹ะต ะฝะต ััั‹ะปะฐัŽั‚ัั StatefulSets
- id: remove-unused-pvcs
  resources:
  - persistentvolumeclaims
  jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
  ttl: 24h

Kubernetes Janitor เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเบ—เปˆเบฒเบ™เบฎเบฑเบเบชเบฒเบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบซเป‰เบชเบฐเบญเบฒเบ” เปเบฅเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป‰เบ„เบฅเบฒเบงเบกเบตเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบŠเป‰เบฒเป†. เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก README kube-janitor.

เบซเบผเบธเบ”เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ

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

Kubernetes Downscaler (kube-downscaler) เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰ เปเบฅเบฐเบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบฅเบฐเบšเบปเบšเบฅเบปเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ เปเบฅเบฐ StatefulSets เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เป„เบ”เป‰เป€เบ–เบดเบ‡เบชเบนเบ™ replicas. CronJobs เบญเบฒเบ”เบˆเบฐเบ–เบทเบเป‚เบˆเบฐ. Kubernetes Downscaler เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเป‰เบเบธเปˆเบกเบ—เบฑเบ‡เปเบปเบ”, เบŠเปˆเบญเบ‡เบŠเบทเปˆเปœเบถเปˆเบ‡ เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบซเบผเบทเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ” "เป€เบงเบฅเบฒเบซเบงเปˆเบฒเบ‡" เบซเบผเบท "เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบ". เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเป‰เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เบญเบ™เบเบฒเบ‡เบ„เบทเบ™เปเบฅเบฐเบ—เป‰เบฒเบเบญเบฒเบ—เบดเบ”:

image: hjacobs/kube-downscaler:20.4.3
args:
  - --interval=30
  # ะฝะต ะพั‚ะบะปัŽั‡ะฐั‚ัŒ ะบะพะผะฟะพะฝะตะฝั‚ั‹ ะธะฝั„ั€ะฐัั‚ั€ัƒะบั‚ัƒั€ั‹
  - --exclude-namespaces=kube-system,infra
  # ะฝะต ะพั‚ะบะปัŽั‡ะฐั‚ัŒ kube-downscaler, ะฐ ั‚ะฐะบะถะต ะพัั‚ะฐะฒะธั‚ัŒ Postgres Operator, ั‡ั‚ะพะฑั‹ ะธัะบะปัŽั‡ะตะฝะฝั‹ะผะธ ะ‘ะ” ะผะพะถะฝะพ ะฑั‹ะปะพ ัƒะฟั€ะฐะฒะปัั‚ัŒ
  - --exclude-deployments=kube-downscaler,postgres-operator
  - --default-uptime=Mon-Fri 08:00-20:00 Europe/Berlin
  - --include-resources=deployments,statefulsets,stacks,cronjobs
  - --deployment-time-annotation=deployment-time

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบเบธเปˆเบกเบ„เบปเบ™เบ‡เบฒเบ™เปƒเบ™เบ—เป‰เบฒเบเบญเบฒเบ—เบดเบ”:

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบˆเบฒเบ ~13 เบซเบฒ 4 nodes เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปเบ™เปˆเบ™เบญเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™ AWS เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบธเปˆเบก "downtime"? เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบšเบฒเบ‡เบญเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™เบขเปˆเบฒเบ‡เบ–เบฒเบงเบญเบ™เบˆเบฒเบเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐ เปœเบฒเบ” เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ•เบปเบงเบซเบผเบธเบ”/เบเบปเบเป€เบงเบฑเป‰เบ™: เบ„เบณเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™เบŠเบปเปˆเบงเบ„เบฒเบงเป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเบซเบเปเป‰/exclude-เบˆเบปเบ™เบเปˆเบงเบฒ annotation เบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเปเบ•เบกเป€เบงเบฅเบฒเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบš YYYY-MM-DD HH:MM (UTC). เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบเบธเปˆเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ„เบทเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฑเบเบ—เบตเปˆเบกเบตเบ„เปเบฒเบšเบฑเบ™เบเบฒเบ downscaler/force-uptimeเบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ”เบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง nginx blank:

kubectl run scale-up --image=nginx
kubectl annotate deploy scale-up janitor/ttl=1h # ัƒะดะฐะปะธั‚ัŒ ั€ะฐะทะฒะตั€ั‚ั‹ะฒะฐะฝะธะต ั‡ะตั€ะตะท ั‡ะฐั
kubectl annotate pod $(kubectl get pod -l run=scale-up -o jsonpath="{.items[0].metadata.name}") downscaler/force-uptime=true

เป€เบšเบดเปˆเบ‡ README kube-downscaler, เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เปƒเบŠเป‰เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™

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

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 100
        type: Utilization

Zalando เป„เบ”เป‰เบชเป‰เบฒเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ metrics เปเบšเบšเบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”: เบญเบฐเปเบ”เบšเป€เบ•เบต Kube Metrics (kube-metrics-adapter) เป€เบ›เบฑเบ™เบญเบฐเปเบ”เบšเป€เบ•เบตเบงเบฑเบ”เปเบ—เบเบ—เบปเปˆเบงเป„เบ›เบชเบณเบฅเบฑเบš Kubernetes เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบเบณ เปเบฅเบฐเบฎเบฑเบšเปƒเบŠเป‰เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡ เปเบฅเบฐเบžเบฒเบเบ™เบญเบเบชเบณเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบญเบเบ•เบฒเบกเบฅเบงเบ‡เบ™เบญเบ™เบ‚เบญเบ‡เบเบฑเบ. เบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ metrics Prometheus, เปเบ–เบง SQS, เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบทเปˆเบ™เป†. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบซเป‰เป€เบ›เบฑเบ™ metric เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™ JSON เปƒเบ™ /metrics เปƒเบŠเป‰:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
  annotations:
    # metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
    metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
    metric-config.pods.requests-per-second.json-path/path: /metrics
    metric-config.pods.requests-per-second.json-path/port: "9090"
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metric:
        name: requests-per-second
      target:
        averageValue: 1k
        type: AverageValue

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ•เบฒเบกเบฅเบงเบ‡เบ™เบญเบ™เบ”เป‰เบงเบ HPA เบ„เบงเบ™เป€เบ›เบฑเบ™เปœเบถเปˆเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบฅเบฑเบ”. Spotify เบกเบตโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ›เบฐโ€‹เบชเบปเบšโ€‹เบเบฒเบ™โ€‹เปเบฅเบฐโ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบš HPAโ€‹: เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เบšเปเปˆเปเบกเปˆเบ™เบเบฐเป€เบ›เบปเบฒเป€เบ‡เบดเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.

เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบˆเบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›

เบ›เบฐเบฅเบดเบกเบฒเบ™เบงเบฝเบ Kubernetes เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™ CPU / เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป‚เบ”เบเบœเปˆเบฒเบ™ "เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™." เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ CPU เปเบกเปˆเบ™เบ–เบทเบเบงเบฑเบ”เปเบ—เบเป€เบ›เบฑเบ™เปเบเบ™ virtual เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบปเปˆเบงเป„เบ›เปƒเบ™ "millicores", เบ•เบปเบงเบขเปˆเบฒเบ‡ 500m เบซเบกเบฒเบเป€เบ–เบดเบ‡ 50% vCPU. เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ–เบทเบเบงเบฑเบ”เปเบ—เบเป€เบ›เบฑเบ™ bytes, เปเบฅเบฐเบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบเบ—เบปเปˆเบงเป„เบ›เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰, เป€เบŠเบฑเปˆเบ™: 500Mi, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ 500 megabytes. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ "lock" เบ„เบงเบฒเบกเบญเบฒเบ”เบชเบฒเบกเบฒเบ”เปƒเบ™ nodes เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ pod เบ—เบตเปˆเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป CPU 1000m เปƒเบ™ node เบ—เบตเปˆเบกเบต 4 vCPUs เบˆเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆ 3 vCPUs เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบš pods เบญเบทเปˆเบ™เป†. [1]

Slack (เบชเบฐเบซเบ‡เบงเบ™เป€เบเบตเบ™) เปเบกเปˆเบ™เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบˆเบดเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฑเบเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป 2 GiB เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบ•เปˆเปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆ 200 MiB เบกเบต ~ 1,8 GiB เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ "เป€เบเบตเบ™". เป€เบ‡เบดเบ™เป€เบเบตเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ. เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบ„เบฐเป€เบ™เป„เบ”เป‰เบ›เบฐเบกเบฒเบ™เบงเปˆเบฒ 1 GiB เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบŠเปเป‰เบฒเบŠเป‰เบญเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ ~ $10 เบ•เปเปˆเป€เบ”เบทเบญเบ™. [2]

เบฅเบฒเบเบ‡เบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Kubernetes (kube-resource-report) เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบซเบ‡เบงเบ™โ€‹เป€เบเบตเบ™โ€‹เปเบฅเบฐโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบŠเปˆเบงเบโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ—เปˆเบฒโ€‹เปเบฎเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบขเบฑเบ”โ€‹:

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

เบฅเบฒเบเบ‡เบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Kubernetes เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบชเปˆเบงเบ™โ€‹เป€เบเบตเบ™โ€‹เบฅเบงเบกโ€‹เป‚เบ”เบโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เปเบฅเบฐโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡. เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ HTML เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบซเบ™เบญเบ‡เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™. เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ CPU / เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบžเบฝเบ‡เบžเป. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Grafana เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ CPU เบซเบ™เบฑเบ "เบ›เบปเบเบเบฐเบ•เบด": เบเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เปƒเบŠเป‰เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 3 CPU cores เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ:

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป CPU เบˆเบฒเบ 3000m เบซเบฒ ~ 400m เบ›เบปเบ”เบ›เปˆเบญเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบญเบทเปˆเบ™เป†เปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบธเปˆเบกเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒ.

"เบเบฒเบ™เปƒเบŠเป‰ CPU เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ EC2 เบกเบฑเบเบˆเบฐเบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ•เบปเบงเป€เบฅเบเบ”เบฝเบง," เบ‚เบฝเบ™ Corey Quinn. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบš EC2 เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบšเปเปˆเบ”เบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบšเบฒเบ‡เบ„เปเบฒเบ–เบฒเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Kubernetes เปƒเบ™เป„เบŸเบฅเปŒ YAML เปเบกเปˆเบ™เบ‡เปˆเบฒเบ เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ™เปเบฒเป€เบญเบปเบฒเบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบ„เบปเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เปˆเบฒเปƒเบ™เป„เบŸเบฅเปŒ YAML เปเบ—เป‰เป†เบšเป? เบšเปเปˆ, เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เบตเบเบงเปˆเบฒเบซเบผเบฒเบ! Kubernetes Vertical Pod Autoscaler (VPA) เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™เบ„เบท: เบ›เบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ เปเบฅเบฐเบ‚เปเป‰เบˆเบณเบเบฑเบ”เบ•เบฒเบกเบงเบฝเบ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป Prometheus CPU (เป€เบชเบฑเป‰เบ™เบชเบตเบŸเป‰เบฒเบšเบฒเบ‡เป†) เบ”เบฑเบ”เปเบ›เบ‡เป‚เบ”เบ VPA เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒ:

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

Zalando เปƒเบŠเป‰ VPA เปƒเบ™เบ—เบธเบเบเบธเปˆเบกเบ‚เบญเบ‡เบกเบฑเบ™ เบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เป‚เบ„เบ‡เบฅเปˆเบฒเบ‡. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ VPA เป„เบ”เป‰.

เบ„เบณ เปเบžเบ‡ เบˆเบฒเบ Fairwind เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเป‰เบฒเบ‡ VPA เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ™ namespace เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ VPA เปƒเบ™ dashboard เบ‚เบญเบ‡เบกเบฑเบ™. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป CPU / เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ:

เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ Kubernetes cloud เปƒเบ™ AWS

เบ‚เป‰เบญเบเบ‚เบฝเบ™เบ™เป‰เบญเบเป† blogpost เบเปˆเบฝเบงเบเบฑเบš VPA เปƒเบ™โ€‹เบ›เบต 2019, เปเบฅเบฐโ€‹เป€เบกเบทเปˆเบญโ€‹เบšเปเปˆโ€‹เบ”เบปเบ™โ€‹เบกเบฒโ€‹เบ™เบตเป‰ เบŠเบธเบกเบŠเบปเบ™เบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ CNCF เป„เบ”เป‰เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒ VPA.

เบเบฒเบ™เปƒเบŠเป‰ EC2 Spot Instances

เบชเบธเบ”เบ—เป‰เบฒเบเปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ, เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ AWS EC2 เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰ Spot instances เป€เบ›เบฑเบ™ Kubernetes worker nodes [3]. Spot instances เบกเบตเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบซเบผเบธเบ”เบชเบนเบ‡เบชเบธเบ” 90% เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบฅเบฒเบ„เบฒเบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™. เบเบฒเบ™เปเบฅเปˆเบ™ Kubernetes เปƒเบ™ EC2 Spot เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ—เบตเปˆเบ”เบต: เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบ›เบฐเป€เบžเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบžเป‰เบญเบกเบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš node เบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบฅเบฒเบ„เบฒเบ”เบฝเบงเบเบฑเบ™เบซเบผเบทเบ•เปˆเปเบฒเบเบงเปˆเบฒ, เปเบฅเบฐเบ„เบงเบฒเบกเบญเบฒเบ”เบชเบฒเบกเบฒเบ”เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบšเบฑเบ™เบˆเบธเบ‚เบญเบ‡เบงเบฝเบ Kubernetes.

เบงเบดเบ—เบตเบเบฒเบ™เปเบฅเปˆเบ™ Kubernetes เปƒเบ™ EC2 Spot? เบกเบตเบซเบฅเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ: เปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเป€เบŠเบฑเปˆเบ™ SpotInst (เบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "Spot", เบขเปˆเบฒเบ–เบฒเบกเบ‚เป‰เบญเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡), เบซเบผเบทเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบก Spot AutoScalingGroup (ASG) เป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™ CloudFormation snippet เบชเปเบฒเบฅเบฑเบš "capacity-optimized" Spot ASG เบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡:

MySpotAutoScalingGroup:
 Properties:
   HealthCheckGracePeriod: 300
   HealthCheckType: EC2
   MixedInstancesPolicy:
     InstancesDistribution:
       OnDemandPercentageAboveBaseCapacity: 0
       SpotAllocationStrategy: capacity-optimized
     LaunchTemplate:
       LaunchTemplateSpecification:
         LaunchTemplateId: !Ref LaunchTemplate
         Version: !GetAtt LaunchTemplate.LatestVersionNumber
       Overrides:
         - InstanceType: "m4.2xlarge"
         - InstanceType: "m4.4xlarge"
         - InstanceType: "m5.2xlarge"
         - InstanceType: "m5.4xlarge"
         - InstanceType: "r4.2xlarge"
         - InstanceType: "r4.4xlarge"
   LaunchTemplate:
     LaunchTemplateId: !Ref LaunchTemplate
     Version: !GetAtt LaunchTemplate.LatestVersionNumber
   MinSize: 0
   MaxSize: 100
   Tags:
   - Key: k8s.io/cluster-autoscaler/node-template/label/aws.amazon.com/spot
     PropagateAtLaunch: true
     Value: "true"

เบšเบฑเบ™เบ—เบถเบเบšเบฒเบ‡เบญเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปƒเบŠเป‰ Spot เบเบฑเบš Kubernetes:

  • เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบเบฒเบ™ Spot terminations, เบ•เบปเบงเบขเปˆเบฒเบ‡เป‚เบ”เบเบเบฒเบ™เบฅเบงเบก node เป€เบกเบทเปˆเบญ instance เบ–เบทเบเบขเบธเบ”
  • Zalando เปƒเบŠเป‰ เบชเป‰เบญเบก autoscaling cluster เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบเบฑเบš node pool เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”
  • เบˆเบธเบ”เบˆเบธเบ” เบชเบฒเบกเบฒเบ”เบšเบฑเบ‡เบ„เบฑเบš เบเบญเบกเบฎเบฑเบš "เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™" เบ‚เบญเบ‡เบงเบฝเบเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™ Spot

Summary

เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบšเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบŸเบฑเบ‡เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบชเปˆเบงเบ™เปƒเบซเบเปˆเป„เบ”เป‰เบขเบนเปˆ เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆเบ—เบตเปˆ DevOps Gathering 2019 เปƒเบ™ YouTube เปเบฅเบฐเปƒเบ™เบชเบฐเป„เบฅเป‰.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบ„เบฅเบฒเบงเบขเบนเปˆเปƒเบ™ Kubernetes เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบเบฐเบฅเบธเบ™เบฒเปเบˆเป‰เบ‡เปƒเบซเป‰เบ‚เป‰เบญเบเบ—เบฒเบšเบ—เบตเปˆ Twitter (@try_except_).

[1] เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, vCPU เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 3 เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบ‚เบญเบ‡ node เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡เป‚เบ”เบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบชเบฐเบซเบ‡เบงเบ™เป„เบงเป‰. Kubernetes เบˆเปเบฒเปเบ™เบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบงเบฒเบกเบญเบฒเบ”เบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เป‚เบซเบ™เบ”เบ—เบฒเบ‡เบเบฒเบเบฐเบžเบฒเบš เปเบฅเบฐเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ "เบชเบฐเปœเบญเบ‡เปƒเบซเป‰" (Node Allocatable).

[2] เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ: one m5.large instance with 8 GiB of memory is ~$84 โ€‹โ€‹โ€‹โ€‹เบ•เปเปˆเป€เบ”เบทเบญเบ™ (eu-central-1, On-Demand), i.e. เบเบฒเบ™เบšเบฅเบฑเบญเบ 1/8 node เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™ ~ $10/เป€เบ”เบทเบญเบ™.

[3] เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบตเปƒเบ™เบเบฒเบ™เบซเบผเบธเบ”เปƒเบšเป€เบเบฑเบšเป€เบ‡เบดเบ™ EC2 เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบŠเบฑเปˆเบ™: Reserved Instances, Savings Plan, เปเบฅเบฐเบญเบทเปˆเบ™เป† - เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบเบงเบกเป€เบญเบปเบฒเบซเบปเบงเบ‚เปเป‰เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบขเบนเปˆเบ™เบตเป‰, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบ„เบงเบ™เป€เบšเบดเปˆเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™!

เบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบชเบนเบ”.

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

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