Prometheus āĻāĻŦāĻ‚ KEDA-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚

Prometheus āĻāĻŦāĻ‚ KEDA-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚āĻ¸āĻŋāĻŽā§āĻ¯āĻŧāĻžāĻ¨ā§‹āĻ¸ā§‡āĻ° āĻŦā§‡āĻ˛ā§āĻ¨ āĻŽā§āĻ¯āĻžāĻ¨

āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻĒāĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻžāĨ¤ Kubernetes-āĻāĻ° āĻ¸āĻžāĻĨā§‡, āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻž āĻ¯āĻĨāĻžāĻ¯āĻĨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋāĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§‹āĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻ¸āĻšāĻœ āĻŦāĻž ReplicaSet āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĨ¤

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ (āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ¯āĻŧ āĻĒāĻĄ āĻŦāĻž ReplicaSet) āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻĒāĻĄ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ° āĻ¸ā§āĻĒā§‡āĻ¸āĻŋāĻĢāĻŋāĻ•ā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˜ā§‹āĻˇāĻŖāĻžāĻŽā§‚āĻ˛āĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡āĨ¤ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻšāĻ˛ CPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ (āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸), āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻāĻŦāĻ‚ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸āĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻŸā§€āĻŽ Mail.ru āĻĨā§‡āĻ•ā§‡ Kubernetes aaS āĻāĻ•āĻŸāĻŋ Kubernetes āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻšāĻŋāĻ°āĻžāĻ—āĻ¤ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°ā§‡āĻ›ā§‡ā§ˇ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯, āĻ˛ā§‡āĻ–āĻ• HTTP āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨, āĻ¯āĻž āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻĒāĻĄā§‡āĻ° āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻĄā§āĻ°āĻžāĻ‡āĻ­ā§‡āĻ¨ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ (āĻ•ā§‡āĻ‡āĻĄāĻŋāĻ) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĨ¤ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ-āĻšāĻžāĻ˛āĻŋāĻ¤ āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°āĻŦāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ (āĻļā§‚āĻ¨ā§āĻ¯ āĻĨā§‡āĻ•ā§‡/āĻļā§‚āĻ¨ā§āĻ¯ āĻ¸āĻš) āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻĒāĻĄ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻšāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻ•ā§‹āĻĄ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ GitHub.

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ

Prometheus āĻāĻŦāĻ‚ KEDA-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚

āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

  1. āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸā§‡ HTTP āĻšāĻŋāĻŸ āĻ—āĻŖāĻ¨āĻž āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤
  2. āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻāĻ‡ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤
  3. KEDA-āĻ¤ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ°āĻŸāĻŋ HTTP āĻšāĻŋāĻŸā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻ˛āĻŦāĨ¤

KEDA āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸

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

KEDA āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ°ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻ•ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ - āĻāĻŸāĻŋ KEDA āĻāĻŦāĻ‚ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻ¤ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŸāĻžāĻ°ā§āĻ—ā§‡āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻŦā§‡āĻ° āĻ•āĻ°ā§‡āĨ¤ KEDA āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤

āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ° āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĄā§‡āĻŸāĻž āĻ‰āĻ¤ā§āĻ¸ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ•āĻžāĻĢāĻ•āĻž, āĻ°ā§‡āĻĄāĻŋāĻ¸, āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ KEDA āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ†āĻŦā§‡āĻĻāĻ¨

Golang āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ HTTP āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻĻā§āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°ā§‡:

  1. āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ—ā§‹ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻžāĻ¨āĻŸāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ°ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ http_requests āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻŸ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĨāĻžāĻ•ā§‡āĨ¤ āĻļā§‡āĻˇ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§‡āĻŸāĻŋ URI-āĻ¤ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ /metrics.
    var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
           Name: "http_requests",
           Help: "number of http requests",
       })
    
  2. āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻœāĻŦāĻžāĻŦā§‡ GET āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•ā§€āĻŸāĻŋāĻ° āĻŽāĻžāĻ¨ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°ā§‡ (access_count) āĻ°ā§‡āĻĄāĻŋāĻ¸ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ HTTP āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°ā§‡āĻ° āĻ…āĻ‚āĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻœ āĻ‰āĻĒāĻžāĻ¯āĻŧāĨ¤ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻŽāĻžāĻ¨ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻ‡ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡ access_count āĻ°ā§‡āĻĄāĻŋāĻ¸ā§‡
    func main() {
           http.Handle("/metrics", promhttp.Handler())
           http.HandleFunc("/test", func(w http.ResponseWriter, r 
    *http.Request) {
               defer httpRequestsCounter.Inc()
               count, err := client.Incr(redisCounterName).Result()
               if err != nil {
                   fmt.Println("Unable to increment redis counter", err)
                   os.Exit(1)
               }
               resp := "Accessed on " + time.Now().String() + "nAccess count " + strconv.Itoa(int(count))
               w.Write([]byte(resp))
           })
           http.ListenAndServe(":8080", nil)
       }
    

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ Kubernetes āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ Deployment. āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ“ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ ClusterIP, āĻāĻŸāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§‡āĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§‡āĻ¸ā§āĻŸ.

āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°

āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§‡āĻ¸ā§āĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  • ConfigMap — āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡;
  • Deployment — āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯;
  • ClusterIP — UI āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž;
  • ClusterRole, ClusterRoleBinding и ServiceAccount — Kubernetes (āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ-āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ°) āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§‡āĻ¸ā§āĻŸ.

KEDA Prometheus ScaledObject

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ° KEDA āĻāĻŦāĻ‚ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻ¤ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ ScaledObject āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ¯āĻž āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¸ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ‡āĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸āĨ¤

ScaledObject āĻĄāĻŋāĻĒā§āĻ˛ā§‹āĻ¯āĻŧāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ¤āĻĨā§āĻ¯, āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž (āĻ¯ā§‡āĻŽāĻ¨ āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡āĻ° āĻ—ā§‹āĻĒāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž, āĻ¸āĻžāĻ°āĻŋ āĻ¨āĻžāĻŽ), āĻĒā§‹āĻ˛āĻŋāĻ‚ āĻŦā§āĻ¯āĻŦāĻ§āĻžāĻ¨, āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ°ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧāĻ•āĻžāĻ˛ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ (HPA āĻ¸āĻ‚āĻœā§āĻžāĻž) āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ•āĻ°ā§‡āĨ¤

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ ScaledObject āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻ¯āĻŧ, āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ HPA āĻ¸āĻ‚āĻœā§āĻžāĻž āĻ¸āĻžāĻĢ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻž āĻ†āĻ›ā§‡ ScaledObject āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§‡āĻ˛āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ Prometheus:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
 name: prometheus-scaledobject
 namespace: default
 labels:
   deploymentName: go-prom-app
spec:
 scaleTargetRef:
   deploymentName: go-prom-app
 pollingInterval: 15
 cooldownPeriod:  30
 minReplicaCount: 1
 maxReplicaCount: 10
 triggers:
 - type: prometheus
   metadata:
     serverAddress: 
http://prometheus-service.default.svc.cluster.local:9090
     metricName: access_frequency
     threshold: '3'
     query: sum(rate(http_requests[2m]))

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§āĻ¨:

  1. āĻ¸ā§‡ āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻ•āĻ°ā§‡ Deployment āĻ¨āĻžāĻŽ āĻ¸āĻš go-prom-app.
  2. āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻĒā§āĻ°āĻ•āĻžāĻ° - Prometheus. āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻ¨āĻžāĻŽ, āĻĨā§āĻ°ā§‡āĻļāĻšā§‹āĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻ¸āĻš āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ PromQL āĻĒā§āĻ°āĻļā§āĻ¨, āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ PromQL āĻĒā§āĻ°āĻļā§āĻ¨ - sum(rate(http_requests[2m])).
  3. āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ pollingInterval,āĻ•ā§‡āĻĄāĻž āĻĒā§āĻ°āĻ¤āĻŋ āĻĒāĻ¨ā§‡āĻ° āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ā§‡āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡āĨ¤ āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻāĻ•āĻŸāĻŋ āĻ…āĻ§ā§€āĻ¨ā§‡ (minReplicaCount), āĻāĻŦāĻ‚ āĻĒāĻĄā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°ā§‡ āĻ¨āĻž maxReplicaCount (āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡ - āĻĻāĻļ)āĨ¤

