Kubernetes-แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ Prometheus-แƒ˜แƒกแƒ แƒ“แƒ KEDA-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

Kubernetes-แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ Prometheus-แƒ˜แƒกแƒ แƒ“แƒ KEDA-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—Balloon Man Cimuanos-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ 

แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒฃแƒ แƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒฆแƒ แƒฃแƒ‘แƒšแƒแƒ•แƒแƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. Kubernetes-แƒ˜แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”แƒ—แƒ˜แƒ•แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ–แƒ แƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒœ ReplicaSet โ€” แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒ.

Kubernetes แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒแƒก (แƒแƒœแƒฃ Pods แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒแƒœ ReplicaSet) แƒ“แƒ”แƒ™แƒšแƒแƒ แƒแƒชแƒ˜แƒฃแƒšแƒแƒ“ Horizontal Pod Autoscaler แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ™แƒ แƒ˜แƒขแƒ”แƒ แƒ˜แƒฃแƒ›แƒ˜แƒ CPU-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ (แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ), แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒแƒ— แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ.

แƒ’แƒฃแƒœแƒ“แƒ˜ Kubernetes aaS Mail.ru-แƒ“แƒแƒœ แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ’แƒแƒ แƒ” แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ Kubernetes แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒ›แƒ˜แƒก แƒกแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก HTTP แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒฐแƒแƒ แƒ˜แƒ–แƒแƒœแƒขแƒแƒšแƒฃแƒ แƒ˜ แƒแƒ•แƒขแƒแƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ Kubernetes Event Driven Autoscaling (KEDA), แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก Kubernetes แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. แƒ˜แƒก แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ Horizontal Pod Autoscaler-แƒ—แƒแƒœ, แƒ แƒแƒ—แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ (แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒœแƒฃแƒšแƒแƒ›แƒ“แƒ”) แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ–แƒ” แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ™แƒแƒ“แƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ GitHub.

แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒ™แƒšแƒ” แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ

Kubernetes-แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ Prometheus-แƒ˜แƒกแƒ แƒ“แƒ KEDA-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ แƒ’แƒ•แƒ˜แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ™แƒšแƒ” แƒแƒฆแƒฌแƒ”แƒ แƒแƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜:

  1. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก HTTP แƒฐแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒแƒก แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜.
  2. แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ› แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“.
  3. แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒกแƒ™แƒแƒšแƒ”แƒ แƒ˜ KEDA-แƒจแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ” HTTP แƒฐแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—.

แƒแƒฎแƒšแƒ แƒ›แƒ” แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ— แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

KEDA แƒ“แƒ แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”

แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ” แƒแƒ แƒ˜แƒก แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒฃแƒ›แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ Cloud Native Computing Foundation. แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒแƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒ“แƒ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒแƒ— แƒ“แƒ แƒแƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒแƒ“. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ•แƒ˜แƒ–แƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ’แƒ แƒแƒคแƒแƒœแƒ แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ•แƒ˜แƒ–แƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ Kubernetes API-แƒกแƒ—แƒแƒœ.

KEDA แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒกแƒ™แƒแƒšแƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก - แƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ˜แƒ“แƒ˜ KEDA-แƒกแƒ แƒ“แƒ แƒ’แƒแƒ แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒจแƒแƒ แƒ˜แƒก. แƒกแƒ™แƒแƒšแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒฃแƒ แƒ˜แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ›แƒ˜แƒกแƒ’แƒแƒœ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ KEDA แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ— แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒšแƒแƒ“.

แƒกแƒ™แƒแƒšแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒ”แƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ›แƒ แƒแƒ•แƒแƒš แƒฌแƒงแƒแƒ แƒแƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ™แƒแƒคแƒ™แƒ, แƒ แƒ”แƒ“แƒ˜แƒกแƒ˜, แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”. แƒแƒœแƒฃ, KEDA แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก Kubernetes-แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒกแƒ™แƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก แƒ™แƒ แƒ˜แƒขแƒ”แƒ แƒ˜แƒฃแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ

Golang แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก HTTP-แƒ˜แƒ— แƒ“แƒ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒแƒ  แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก:

  1. แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก Prometheus Go แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒก, แƒ แƒแƒ—แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก 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 Prometheus-แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜;
  • 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. แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— pollingIntervalKEDA แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ”แƒก แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒงแƒแƒ•แƒ”แƒš แƒ—แƒฎแƒฃแƒ—แƒ›แƒ”แƒข แƒฌแƒแƒ›แƒจแƒ˜. แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ”แƒ แƒ—แƒ˜ แƒฅแƒ•แƒ”แƒจ (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-แƒ›แƒ“แƒ”, แƒ›แƒแƒจแƒ˜แƒœ แƒฌแƒ˜แƒžแƒฌแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒแƒ—แƒฎแƒ˜.

แƒแƒฎแƒšแƒ แƒ•แƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ!

แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ แƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒแƒ แƒ˜แƒก Kubernetes แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ 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. แƒ“แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ—.

Redis-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ Helm-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ—แƒฃ Helm แƒแƒ  แƒ’แƒแƒฅแƒ•แƒ— แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ”แƒก แƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—. Mac-แƒ–แƒ” แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ:

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

helm init แƒแƒฎแƒ“แƒ”แƒœแƒก แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒแƒก Tiller แƒ™แƒฃแƒ‘แƒ”แƒ แƒœแƒ”แƒขแƒ˜แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒแƒ›แƒ“แƒ”.

kubectl get pods -n kube-system | grep tiller

แƒ“แƒแƒ”แƒšแƒแƒ“แƒ”แƒ—, แƒกแƒแƒœแƒแƒ› Tiller pod แƒจแƒ”แƒ•แƒ˜แƒ“แƒ”แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒš แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜.

แƒ›แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ: แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก Helm@2, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก Tiller แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒแƒฎแƒšแƒ Helm@3 แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜แƒ, แƒ˜แƒก แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒก.

Helm-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ Redis-แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“:

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 Autoscaling-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ

แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ 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

แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— hey - แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ:

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

แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ Linux แƒแƒœ Windows.

แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ—:

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

แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก 200 แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก. แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” Redis-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

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

แƒ“แƒแƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ— แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ (แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ PromQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ—):

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

แƒ—แƒฃ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒแƒ แƒแƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒฃแƒšแƒ˜แƒ, แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ˜แƒ› แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒแƒ›แƒ“แƒ”, แƒกแƒแƒ“แƒแƒช แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒžแƒแƒ“แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ (แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ PromQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ—), แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ:

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 แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ” แƒฌแƒงแƒแƒ แƒแƒกแƒ—แƒแƒœ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒแƒฌแƒ•แƒ“แƒ˜แƒก แƒ›แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒแƒก Metrics แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— Horizontal Pod Autoscaler-แƒ–แƒ”.

แƒ’แƒ˜แƒกแƒฃแƒ แƒ•แƒ”แƒ‘แƒ— แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒ‘แƒก!

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ—:

  1. แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒ แƒ“แƒ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ Kubernetes-แƒ˜แƒก แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
  2. 90+ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ Kubernetes-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ, แƒ›แƒแƒ แƒ—แƒ•แƒ, แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜, แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ แƒ“แƒ แƒกแƒฎแƒ•แƒ.
  3. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒ แƒฎแƒ˜ Kubernetes-แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ Telegram-แƒจแƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