AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋāĻ° āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•ā§‹āĻ°ā§āĻ¸ āĻļā§āĻ°ā§āĻ° āĻĒā§āĻ°āĻžāĻ•ā§āĻ•āĻžāĻ˛ā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ "āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ".

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻŦāĻžāĻāĻšāĻžāĻ¤ā§‡ āĻšāĻ¯āĻŧ? āĻ•ā§‹āĻ¨ āĻāĻ•āĻ• āĻ¸āĻ āĻŋāĻ• āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨ā§‡āĻ‡, āĻ¤āĻŦā§‡ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻŋāĻ‚ āĻ–āĻ°āĻš āĻ•āĻŽāĻžāĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ†āĻŽāĻŋ AWS āĻāĻ° āĻœāĻ¨ā§āĻ¯ Kubernetes āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ¸āĻ°āĻŦāĻ°āĻžāĻšāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ (āĻĒā§āĻ°āĻžāĻ¯āĻŧ) āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¯ā§‹āĻœā§āĻ¯ āĻšāĻŦā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻ›āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°(āĻ—ā§āĻ˛āĻŋ) āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ†āĻ›ā§‡ (āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ°) āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄāĻŋāĻĒā§āĻ˛ā§‹āĻ¯āĻŧāĻŽā§‡āĻ¨ā§āĻŸ āĻĄāĻžāĻ‰āĻ¨ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻ¸āĻžāĻļā§āĻ°āĻ¯āĻŧ āĻ•āĻ°āĻŦā§‡ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻ°ā§āĻŽā§€ āĻ¨ā§‹āĻĄā§‡āĻ° āĻŦāĻšāĻ°āĻ•ā§‡āĻ“ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°ā§‡ (EC2 āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤)āĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŦā§‡:

āĻ…āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ¸āĻŽā§āĻĒāĻĻ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻž

āĻĻā§āĻ°ā§āĻ¤ āĻ—āĻ¤āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤āĨ¤ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻžāĻ¨ āĻšāĻžāĻ‡ āĻ¤ā§āĻŦāĻ°āĻžāĻ¨ā§āĻŦāĻŋāĻ¤. āĻ†āĻ°āĻ“ āĻĻā§āĻ°ā§āĻ¤ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĄā§‡āĻ˛āĻŋāĻ­āĻžāĻ°āĻŋ āĻŽāĻžāĻ¨ā§‡ āĻ†āĻ°āĻ“ āĻĒāĻŋāĻ†āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻĒā§‚āĻ°ā§āĻŦāĻ°ā§‚āĻĒ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ, āĻĒā§āĻ°ā§‹āĻŸā§‹āĻŸāĻžāĻ‡āĻĒ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĨ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ° āĻšāĻžāĻ¤ā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻ›ā§‡? āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻšā§‡āĻ° āĻĒā§āĻ°āĻ¨ā§‹ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻ•āĻĨāĻž āĻ­ā§āĻ˛ā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻž āĻ¸āĻšāĻœāĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ›āĻŋ āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§āĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻŦāĻŋāĻ˛ āĻŦāĻžāĻĄāĻŧāĻŦā§‡:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