āĻ‡āĻ¨ā§āĻ¸āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ minReplicaCount āĻļā§‚āĻ¨ā§āĻ¯ā§‡āĻ° āĻ¸āĻŽāĻžāĻ¨āĨ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, KEDA āĻļā§‚āĻ¨ā§āĻ¯ āĻĨā§‡āĻ•ā§‡ āĻāĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻ°āĻ“ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻāĻ° āĻœāĻ¨ā§āĻ¯ HPA āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĨ¤ āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻ•ā§āĻ°āĻŽāĻ“ āĻ¸āĻŽā§āĻ­āĻŦ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ• āĻĨā§‡āĻ•ā§‡ āĻļā§‚āĻ¨ā§āĻ¯ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ•āĻ°āĻžāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻ°āĻž āĻļā§‚āĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻŋāĻ¨āĻŋ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ HTTP āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨-āĻĄāĻŋāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¨āĻ¯āĻŧā§ˇ

āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ¯āĻžāĻĻā§

āĻĨā§āĻ°ā§‡āĻļāĻšā§‹āĻ˛ā§āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻ•ā§‡āĻ˛ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, PromQL āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ sum(rate (http_requests [2m])) āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ HTTP āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻšāĻžāĻ° (āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§), āĻ—āĻ¤ āĻĻā§āĻ‡ āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻ•āĻ°ā§‡āĨ¤

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĨā§āĻ°ā§‡āĻļāĻšā§‹āĻ˛ā§āĻĄ āĻŽāĻžāĻ¨ āĻ¤āĻŋāĻ¨āĻŸāĻŋ, āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻšāĻ˛ āĻŽāĻžāĻ¨ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋāĻ° āĻ¨āĻŋāĻšā§‡ āĻĨāĻžāĻ•āĻŦā§‡ sum(rate (http_requests [2m])) āĻ¤āĻŋāĻ¨ā§‡āĻ° āĻ•āĻŽ āĻŽāĻžāĻ¨ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻšāĻ˛ā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¸āĻžāĻŦ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ sum(rate (http_requests [2m])) āĻ¤āĻŋāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻĒāĻžāĻ¯āĻŧāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¯āĻĻāĻŋ āĻŽāĻžāĻ¨āĻŸāĻŋ 12 āĻĨā§‡āĻ•ā§‡ 14 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĒāĻĄā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻšāĻžāĻ°āĻŸāĻŋāĨ¤

āĻāĻ–āĻ¨ āĻāĻŸāĻž āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•!

āĻĒā§āĻ°āĻžāĻ•-āĻ¸ā§‡āĻŸāĻŋāĻ‚

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻž āĻĻāĻ°āĻ•āĻžāĻ° āĻ¤āĻž āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ kubectl. āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ minikube, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§āĻ¯ āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨. āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ›ā§‡ āĻ¨ā§‡āĻ¤ā§ƒāĻ¤ā§āĻŦ.

Mac āĻ āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨:

curl -Lo minikube 
https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 
&& chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ āĻ•ā§āĻŦā§‡āĻ•ā§āĻŸā§‡āĻ˛āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡āĨ¤

Mac āĻ āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨:

curl -LO 
"https://storage.googleapis.com/kubernetes-release/release/$(curl -s
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version

KEDA āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨

āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ KEDA āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨. āĻ†āĻŽāĻŋ āĻāĻ•āĻšā§‡āĻŸāĻŋāĻ¯āĻŧāĻž YAML āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋ:

kubectl apply -f
https://raw.githubusercontent.com/kedacore/keda/master/deploy/KedaScaleController.yaml

KEDA āĻāĻŦāĻ‚ āĻāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻ†āĻ›ā§‡ keda. āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻ†āĻĻā§‡āĻļ:

kubectl get pods -n keda

KEDA āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¯āĻžāĻ¨ Running State. āĻāĻŦāĻ‚ āĻāĻ° āĻĒāĻ°ā§‡, āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¨āĨ¤

āĻšā§‡āĻ˛āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ°ā§‡āĻĄāĻŋāĻ¸ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻšā§‡āĻ˛āĻŽ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨ āĻ¨ā§‡āĻ¤ā§ƒāĻ¤ā§āĻŦ. āĻŽā§āĻ¯āĻžāĻ•ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ:

brew install kubernetes-helm
helm init --history-max 200

helm init āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ†āĻ°āĻŽā§āĻ­ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§‡ Tiller āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĨ¤

kubectl get pods -n kube-system | grep tiller

