เบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฒเบเปเบเปเปเบกเปเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบซเบผเบฑเบเบชเปเบฒเบฅเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฅเบฒเบง. เบเปเบงเบ Kubernetes, เบเบฒเบเบเบฐเบซเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเปเบเบปเปเบฒเบเบฑเบเบเบฒเบเปเบเบตเปเบกเบเปเบฒเบเบงเบเบเบฒเบเบเปเบฒเบฅเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบซเบผเบท ReplicaSet
โ เปเบเปโเบงเปเบฒโเบกเบฑเบโเปเบเบฑเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบนเปโเบกเบทโ.
Kubernetes เบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบทเบเบเบฑเบเบเบฐเปเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ (เปเบเบฑเปเบ: Pods เปเบเบเบฒเบเบเบณเปเบเป เบซเบผเบท ReplicaSet
) เปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฒเบเบเบฐเบเบฒเบเปเบเบเปเบเปเบชเบฐเปเบเบฒเบฐ Horizontal Pod Autoscaler. เบกเบฒเบเบเบฐเบเบฒเบเบกเบฒเบเบเบฐเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบซเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบกเปเบ metrics เบเบฒเบเบเปเบฒเปเบเป CPU (metrics เบเบฑเบเบเบฐเบเบฒเบเบญเบ), เปเบเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบ metrics เบเปเบฒเบเบปเบเปเบญเบเปเบฅเบฐเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเปเบซเป.
เบเบตเบกเบเบฒเบ
เปเบเบเบเบฒเบเบเบฑเบเบเบฐเปเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบฒเบกเปเบเบงเบเบญเบเบเบญเบเบเบฑเบ, Kubernetes Event Driven Autoscaling (KEDA) เบเบทเบเบเปเบฒเปเบเป, เปเบเบฑเบเปเบซเบผเปเบเปเบเบตเบ Kubernetes operator. เบกเบฑเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเปเบเบเบเบฑเปเบเปเบเบตเบกเบเบฑเบ Horizontal Pod Autoscaler เปเบเบทเปเบญเบชเบฐเปเบญเบเบเบฒเบเบเบฑเบเบเบฐเปเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบเปเปเบกเบตเบฎเบญเบเบเปเป (เบฅเบงเบกเบเบฑเบเบซเบฒ/เบเบฒเบเบชเบนเบ) เบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบตเปเบเบฑเบเปเบเบทเปเบญเบเปเบเบเปเบซเบเบเบฒเบ. เบฅเบฐเบซเบฑเบเบกเบตเบขเบนเป
เบเบฒเบเบฅเบงเบกเปเบเบเบซเบเปเปเบเบญเบเบฅเบฐเบเบปเบ
เปเบเบเบงเบฒเบเบชเบฐเปเบเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบชเบฑเปเบเปเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเปเบฎเบฑเบเบงเบฝเบเบเบธเบเบขเปเบฒเบ:
- เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบซเป HTTP hit count metrics เปเบเบฎเบนเบเปเบเบ Prometheus.
- Prometheus เปเบเปเบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบทเปเบญเปเบเบฑเบเบเปเบฒเบเบฒเบเบงเบฑเบเปเบเบเปเบซเบผเบปเปเบฒเบเบตเป.
- Prometheus scaler เปเบ KEDA เบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบทเปเบญเบเบฑเบเบเบฐเบซเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบญเบตเบเปเบชเปเบเปเบฒเบเบงเบ HTTP hits.
เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเปเบเปเบฅเบฐเบญเบปเบเบเบฐเบเบญเบ.
KEDA เปเบฅเบฐ Prometheus
Prometheus เปเบกเปเบเบเบธเบเปเบเบทเปเบญเบเบกเบทเบเบฒเบเบเบดเบเบเบฒเบก เปเบฅเบฐเปเบเปเบเปเบเบทเบญเบเบฅเบฐเบเบปเบเปเบซเบผเปเบเปเบเบตเบ, เบชเปเบงเบเปเบถเปเบ
KEDA เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบ scaler - เบกเบฑเบเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบเบเบปเบงเบฅเบฐเบซเบงเปเบฒเบ KEDA เปเบฅเบฐเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบ. เบเบฒเบเบเบฐเบเบดเบเบฑเบ scaler เปเบกเปเบเบชเบฐเปเบเบฒเบฐเบเบฑเบเปเบเปเบฅเบฐเบฅเบฐเบเบปเบเปเบเบปเปเบฒเบซเบกเบฒเบเปเบฅเบฐเบชเบฐเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบกเบฑเบ. KEDA เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเปเบเบงเบเบกเบฑเบเปเบเบทเปเบญเบเบงเบเบเบธเบกเบเบฒเบเบเบฑเบเบเบฐเบซเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
Scalers เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบซเบผเปเบเบเปเปเบกเบนเบเบซเบผเบฒเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, Kafka, Redis, Prometheus. เบเบฑเปเบเปเบกเปเบ, KEDA เบชเบฒเบกเบฒเบเปเบเปเปเบเบทเปเบญเบเบฑเบเบเบฐ เปเบฒเบ เบเบฒเบเบเบดเบเบเบฑเปเบ Kubernetes เปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเปเบเป Prometheus metrics เปเบเบฑเบเปเบเบทเปเบญเบเปเบ.
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเบปเบเบชเบญเบ
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเบปเบเบชเบญเบ Golang เบชเบฐเบซเบเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเปเบฒเบ HTTP เปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบชเบญเบเบซเบเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบ:
- เปเบเปเบซเปเบญเบเบชเบฐเปเบธเบเบฅเบนเบเบเปเบฒ Prometheus Go เปเบเบทเปเบญเปเบเบฑเบเปเบเบทเปเบญเบเบกเบทเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ เปเบฅเบฐเบชเบฐเปเบญเบเบเบฒเบเบงเบฑเบเปเบเบ http_requests, เปเบเบดเปเบเบเบฐเบเบญเบเบเปเบงเบเบเบฒเบเบเบฑเบเบเบต. เบเบธเบเบชเบดเปเบเบชเบธเบเบเปเบญเบเบเบตเปเบเบปเบงเบงเบฑเบเปเบเบ Prometheus เบกเบตเบขเบนเปเปเบกเปเบเบขเบนเปเบเบตเป URI
/metrics
.var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests", Help: "number of http requests", })
- เปเบโเบเบฒเบโเบเบญเบโเบชเบฐโเบซเบเบญเบโเบเบฒเบโเบฎเปเบญเบโเบเปโ
GET
เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบตเปเบกเบกเบนเบเบเปเบฒเบเบญเบเบฅเบฐเบซเบฑเบ (access_count
) เปเบ Redis. เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบปเบงเบเบฑเบเบเบฒเบ HTTP เปเบฅเบฐเบเบฑเบเบเบงเบเปเบเบดเปเบ Prometheus metrics. เบเปเบฒเปเบกเบเบฃเบดเบเบเปเบญเบเปเบเบปเปเบฒเบเบฑเบเบเปเบฒaccess_count
เปเบ Redis.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
, เบกเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบ Prometheus เปเบเปเบฎเบฑเบเบเบฒเบเบงเบฑเบเปเบเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ.
เบเบตเปเบเบตเป
เปเบเบตเบเปเบงเบต Prometheus
เบเบฒเบเบชเบฐเปเบเบเบญเบญเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ Prometheus เบเบฐเบเบญเบเบเปเบงเบ:
ConfigMap
- เบเบฒเบโเปเบญเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒ Prometheusโ;Deployment
โ เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเป Prometheus เปเบเบเบธเปเบก Kubernetes;ClusterIP
โ เบเบฒเบโเบเปโเบฅเบดโเบเบฒเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเปเบเบปเปเบฒโเปเบเบดเบ UI Prometheusโ;ClusterRole
,ClusterRoleBinding
ะธServiceAccount
โ เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบงเบโเบชเบญเบโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบโเบเบญเบโเบเบฒเบโเบเปโเบฅเบดโเบเบฒเบโเปเบ Kubernetes (เบเบฒเบโเบเบปเปเบโเบเบปเบโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบโ)โ.
เบเบตเปเบเบตเป
KEDA Prometheus ScaledObject
เปเบเบทเปเบญเบเบงเบฑเบเปเบเบเบเบฐเบซเบเบฒเบเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบเบเบปเบงเบฅเบฐเบซเบงเปเบฒเบ KEDA เปเบฅเบฐเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบ metrics. ScaledObject
เปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบทเปเบญ synchronize เบเบฒเบเบเบดเบเบเบฑเปเบเบเบฑเบเปเบซเบผเปเบเปเบซเบเบเบฒเบ, เปเบเบเปเบฅเบฐเบเบตเบเบตเป Prometheus.
ScaledObject
เบเบฐเบเบญเบเบกเบตเบเปเปเบกเบนเบเบเบฒเบเบเบฑเบเบเบฐเปเบฒเบเบเบฒเบเบเบณเปเบเป, metadata เปเบซเบผเปเบเปเบซเบเบเบฒเบ (เปเบเบฑเปเบ: เบเบงเบฒเบกเบฅเบฑเบเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป, เบเบทเปเปเบเบง), เปเบฅเบเบฐเบเบฒเบเบชเบณเบซเบผเบงเบ, เปเบฅเบเบฐเปเบงเบฅเบฒเบเบฒเบเบเบนเปเบเปเปเบกเบนเบ เปเบฅเบฐเบเปเปเบกเบนเบเบญเบทเปเบเป. เบกเบฑเบเบชเบปเปเบเบเบปเบเปเบซเปเบเบฑเบเบเบฐเบเบฒเบเบญเบ autoscaling เบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบ (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
. - เบเบฐโเปเบเบ Trigger -
Prometheus
. เบเบตเปเบขเบนเปเปเบเบตเบเปเบงเบต Prometheus เปเบเปเบเบทเบเบเปเบฒเบงเปเบเบดเบเบเปเบญเบกเบเบฑเบเบเบทเป metric, เปเบเบเปเบฅเบฐเบชเบญเบเบเบฒเบก PromQL , เปเบเบดเปเบเบเบฐเบเบทเบเบเปเบฒเปเบเป. PromQL Query -sum(rate(http_requests[2m]))
. - เบญเบตเบเบเบฒเบกเบเบฒเบ
pollingInterval
,KEDA เบฎเปเบญเบเบเปเปเบเบปเปเบฒเบซเบกเบฒเบเบเบฒเบ Prometheus เบเบธเบเปเบชเบดเบเบซเปเบฒเบงเบดเบเบฒเบเบต. เบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเบฒเบเปเบเป (minReplicaCount
), เปเบฅเบฐเบเปเบฒเบเบงเบเบชเบนเบเบชเบธเบเบเบญเบเบเบฑเบเบเปเปเปเบเบตเบmaxReplicaCount
(เปเบเบเบปเบงเบขเปเบฒเบเบเบตเป - เบชเบดเบ).
เบชเบฒเบกเบฒเบเบเบดเบเบเบฑเปเบเปเบเป minReplicaCount
เปเบเบปเปเบฒเบเบฑเบเบชเบนเบ. เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเป, KEDA activates เบเบฒเบโเบเปเบฒโเปเบเป zero-to-one เปเบฅเบฐโเบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบ exposes HPA เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบฑเบโเบเบฐโเบซเบเบฒเบโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบโเปเบเบตเปเบกโเปเบเบตเบก. เบเปเบฒเบชเบฑเปเบเบเบตเปเบเบเบฑเบเบเบฑเบเบเปเปเปเบเบฑเบเปเบเปเบเป, เบเบฑเปเบเปเบกเปเบ, เบเบฐเบซเบเบฒเบเบเบฒเบเบซเบเบถเปเบเบซเบฒเบชเบนเบ. เปเบเบเบปเบงเบขเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเปเบฅเบทเบญเบเบชเบนเบเปเบเบฒเบฐเบงเปเบฒเบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ HTTP เปเบฅเบฐเบเปเปเปเบกเปเบเบฅเบฐเบเบปเบเบเบฒเบกเบเบงเบฒเบกเบเปเบญเบเบเบฒเบ.
เบเบงเบฒเบกเบกเบฐเบซเบฑเบเบชเบฐเบเบฑเบเบเบฒเบเปเบ autoscaling
เปเบเบเบเบทเบเปเบเปเปเบเบฑเบเบเบปเบงเบเบฐเบเบธเปเบเปเบเบทเปเบญเบเบฑเบเบเบฐเปเบฒเบเบเบฒเบเบเบณเปเบเป. เปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเปเบฒเบเบฒเบก PromQL sum(rate (http_requests [2m]))
เบชเบปเปเบเบเบทเบเบญเบฑเบเบเบฒเบเบฒเบเบฎเปเบญเบเบเป HTTP เบฅเบงเบก (เบเปเบฒเบฎเปเบญเบเบเปเบเปเปเบงเบดเบเบฒเบเบต), เบงเบฑเบเปเบเบเปเบเปเบฅเบเบฐเบชเบญเบเบเบฒเบเบตเบเบตเปเบเปเบฒเบเบกเบฒ.
เปเบเบทเปเบญเบเบเบฒเบเบเปเบฒเปเบเบเปเบกเปเบเบชเบฒเบก, เบกเบฑเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบฐเบกเบตเบซเบเบถเปเบเบเบฒเบเปเบเปเปเบเบเบฐเบเบฐเบเบตเปเบกเบนเบเบเปเบฒ sum(rate (http_requests [2m]))
เบซเบเปเบญเบเบเบงเปเบฒเบชเบฒเบก. เบเปเบฒเบกเบนเบเบเปเบฒเปเบเบตเปเบกเบเบถเปเบ, เบเปเบญเบเปเบเบตเปเบกเปเบเบตเบกเบเบฐเบเบทเบเปเบเบตเปเบกเปเบเปเบเปเบฅเบฐเบเบฑเปเบ sum(rate (http_requests [2m]))
เปเบเบตเปเบกโเบเบถเปเบโเบชเบฒเบกโ. เบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบเปเบฒเปเบกเปเบเบเบฒเบ 12 เบซเบฒ 14, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบงเบเบเบญเบเบเบฑเบเปเบกเปเบเบชเบตเป.
เบเบญเบเบเบตเปเปเบซเปเบฅเบญเบเบเบฑเปเบเบเปเบฒเบกเบฑเบเปเบเบดเปเบ!
เบเบฒเบเบเบฑเปเบเบเปเบฒเบฅเปเบงเบเปเปเบฒ
เบเบฑเบโเบซเบกเบปเบโเบเบตเปโเบเปเบฒเบโเบเปเบญเบโเบเบฒเบโเปเบกเปเบโเบเบธเปเบก Kubernetes เปเบฅเบฐโเบญเบธโเบเบฐโเบเบญเบโเบเบตเปโเบเปเบฒโเบเบปเบโเบเปเบฒ kubectl
. เบเบปเบงเบขเปเบฒเบเบเบตเปเปเบเปเบเบธเปเบก minikube
, เปเบเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบญเบฑเบเบญเบทเปเบเปเบเป. เบเบฒเบเบเบดเบเบเบฑเปเบ cluster เบกเบต
เบเบดเบเบเบฑเปเบเปเบงเบตเบเบฑเบเบซเบผเปเบฒเบชเบธเบเปเบ 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 เปเบฅเบฐเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบกเบฑเบเบเบทเบเบเบดเบเบเบฑเปเบเปเบเบปเปเบฒเปเบเปเบ namespace keda
. เบเปเบฒโเบชเบฑเปเบโเบเบตเปโเบเบฐโเบเบงเบโเบชเบญเบโ:
kubectl get pods -n keda
เบฅเปเบเปเบฒเปเบซเป KEDA Operator เปเบฅเบตเปเบกเบเบปเปเบ เปเบฅเบฐเปเบเบเบตเป Running State
. เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบชเบทเบเบเปเป.
เบเบฒเบเบเบดเบเบเบฑเปเบ Redis เปเบเบเปเบเป Helm
เบเปเบฒเบเปเบฒเบเบเปเปเปเบเปเบเบดเบเบเบฑเปเบ Helm, เปเบซเปเปเบเปเบญเบฑเบเบเบตเป
brew install kubernetes-helm
helm init --history-max 200
helm init
เปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเปเบเปเบเบญเบเปเบชเบฑเปเบเบเปเบฒเบชเบฑเปเบเปเบเบเปเบญเบเบเบดเปเบเปเบฅเบฐเบเบฑเบเบเบดเบเบเบฑเปเบ Tiller
เปเบเบซเบฒเบเบธเปเบก Kubernetes.
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
เบฅเปเบเปเบฒ Redis เปเบเบปเปเบฒเปเบเปเบเบชเบฐเบเบฒเบเบฐ 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
เบฅเปเบเปเบฒ Redis เปเบเบปเปเบฒเบชเบนเปเบชเบฐเบเบฒเบเบฐ Running
.
เบเบณเปเบเปเปเบเบตเบเปเบงเบต Prometheus
Prometheus manifest เปเบเป
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
เบฅเปเบเปเบฒ Prometheus เปเบเบปเปเบฒเปเบเปเบเบฅเบฑเบ Running
.
เปเบเป kubectl port-forward
เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบดเบเบชเปเบงเบเบเบดเบเบเปเปเบเบนเปเปเบเป Prometheus (เบซเบผเบทเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ API) เบขเบนเป
kubectl port-forward service/prometheus-service 9090
เบเบณเปเบเป KEDA Autoscaling Configuration
เบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบชเปเบฒเบ 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"
เปเบซเปเปเบเปเปเบเบงเปเบฒเบเปเบฒ metric เปเบกเปเบ 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 เบเปเบฒเบฎเปเบญเบเบเป. เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบชเบญเบเบเบตเปเปเบเบเปเบเป Prometheus metrics เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ 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.
เปเบซเบผเบเปเบเบตเปเบกเปเบเบตเบก!
เปเบ terminal เปเบซเบกเป, เบเบดเบเบเบฒเบกเบเบงเบเบเบฒเบเปเบฒเบเบงเบเบเบญเบ pods เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ:
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 เบเบญเบโเบเปเบฒเบโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบ (เปเบเบฑเบ / เบเบฒเบโเบชเบนเบโ) เปเบเบโเบญเบตเบโเปเบชเปโเบเปเปโเบกเบนเบโเบเบฒเบโเบเบฒเบโเบงเบฑเบโเปเบเบโเบเบฒเบโเบเบญเบโ. เบเบปเบงเบขเปเบฒเบ, เบญเบตเบเปเบชเป metrics Prometheus, เบเบงเบฒเบกเบเบฒเบงเปเบเบงเปเบ Redis, เบเบงเบฒเบกเบเบฑเบเบเปเบฒเบเบญเบเบเบนเปเบเปเบฅเบดเปเบเบเปเบเบซเบปเบงเบเปเป Kafka.
KEDA เบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบฑเบเปเบซเบผเปเบเบเบฒเบเบเบญเบเปเบฅเบฐเบเบฑเบเบชเบฐเบซเบเบญเบ metrics เบเบญเบเบกเบฑเบเปเบเบเบเปเบฒเบ Metrics Server เบเบฑเบ Horizontal Pod Autoscaler.
เปเบเบเบเบต!
เบกเบตเบซเบเบฑเบเบญเบตเบเปเบเปเบเบตเปเบเบฐเบญเปเบฒเบ:
เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบฅเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเบตเบเบตเปเบชเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเปเบเบเบนเปเบเบญเบเปเบเบเปเบเบตเปเบฅเบฐ Kubernetes เปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบฐเบฅเบดเบ .90+ เปเบเบทเปเบญเบเบกเบทเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบ Kubernetes: เบเบฒเบเบเบณเปเบเป, เบเบฒเบเบเบฑเบเบเบฒเบ, เบเบฒเบเบเบดเบเบเบฒเบก, เบเบงเบฒเบกเบเบญเบเปเบ เปเบฅเบฐเบญเบทเปเบเปเบญเบตเบ .เบเปเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบกเบฒเบ Kubernetes เปเบ Telegram .
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com