(āĻšā§‡āĻ¨āĻŋāĻ‚ āĻœā§āĻ¯āĻžāĻ•āĻŦāĻ¸:
āĻāĻŋāĻœāĻž:
(āĻ‰āĻĻā§āĻ§ā§ƒāĻ¤āĻŋ) āĻ•ā§‹āĻ°āĻŋ āĻ•ā§āĻ‡āĻ¨:
āĻŽāĻŋāĻĨ: āĻ†āĻĒāĻ¨āĻžāĻ° AWS āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨āĨ¤
āĻ˜āĻŸāĻ¨āĻž: āĻ†āĻĒāĻ¨āĻžāĻ° AWS āĻ¸ā§āĻ•ā§‹āĻ° āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻ¤āĻœāĻ¨ āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ā§€ āĻ†āĻ›ā§‡ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨āĨ¤

āĻ‡āĻ­āĻžāĻ¨ āĻ•ā§āĻ°āĻ¨ā§‹āĻ¸āĻ­ (āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ):
āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ¸āĻ¤ā§āĻ¯: āĻ†āĻĒāĻ¨āĻžāĻ° AWS āĻ¸ā§āĻ•ā§‹āĻ° āĻšāĻ˛ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ•ā§āĻˇāĻŽ/āĻŽā§āĻ›ā§‡ āĻĻāĻŋāĻ¤ā§‡ āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡āĻ¨āĨ¤)

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡āĻ¸ āĻĻāĻžāĻ°ā§‹āĻ¯āĻŧāĻžāĻ¨ (āĻ•ā§āĻŦā§‡-āĻĻāĻžāĻ°ā§‹āĻ¯āĻŧāĻžāĻ¨) āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§‡āĨ¤ āĻĻāĻžāĻ°ā§‹āĻ¯āĻŧāĻžāĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§€ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ‰āĻ­āĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧ:

  • āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ“āĻ¯āĻŧāĻžāĻ‡āĻĄ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻ—ā§āĻ˛āĻŋ PR/āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻŸāĻžāĻ‡āĻŽ-āĻŸā§-āĻ˛āĻžāĻ‡āĻ­ (TTL) āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ¸āĻŽā§āĻĒāĻĻ āĻĻāĻžāĻ°ā§‹āĻ¯āĻŧāĻžāĻ¨/ttl āĻĻāĻŋāĻ¯āĻŧā§‡ āĻŸā§€āĻ•āĻž āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ 7 āĻĻāĻŋāĻ¨ āĻĒāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĒāĻžāĻ‡āĻ•/āĻĒā§āĻ°ā§‹āĻŸā§‹āĻŸāĻžāĻ‡āĻĒ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻ—ā§āĻ˛āĻŋ YAML āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ° āĻĒāĻžāĻĨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ --rules-file āĻ•ā§āĻŦā§‡-āĻĻāĻžāĻ°ā§‹āĻ¯āĻŧāĻžāĻ¨ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ -pr- āĻĻā§āĻ‡ āĻĻāĻŋāĻ¨ āĻĒāĻ° āĻ¨āĻžāĻŽā§‡:

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

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻŸāĻŋ 2020 āĻ¸āĻžāĻ˛ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻ¤ā§āĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž/StatefulSets-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĒā§āĻ˛ā§‹āĻ¯āĻŧāĻŽā§‡āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‡āĻŸāĻĢā§āĻ˛āĻ¸ā§‡āĻŸ āĻĒāĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ˛ā§‡āĻŦā§‡āĻ˛ā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻāĻ‡ āĻ˛ā§‡āĻŦā§‡āĻ˛ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ:

- 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 āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻ¯āĻŧ-āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻĄā§‡āĻŽā§‹ āĻšāĻžāĻ˛āĻžāĻ¨:

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

āĻ•ā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻ–āĻ°āĻšā§‡āĻ° āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻ‰ā§ŽāĻ¸ āĻšāĻ˛ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻ­āĻ˛āĻŋāĻ‰āĻŽ (AWS EBS)āĨ¤ āĻāĻ•āĻŸāĻŋ Kubernetes StatefulSet āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¤āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻ­āĻ˛āĻŋāĻ‰āĻŽ (PVC - PersistentVolumeClaim) āĻŽā§āĻ›ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ…āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ EBS āĻ­āĻ˛āĻŋāĻ‰āĻŽ āĻ¸āĻšāĻœā§‡āĻ‡ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§‡ āĻļāĻ¤ āĻļāĻ¤ āĻĄāĻ˛āĻžāĻ° āĻ–āĻ°āĻš āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ…āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ PVC āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ Kubernetes Janitor āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ‡ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŸāĻŋ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ PVC āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻŦā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŽāĻžāĻ‰āĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŸāĻŋ 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-downscaler) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻ…-āĻ•āĻžāĻœā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻŦāĻ‚ StatefulSets āĻļā§‚āĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨. 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

āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻĒā§āĻ¤āĻžāĻšāĻžāĻ¨ā§āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ•āĻ°ā§āĻŽā§€ āĻ¨ā§‹āĻĄ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻžāĻĢ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

