āĻā§āĻ˛āĻžāĻāĻĄ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽāĻžāĻĒāĻ¯ā§āĻā§āĻ¯āĻ¤āĻž āĻāĻāĻāĻŋ āĻŽā§āĻ˛ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĨ¤ Kubernetes-āĻāĻ° āĻ¸āĻžāĻĨā§, āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻž āĻ¯āĻĨāĻžāĻ¯āĻĨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋāĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻŽāĻ¤ā§āĻ āĻ¸āĻšāĻ āĻŦāĻž ReplicaSet
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĨ¤
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ (āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ¯āĻŧ āĻĒāĻĄ āĻŦāĻž ReplicaSet
) āĻ
āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻĒāĻĄ āĻ
āĻā§āĻ¸ā§āĻā§āĻ¯āĻžāĻ˛āĻžāĻ° āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻˇāĻŖāĻžāĻŽā§āĻ˛āĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§āĨ¤ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻšāĻ˛ CPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ (āĻ°āĻŋāĻ¸ā§āĻ°ā§āĻ¸ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸), āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ¸ā§āĻāĻŽ āĻāĻŦāĻ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸āĻā§ āĻāĻā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻā§āĻŽ
āĻĒāĻĄā§āĻ° āĻ
āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻāĻ¯āĻŧā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§, āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻā§āĻ¨ā§āĻ āĻĄā§āĻ°āĻžāĻāĻā§āĻ¨ āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ (āĻā§āĻāĻĄāĻŋāĻ) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻāĻāĻŋ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ
āĻĒāĻžāĻ°ā§āĻāĻ°āĨ¤ āĻāĻā§āĻ¨ā§āĻ-āĻāĻžāĻ˛āĻŋāĻ¤ āĻāĻžāĻā§āĻ° āĻāĻžāĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°āĻŦāĻā§āĻāĻŋāĻ¨ā§āĻ¨ āĻ
āĻā§āĻ¸ā§āĻā§āĻ˛āĻŋāĻ (āĻļā§āĻ¨ā§āĻ¯ āĻĨā§āĻā§/āĻļā§āĻ¨ā§āĻ¯ āĻ¸āĻš) āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻ
āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻĒāĻĄ āĻ
āĻā§āĻ¸ā§āĻā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻšāĻ¤ āĻāĻ°ā§āĨ¤ āĻā§āĻĄ āĻāĻĒāĻ˛āĻŦā§āĻ§
āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ
āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻĻā§āĻāĻžāĻ¯āĻŧ:
- āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻā§ HTTP āĻšāĻŋāĻ āĻāĻŖāĻ¨āĻž āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
- āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻāĻ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤
- KEDA-āĻ¤ā§ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻ¸ā§āĻā§āĻ˛āĻžāĻ°āĻāĻŋ HTTP āĻšāĻŋāĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻāĻ¨ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦāĻ˛āĻŦāĨ¤
KEDA āĻāĻŦāĻ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸
āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻāĻāĻāĻŋ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŽāĻ¨āĻŋāĻāĻ°āĻŋāĻ āĻāĻŦāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻāĻžāĻ°ā§ āĻā§āĻ˛āĻāĻŋāĻ, āĻ
āĻāĻļ
KEDA āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ˛āĻžāĻ°ā§āĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§ - āĻāĻāĻŋ KEDA āĻāĻŦāĻ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻ¤ā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻŦāĻ āĻāĻāĻŋ āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻŦā§āĻ° āĻāĻ°ā§āĨ¤ KEDA āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻ¤āĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻāĻāĻžāĻ§āĻŋāĻ āĻĄā§āĻāĻž āĻāĻ¤ā§āĻ¸ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻžāĻĢāĻāĻž, āĻ°ā§āĻĄāĻŋāĻ¸, āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸āĨ¤ āĻ āĻ°ā§āĻĨāĻžā§, āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛ āĻāĻ°āĻ¤ā§ KEDA āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻŦā§āĻĻāĻ¨
Golang āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ HTTP āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ āĻĻā§āĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°ā§:
- āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻžāĻ¨āĻāĻŋ āĻāĻ¨āĻ¸ā§āĻā§āĻ°ā§āĻŽā§āĻ¨ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ http_requests āĻŽā§āĻā§āĻ°āĻŋāĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§, āĻ¯āĻžāĻ¤ā§ āĻāĻāĻāĻŋ āĻšāĻŋāĻ āĻāĻžāĻāĻ¨ā§āĻ āĻĨāĻžāĻā§āĨ¤ āĻļā§āĻˇ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§āĻāĻŋ URI-āĻ¤ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤
/metrics
.var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests", Help: "number of http requests", })
- āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻāĻŦāĻžāĻŦā§
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]))
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨:
- āĻ¸ā§ āĻāĻā§āĻāĻŋāĻ¤ āĻāĻ°ā§
Deployment
āĻ¨āĻžāĻŽ āĻ¸āĻšgo-prom-app
. - āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻĒā§āĻ°āĻāĻžāĻ° -
Prometheus
. āĻĒā§āĻ°āĻŽāĻŋāĻĨāĻŋāĻāĻ¸ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻž āĻŽā§āĻā§āĻ°āĻŋāĻ āĻ¨āĻžāĻŽ, āĻĨā§āĻ°ā§āĻļāĻšā§āĻ˛ā§āĻĄ āĻāĻŦāĻ āĻ¸āĻš āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§PromQL āĻĒā§āĻ°āĻļā§āĻ¨ , āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§āĨ¤ PromQL āĻĒā§āĻ°āĻļā§āĻ¨ -sum(rate(http_requests[2m]))
. - āĻ
āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§
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 āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ā§ˇ
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 āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°) āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻ¤ā§
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 āĻ
ā§āĻ¯āĻžāĻĒ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŦā§āĻ¨
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 āĻāĻāĻāĻŋ āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻāĻ¤ā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻšāĻ¤ āĻāĻ°ā§ āĻāĻŦāĻ āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ āĻ¨ā§āĻā§āĻŽāĻŋāĻ āĻĒāĻĄ āĻ āĻā§āĻ¸ā§āĻā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻ° āĻŽā§āĻā§āĻ°āĻŋāĻā§āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤
āĻ¸ā§āĻāĻžāĻā§āĻ¯ āĻāĻžāĻŽāĻ¨āĻž āĻāĻ°āĻāĻŋ!
āĻāĻ° āĻāĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻšāĻŦā§:
āĻā§āĻĒāĻžāĻĻāĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ° āĻāĻŦāĻ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ āĻāĻŦāĻ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ .āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ 90+ āĻĻāĻ°āĻāĻžāĻ°ā§ āĻā§āĻ˛: āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻĒāĻ°ā§āĻ¯āĻŦā§āĻā§āĻˇāĻŖ, āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻāĻŦāĻ āĻāĻ°āĻ āĻ āĻ¨ā§āĻ āĻāĻŋāĻā§ .āĻā§āĻ˛āĻŋāĻā§āĻ°āĻžāĻŽā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻāĻ°āĻžāĻāĻ¨ā§āĻĄ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ .
āĻāĻ¤ā§āĻ¸: www.habr.com