āĻŸāĻŋāĻ˛āĻžāĻ° āĻĒāĻĄāĻŸāĻŋ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ•ā§‡āĻ° āĻ¨ā§‹āĻŸ: āĻ˛ā§‡āĻ–āĻ• āĻšā§‡āĻ˛āĻŽ@2 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨, āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŸāĻŋāĻ˛āĻžāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻāĻ–āĻ¨ Helm@3 āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ•, āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ…āĻ‚āĻļā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤

āĻšā§‡āĻ˛āĻŽ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ°ā§‡āĻĄāĻŋāĻ¸ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¯āĻĨā§‡āĻˇā§āĻŸ:

helm install --name redis-server --set cluster.enabled=false --set 
usePassword=false stable/redis

āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ Redis āĻ¸āĻĢāĻ˛āĻ­āĻžāĻŦā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

kubectl get pods/redis-server-master-0

āĻ°ā§‡āĻĄāĻŋāĻ¸ āĻ°āĻžāĻœā§āĻ¯ā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ Running.

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž

āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ†āĻĻā§‡āĻļ:

kubectl apply -f go-app.yaml

//output
deployment.apps/go-prom-app created
service/go-prom-app-service created

āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨:

kubectl get pods -l=app=go-prom-app

āĻ°ā§‡āĻĄāĻŋāĻ¸ āĻ°āĻžāĻœā§āĻ¯ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ Running.

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§‡āĻ¸ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ°. āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ˛ā§‡āĻŦā§‡āĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ—āĻ¤āĻŋāĻļā§€āĻ˛ āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ°ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤

kubernetes_sd_configs:
   - role: service
   relabel_configs:
   - source_labels: [__meta_kubernetes_service_label_run]
     regex: go-prom-app-service
     action: keep

āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž:

kubectl apply -f prometheus.yaml

//output
clusterrole.rbac.authorization.k8s.io/prometheus created
serviceaccount/default configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
configmap/prom-conf created
deployment.extensions/prometheus-deployment created
service/prometheus-service created

āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨:

kubectl get pods -l=app=prometheus-server

āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ā§‡āĻ° āĻ°āĻžāĻœā§āĻ¯ā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ Running.

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° kubectl port-forward āĻ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻ‡āĻ‰āĻœāĻžāĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ (āĻŦāĻž API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°) āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡ http://localhost:9090.

kubectl port-forward service/prometheus-service 9090

KEDA āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ ScaledObject:

kubectl apply -f keda-prometheus-scaledobject.yaml

KEDA āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻ˛āĻ— āĻšā§‡āĻ• āĻ•āĻ°ā§āĻ¨:

KEDA_POD_NAME=$(kubectl get pods -n keda 
-o=jsonpath='{.items[0].metadata.name}')
kubectl logs $KEDA_POD_NAME -n keda

āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

time="2019-10-15T09:38:28Z" level=info msg="Watching ScaledObject:
default/prometheus-scaledobject"
time="2019-10-15T09:38:28Z" level=info msg="Created HPA with 
namespace default and name keda-hpa-go-prom-app"

āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ…āĻ§ā§€āĻ¨ā§‡ āĻšā§‡āĻ• āĻ•āĻ°ā§āĻ¨. āĻāĻ• āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡ āĻ•āĻžāĻ°āĻŖ minReplicaCount āĻ¸āĻŽāĻžāĻ¨ 1:

kubectl get pods -l=app=go-prom-app

āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ HPA āĻ¸āĻŽā§āĻĒāĻĻ āĻ¸āĻĢāĻ˛āĻ­āĻžāĻŦā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

kubectl get hpa

āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻŦā§‡:

NAME                   REFERENCE                TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
keda-hpa-go-prom-app   Deployment/go-prom-app   0/3 (avg)   1         10        1          45s

āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āĻ¯ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž: āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° REST āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡, āĻšāĻžāĻ˛āĻžāĻ¨:

kubectl port-forward service/go-prom-app-service 8080

āĻ†āĻĒāĻ¨āĻŋ āĻāĻ–āĻ¨ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° Go āĻ…ā§āĻ¯āĻžāĻĒ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ http://localhost:8080. āĻāĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨:

curl http://localhost:8080/test

āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

Accessed on 2019-10-21 11:29:10.560385986 +0000 UTC 
m=+406004.817901246
Access count 1

āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ“ Redis āĻšā§‡āĻ• āĻ•āĻ°ā§āĻ¨āĨ¤ āĻĻā§‡āĻ–āĻŦā§‡āĻ¨ āĻ¸ā§‡āĻ‡ āĻšāĻžāĻŦāĻŋ access_count 1 āĻ āĻŦā§‡āĻĄāĻŧā§‡āĻ›ā§‡:

kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
"1"

āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻŽāĻžāĻ¨ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ http_requests āĻāĻ•āĻ‡:

curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 1

āĻ˛ā§‹āĻĄ āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ

āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‹ āĻ…āĻā§āĻ¯āĻž - āĻ˛ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ:

curl -o hey https://storage.googleapis.com/hey-release/hey_darwin_amd64 
&& chmod a+x hey

āĻ†āĻĒāĻ¨āĻŋ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻŦāĻž āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ.

āĻšāĻžāĻ˛āĻžāĻ“ āĻāĻŸāĻž:

./hey http://localhost:8080/test

āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡, āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ 200āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒāĻžāĻ āĻžāĻ¯āĻŧāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ°ā§‡āĻĄāĻŋāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 201
kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
201

āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§‡āĻ° āĻŽāĻžāĻ¨ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°ā§āĻ¨ (āĻĒā§āĻ°ā§‹āĻŽāĻ•āĻŋāĻ‰āĻāĻ˛ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤):

curl -g 
'http://localhost:9090/api/v1/query?query=sum(rate(http_requests[2m]))'
//output
{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1571734214.228,"1.686057971014493"]}]}}

āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ 1,686057971014493 āĻāĻŦāĻ‚ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ value. āĻāĻŸāĻŋ āĻ¸ā§āĻ•ā§‡āĻ˛āĻŋāĻ‚ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ¨āĻ¯āĻŧ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻĨā§āĻ°ā§‡āĻļāĻšā§‹āĻ˛ā§āĻĄ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻž āĻšāĻ˛ 3āĨ¤

āĻ†āĻ°ā§‹ āĻ˛ā§‹āĻĄ!

āĻ¨āĻ¤ā§āĻ¨ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§‡, āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻĄā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨:

kubectl get pods -l=app=go-prom-app -w

āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛ā§‹āĻĄ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

./hey -n 2000 http://localhost:8080/test

āĻ•āĻŋāĻ›ā§āĻ•ā§āĻˇāĻŖ āĻĒāĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨ āĻ¯ā§‡ HPA āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻĄ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ›ā§‡āĨ¤ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° HPA āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨:

kubectl get hpa
NAME                   REFERENCE                TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
keda-hpa-go-prom-app   Deployment/go-prom-app   1830m/3 (avg)   1         10        6          4m22s

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

curl -g 
'http://localhost:9090/api/v1/query?query=sum(rate(http_requests[2m]))'

ОŅ‡Đ¸ŅŅ‚ĐēĐ°

//Delete KEDA
kubectl delete namespace keda
//Delete the app, Prometheus server and KEDA scaled object
kubectl delete -f .
//Delete Redis
helm del --purge redis-server

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

KEDA āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻĄā§‡āĻŸāĻžāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° Kubernetes āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž (āĻļā§‚āĻ¨ā§āĻ¯ āĻĨā§‡āĻ•ā§‡/āĻļā§‚āĻ¨ā§āĻ¯) āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻ‰āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ°ā§‡āĻĄāĻŋāĻ¸ā§‡ āĻ¸āĻžāĻ°āĻŋāĻ° āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯, āĻ•āĻžāĻĢāĻ•āĻž āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ­ā§‹āĻ•ā§āĻ¤āĻž āĻ˛ā§‡āĻŸā§‡āĻ¨ā§āĻ¸āĻŋāĨ¤

KEDA āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻ‰āĻ¤ā§āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻšāĻ¤ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ…āĻ¨ā§āĻ­ā§‚āĻŽāĻŋāĻ• āĻĒāĻĄ āĻ…āĻŸā§‹āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ° āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯ āĻ•āĻžāĻŽāĻ¨āĻž āĻ•āĻ°āĻ›āĻŋ!

āĻ†āĻ° āĻ•āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻšāĻŦā§‡:

  1. āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨.
  2. āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 90+ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻŸā§āĻ˛: āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻĒāĻ°ā§āĻ¯āĻŦā§‡āĻ•ā§āĻˇāĻŖ, āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§.
  3. āĻŸā§‡āĻ˛āĻŋāĻ—ā§āĻ°āĻžāĻŽā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻ†āĻ°āĻžāĻ‰āĻ¨ā§āĻĄ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸.

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

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