~13 āĻĨā§‡āĻ•ā§‡ 4 āĻ•āĻ°ā§āĻŽā§€ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻž āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ° AWS āĻŦāĻŋāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ•āĻ°ā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° "āĻĄāĻžāĻ‰āĻ¨āĻŸāĻžāĻ‡āĻŽ" āĻāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ? āĻĄāĻžāĻ‰āĻ¨āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ°/āĻāĻ•ā§āĻ¸āĻ•ā§āĻ˛ā§āĻĄ: āĻ¸āĻ¤ā§āĻ¯ āĻŸā§€āĻ•āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻĨā§‡āĻ•ā§‡ āĻŦāĻžāĻĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ YYYY-MM-DD HH:MM (UTC) āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŽ āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻŸā§āĻ¯āĻžāĻŽā§āĻĒ āĻ¸āĻš āĻĄāĻžāĻ‰āĻ¨āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ°/āĻŦāĻ°ā§āĻœāĻ¨-āĻ…āĻ­āĻŋāĻ¨ā§āĻ¨ āĻŸā§€āĻ•āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€āĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§‡, āĻŸā§€āĻ•āĻž āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻĒāĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻĒā§āĻ°ā§‹ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ āĻ†āĻŦāĻžāĻ° āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ downscaler/force-uptime, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, nginx āĻĢāĻžāĻāĻ•āĻž āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡:

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 āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻĻ āĻœā§āĻĄāĻŧā§‡ āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻĒāĻĄ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ° (HPA)āĨ¤ āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ‡ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻ¸ā§‚āĻšāĻ•:

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 āĻ¸āĻšāĻœā§‡āĻ‡ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡: āĻ•ā§āĻŦā§‡ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ…ā§āĻ¯āĻžāĻĄāĻžāĻĒā§āĻŸāĻžāĻ° (kube-metrics-adapter) āĻšāĻ˛ Kubernetes-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ• āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ…ā§āĻ¯āĻžāĻĄāĻžāĻĒā§āĻŸāĻžāĻ° āĻ¯āĻž āĻĒāĻĄā§‡āĻ° āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻāĻŦāĻ‚ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻŦā§‡āĻļāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸, SQS āĻ¸āĻžāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, /āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡ JSON āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡:

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 āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄāĻŋāĻĒā§āĻ˛ā§‹āĻ¯āĻŧāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°ā§āĻ¨, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻ¨āĻ¯āĻŧ.

āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ“āĻ­āĻžāĻ°āĻŦā§āĻ•āĻŋāĻ‚ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°ā§āĻ¨

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻ˛ā§‹āĻĄ "āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¸ā§āĻŸ" āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤āĻžāĻĻā§‡āĻ° CPU/āĻŽā§‡āĻŽāĻ°āĻŋāĻ° āĻšāĻžāĻšāĻŋāĻĻāĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡āĨ¤ CPU āĻ¸āĻŽā§āĻĒāĻĻāĻ—ā§āĻ˛āĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ•ā§‹āĻ°ā§‡ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻž āĻ†āĻ°āĻ“ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ "āĻŽāĻŋāĻ˛āĻŋāĻ•ā§‹āĻ°"-āĻ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ 500m āĻŽāĻžāĻ¨ā§‡ 50% vCPUāĨ¤ āĻŽā§‡āĻŽāĻ°āĻŋ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻ‡āĻŸā§‡ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻ¯āĻŧāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯ā§‡āĻŽāĻ¨ 500Mi, āĻ¯āĻžāĻ° āĻ…āĻ°ā§āĻĨ 500 āĻŽā§‡āĻ—āĻžāĻŦāĻžāĻ‡āĻŸā§ˇ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¸ā§āĻŸ āĻ•āĻ°ā§āĻŽā§€ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ "āĻ˛āĻ•" āĻ•ā§āĻˇāĻŽāĻ¤āĻž, āĻŽāĻžāĻ¨ā§‡ 1000āĻŸāĻŋ āĻ­āĻŋāĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡ 4 āĻŽāĻŋ āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻĒāĻĄ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 3āĻŸāĻŋ āĻ­āĻŋāĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻĨāĻžāĻ•āĻŦā§‡ā§ˇ [1]

āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ• (āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ°āĻŋāĻœāĻžāĻ°ā§āĻ­) āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻĒāĻĄ āĻ¯āĻž 2 GiB āĻŽā§‡āĻŽāĻ°āĻŋāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 200 MiB āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¤āĻžāĻ° ~1,8 GiB "āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤" āĻŽā§‡āĻŽāĻ°āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻŸāĻžāĻ•āĻž āĻ–āĻ°āĻš āĻšāĻ¯āĻŧāĨ¤ āĻ•ā§‡āĻ‰ āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡ 1 GiB āĻ…āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻŽā§‡āĻŽāĻ°āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§‡ ~$10 āĻ–āĻ°āĻš āĻ•āĻ°ā§‡āĨ¤ [2]

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ (āĻ•ā§āĻŦā§‡-āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸-āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ) āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ°āĻŋāĻœāĻžāĻ°ā§āĻ­ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻžā§āĻšāĻ¯āĻŧā§‡āĻ° āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻŽāĻ¨ āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŽā§āĻĒāĻĻā§‡āĻ° āĻšāĻžāĻšāĻŋāĻĻāĻž āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ‰ā§ŽāĻĒāĻ¨ā§āĻ¨ HTML āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻŽā§āĻĒāĻĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻŸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ CPU/āĻŽā§‡āĻŽāĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻœāĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ "āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ" CPU-āĻ­āĻžāĻ°ā§€ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ Grafana āĻšāĻžāĻ°ā§āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĄ 3āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ•ā§ƒāĻ¤ CPU āĻ•ā§‹āĻ°ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ•āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›ā§‡:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

CPU āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ 3000m āĻĨā§‡āĻ•ā§‡ ~400m-āĻ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŽā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ āĻ›ā§‹āĻŸ āĻšāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

"EC2 āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤āĻ—ā§āĻ˛āĻŋāĻ° āĻ—āĻĄāĻŧ CPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻāĻ•āĻ•-āĻ…āĻ™ā§āĻ•ā§‡āĻ° āĻļāĻ¤āĻžāĻ‚āĻļ āĻĒāĻ°āĻŋāĻ¸āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡," āĻ˛āĻŋāĻ–ā§‡āĻ›ā§‡āĻ¨ āĻ•ā§‹āĻ°āĻŋ āĻ•ā§āĻ‡āĻ¨. āĻ¯āĻ–āĻ¨ EC2 āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ āĻŋāĻ• āĻ†āĻ•āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ–āĻžāĻ°āĻžāĻĒ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻāĻ•āĻŸāĻŋ YAML āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ•āĻŋāĻ›ā§ Kubernetes āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļāĻžāĻ˛ āĻ¸āĻžā§āĻšāĻ¯āĻŧ āĻ†āĻ¨āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻšāĻžāĻ‡ āĻŽāĻžāĻ¨ā§āĻˇ YAML āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§āĻ•? āĻ¨āĻž, āĻŽā§‡āĻļāĻŋāĻ¨ āĻ…āĻ¨ā§‡āĻ• āĻ­āĻžāĻ˛ā§‹ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡! āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ‰āĻ˛ā§āĻ˛āĻŽā§āĻŦ āĻĒāĻĄ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ° (VPA) āĻ āĻŋāĻ• āĻ¤āĻžāĻ‡ āĻ•āĻ°ā§‡: āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ¸āĻŽā§āĻĒāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻāĻŦāĻ‚ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ…āĻ­āĻŋāĻ¯ā§‹āĻœāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ—ā§āĻ°āĻžāĻĢ (āĻĒāĻžāĻ¤āĻ˛āĻž āĻ¨ā§€āĻ˛ āĻ°ā§‡āĻ–āĻž) āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ VPA āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻ­āĻŋāĻ¯ā§‹āĻœāĻŋāĻ¤:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

Zalando āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ VPA āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹āĻ—āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ…-āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻžāĻŽā§‚āĻ˛āĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ“ āĻ­āĻŋāĻĒāĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ¸ā§‹āĻ¨āĻžāĻ˛ā§€ āĻ•ā§‡āĻļāĻŦāĻŋāĻļāĻŋāĻˇā§āĻŸ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻĢā§‡āĻ¯āĻŧāĻžāĻ°āĻ‰āĻ‡āĻ¨ā§āĻĄ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ˛ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŽāĻ¸ā§āĻĒā§‡āĻ¸ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ VPA āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¤āĻžāĻ° āĻĄā§āĻ¯āĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡ āĻāĻ•āĻŸāĻŋ VPA āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ āĻŋāĻ• CPU/āĻŽā§‡āĻŽāĻ°āĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

AWS-āĻ Kubernetes āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨

āĻāĻ•āĻŸāĻž āĻ›ā§‹āĻŸ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ VPA āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦā§āĻ˛āĻ—āĻĒā§‹āĻ¸ā§āĻŸ 2019 āĻ¸āĻžāĻ˛ā§‡, āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ CNCF āĻļā§‡āĻˇ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ VPA āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›ā§‡.

EC2 āĻ¸ā§āĻĒāĻŸ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡

āĻļā§‡āĻˇ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻ¨āĻ¯āĻŧ, āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻžāĻ° āĻ¨ā§‹āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸ā§āĻĒāĻŸ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ AWS EC2 āĻ–āĻ°āĻš āĻ•āĻŽāĻžāĻ¨ā§‹ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ [3]. āĻ…āĻ¨-āĻĄāĻŋāĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻžāĻŽā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ¸ā§āĻĒāĻŸ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ 90% āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ›āĻžāĻĄāĻŧā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ EC2 Spot-āĻ Kubernetes āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ: āĻ‰āĻšā§āĻšāĻ¤āĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻ‡ āĻŦāĻž āĻ•āĻŽ āĻĻāĻžāĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻ¨ā§‹āĻĄ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ•āĻ¨āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻžāĻ‡āĻœāĻĄ Kubernetes āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻ˛ā§‹āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

EC2 āĻ¸ā§āĻĒāĻŸā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻŦā§‡āĻ¨? āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: SpotInst (āĻāĻ–āĻ¨ "āĻ¸ā§āĻĒāĻŸ" āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ) āĻāĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻŸāĻŋ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨, āĻ•ā§‡āĻ¨ āĻ†āĻŽāĻžāĻ•ā§‡ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž, āĻŦāĻž āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻŸ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚āĻ—ā§āĻ°ā§āĻĒ (ASG) āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨ā§ˇ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ "āĻ•ā§āĻˇāĻŽāĻ¤āĻž-āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœāĻĄ" āĻ¸ā§āĻĒāĻŸ ASG-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ§āĻ°āĻ¨ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ CloudFormation āĻ¸ā§āĻ¨āĻŋāĻĒā§‡āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

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"

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻĒāĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ•āĻŋāĻ›ā§ āĻ¨ā§‹āĻŸ:

  • āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§āĻĒāĻŸ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻ¨ā§‹āĻĄāĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ•āĻ°ā§‡ āĻ¯āĻ–āĻ¨ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ
  • Zalando āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻžāĻāĻŸāĻž āĻ¨ā§‹āĻĄ āĻĒā§āĻ˛ āĻ…āĻ—ā§āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻ¸āĻš āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚
  • āĻ¸ā§āĻĒāĻŸ āĻ¨ā§‹āĻĄ āĻŦāĻžāĻ§ā§āĻ¯ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¸ā§āĻĒāĻŸā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒā§‡āĻ° "āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨" āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§āĻ¨

āĻ¸āĻžāĻ°āĻžāĻ‚āĻļ

āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻŦāĻŋāĻ˛ āĻ•āĻŽāĻžāĻ¤ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻ•āĻŋāĻ›ā§ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€ āĻĒāĻžāĻŦā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻāĻ–āĻžāĻ¨ā§‡āĻ“ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ YouTube āĻāĻŦāĻ‚ āĻ¸ā§āĻ˛āĻžāĻ‡āĻĄā§‡ DevOps Gathering 2019-āĻ āĻ†āĻŽāĻžāĻ° āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž.

Kubernetes āĻ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ–āĻ°āĻš āĻŦāĻžāĻāĻšāĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ•ā§€ āĻ•ā§€? āĻ†āĻŽāĻžāĻ•ā§‡ āĻœāĻžāĻ¨āĻžāĻ¤ā§‡ āĻĻāĻ¯āĻŧāĻž āĻ•āĻ°ā§‡ āĻŸā§āĻ‡āĻŸāĻžāĻ° (@try_except_).

[1] āĻĒā§āĻ°āĻ•ā§ƒāĻ¤āĻĒāĻ•ā§āĻˇā§‡, 3āĻŸāĻŋāĻ° āĻ•āĻŽ vCPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻĨāĻžāĻ•āĻŦā§‡ āĻ•āĻžāĻ°āĻŖ āĻ¨ā§‹āĻĄā§‡āĻ° āĻĨā§āĻ°ā§āĻĒā§āĻŸ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻĢāĻŋāĻœāĻŋāĻ•ā§āĻ¯āĻžāĻ˛ āĻ¨ā§‹āĻĄ āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻāĻŦāĻ‚ "āĻŦāĻŋāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž" āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ•āĻ°ā§‡ (āĻ¨ā§‹āĻĄ āĻŦāĻ°āĻžāĻĻā§āĻĻāĻ¯ā§‹āĻ—ā§āĻ¯).

[2] āĻ—āĻŖāĻ¨āĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ: 5 GiB āĻŽā§‡āĻŽāĻ°āĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ m8.large āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§‡ ~$84 ​​(eu-central-1, āĻ…āĻ¨-āĻĄāĻŋāĻŽāĻžāĻ¨ā§āĻĄ), āĻ¯ā§‡āĻŽāĻ¨ 1/8 āĻ¨ā§‹āĻĄ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧ ~$10/āĻŽāĻžāĻ¸āĨ¤

[3] āĻ†āĻĒāĻ¨āĻžāĻ° EC2 āĻŦāĻŋāĻ˛ āĻ•āĻŽāĻžāĻ¨ā§‹āĻ° āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ†āĻ›ā§‡, āĻ¯ā§‡āĻŽāĻ¨ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ, āĻ¸ā§‡āĻ­āĻŋāĻ‚āĻ¸ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻ¨ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤ - āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸ā§‡āĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ–āĻ¤āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ–āĻž āĻ‰āĻšāĻŋāĻ¤!

āĻ•ā§‹āĻ°ā§āĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻœāĻžāĻ¨ā§āĻ¨.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