一、背景:
Kubernetes集群規(guī)模大、動(dòng)態(tài)變化快,而且容器化應(yīng)用部署和服務(wù)治理機(jī)制的普及,傳統(tǒng)的基礎(chǔ)設(shè)施監(jiān)控方式已經(jīng)無法滿足Kubernetes集群的監(jiān)控需求。
需要使用專門針對(duì)Kubernetes集群設(shè)計(jì)的監(jiān)控工具來監(jiān)控集群的狀態(tài)和服務(wù)質(zhì)量。
Prometheus則是目前Kubernetes集群中最常用的監(jiān)控工具之一,它可以通過Kubernetes API中的 metrics-server 獲取 Kubernetes 集群的指標(biāo)數(shù)據(jù),從而實(shí)現(xiàn)對(duì)Kubernetes集群的應(yīng)用層面監(jiān)控,以及基于它們的水平自動(dòng)伸縮對(duì)象 HorizontalPodAutoscaler。
二、Metrics-server
資源指標(biāo)管道 Metrics API | Kubernetes
Metrics Server 是一個(gè)專門用來收集 Kubernetes 核心資源指標(biāo)(metrics)的工具,它定時(shí)從所有節(jié)點(diǎn)的 kubelet 里采集信息,但是對(duì)集群的整體性能影響極小,每個(gè)節(jié)點(diǎn)只大約會(huì)占用 1m 的 CPU 和 2MB 的內(nèi)存,所以性價(jià)比非常高。
Metrics Server 工作原理:
圖中從右到左的架構(gòu)組件包括以下內(nèi)容:
cAdvisor: 用于收集、聚合和公開 Kubelet 中包含的容器指標(biāo)的守護(hù)程序。
kubelet: 用于管理容器資源的節(jié)點(diǎn)代理。可以使用 /metrics/resource 和 /stats kubelet API 端點(diǎn)訪問資源指標(biāo)。
Summary API: kubelet 提供的 API,用于發(fā)現(xiàn)和檢索可通過 /stats 端點(diǎn)獲得的每個(gè)節(jié)點(diǎn)的匯總統(tǒng)計(jì)信息。
metrics-server: 集群插件組件,用于收集和聚合從每個(gè) kubelet 中提取的資源指標(biāo)。API 服務(wù)器提供 Metrics API 以供 HPA、VPA 和 kubectl top 命令使用。Metrics Server 是 Metrics API 的參考實(shí)現(xiàn)。
Metrics API: Kubernetes API 支持訪問用于工作負(fù)載自動(dòng)縮放的 CPU 和內(nèi)存。要在你的集群中進(jìn)行這項(xiàng)工作,你需要一個(gè)提供 Metrics API 的 API 擴(kuò)展服務(wù)器。
2.1、Metrics-server部署配置
Metrics Server 的項(xiàng)目網(wǎng)址(https://github.com/kubernetes-sigs/metrics-server)
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml && mv components.yaml metrics-server.yaml
修改 YAML 文件
apiVersion: apps/v1 kind: Deployment metadata: name: metrics-server namespace: kube-system spec: ... ... template: spec: containers: - args: - --kubelet-insecure-tls ... ...
Metrics Server 默認(rèn)使用 TLS 協(xié)議,要驗(yàn)證證書才能與 kubelet 實(shí)現(xiàn)安全通信,而我們的內(nèi)網(wǎng)環(huán)境里沒有這個(gè)必要。
默認(rèn)鏡像源非國內(nèi),如有下載失敗的小伙伴,更改鏡像為如下阿里云提供的即可:
registry.aliyuncs.com/google_containers/metrics-server:v0.6.1
部署:
$ kubectl apply -f metrics-server.yaml
測試驗(yàn)證:
$ kubectl top node $ kubectl top pod -n kube-system
三、HorizontalPodAutoscaler
HorizontalPodAutoscaler (HPA)是Kubernetes中的一個(gè)控制器,用于動(dòng)態(tài)地調(diào)整Pod副本的數(shù)量。HPA可以根據(jù)Metrics-server提供的指標(biāo)(如CPU使用率、內(nèi)存使用率等)或內(nèi)部指標(biāo)(如每秒的請(qǐng)求數(shù))來自動(dòng)調(diào)整Pod的副本數(shù)量,以確保應(yīng)用程序具有足夠的資源,并且不會(huì)浪費(fèi)資源。
HPA是Kubernetes擴(kuò)展程序中非常常用的部分,特別是在負(fù)載高峰期自動(dòng)擴(kuò)展應(yīng)用程序時(shí)。
3.1、使用HorizontalPodAutoscaler
創(chuàng)建一個(gè) Nginx 應(yīng)用,定義 Deployment 和 Service,作為自動(dòng)伸縮的目標(biāo)對(duì)象:
apiVersion: apps/v1 kind: Deployment metadata: name: ngx-hpa-dep spec: replicas: 1 selector: matchLabels: app: ngx-hpa-dep template: metadata: labels: app: ngx-hpa-dep spec: containers: - image: nginx:alpine name: nginx ports: - containerPort: 80 resources: requests: cpu: 50m memory: 10Mi limits: cpu: 100m memory: 20Mi --- apiVersion: v1 kind: Service metadata: name: ngx-hpa-svc spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: ngx-hpa-dep
注意在它的 spec 里一定要用 resources 字段寫清楚資源配額,否則 HorizontalPodAutoscaler 會(huì)無法獲取 Pod 的指標(biāo),也就無法實(shí)現(xiàn)自動(dòng)化擴(kuò)縮容。
接下來我們要用命令 kubectl autoscale 創(chuàng)建一個(gè) HorizontalPodAutoscaler 的樣板 YAML 文件,它有三個(gè)參數(shù):
min,Pod 數(shù)量的最小值,也就是縮容的下限。
max,Pod 數(shù)量的最大值,也就是擴(kuò)容的上限。
cpu-percent,CPU 使用率指標(biāo),當(dāng)大于這個(gè)值時(shí)擴(kuò)容,小于這個(gè)值時(shí)縮容。
現(xiàn)在我們就來為剛才的 Nginx 應(yīng)用創(chuàng)建 HorizontalPodAutoscaler,指定 Pod 數(shù)量最少 2 個(gè),最多 8 個(gè),CPU 使用率指標(biāo)設(shè)置的小一點(diǎn),5%,方便我們觀察擴(kuò)容現(xiàn)象:
$ kubectl autoscale deploy ngx-hpa-dep --min=2 --max=8 --cpu-percent=5 --dry-run=client -o yaml > nginx-demo-hpa.yaml
YAML 描述文件:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: ngx-hpa spec: maxReplicas: 8 minReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: ngx-hpa-dep targetCPUUtilizationPercentage: 5
通過kubectl apply創(chuàng)建這個(gè) HorizontalPodAutoscaler 后,它會(huì)發(fā)現(xiàn) Deployment 里的實(shí)例只有 1 個(gè),不符合 min 定義的下限的要求,就先擴(kuò)容到 2 個(gè):
# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE ngx-hpa-dep 1/2 2 1 95s
3.2、測試驗(yàn)證
下面我們來給 Nginx 加上壓力流量,運(yùn)行一個(gè)測試 Pod,使用的鏡像是httpd:alpine,它里面有 HTTP 性能測試工具 ab(Apache Bench):
$ kubectl run test -it --image=httpd:alpine -- sh
然后我們向 Nginx 發(fā)送一百萬個(gè)請(qǐng)求,持續(xù) 1 分鐘,再用 kubectl get hpa 來觀察 HorizontalPodAutoscaler 的運(yùn)行狀況:
$ ab -c 10 -t 60 -n 1000000 'http://ngx-hpa-svc/'
Metrics Server 大約每 15 秒采集一次數(shù)據(jù),所以 HorizontalPodAutoscaler 的自動(dòng)化擴(kuò)容和縮容也是按照這個(gè)時(shí)間點(diǎn)來逐步處理的。
當(dāng)它發(fā)現(xiàn)目標(biāo)的 CPU 使用率超過了預(yù)定的 5% 后,就會(huì)以 2 的倍數(shù)開始擴(kuò)容,一直到數(shù)量上限,然后持續(xù)監(jiān)控一段時(shí)間;
如果 CPU 使用率回落,就會(huì)再縮容到最小值 (默認(rèn)會(huì)等待五分鐘如果負(fù)載沒有上去,就會(huì)縮小到最低水平,防止抖動(dòng))。
$ kubectl get po NAME READY STATUS RESTARTS AGE ngx-hpa-dep-7984687bb9-86cg5 0/1 ContainerCreating 0 14s ngx-hpa-dep-7984687bb9-9wpr8 1/1 Running 0 29s ngx-hpa-dep-7984687bb9-gjzwl 0/1 ContainerCreating 0 14s ngx-hpa-dep-7984687bb9-k4dpj 0/1 ContainerCreating 0 14s ngx-hpa-dep-7984687bb9-qkhpq 1/1 Running 0 4m45s ngx-hpa-dep-7984687bb9-sgxtc 0/1 ContainerCreating 0 14s ngx-hpa-dep-7984687bb9-xq6xk 1/1 Running 0 6m11s ngx-hpa-dep-7984687bb9-xs9q8 0/1 ContainerCreating 0 29s
四、總結(jié)
1、Metrics Server是Kubernetes中的一個(gè)組件,它可以將集群中的散布的資源使用情況數(shù)據(jù)收集并聚合起來。收集的數(shù)據(jù)包括節(jié)點(diǎn)的CPU和內(nèi)存使用情況等。
2、通過API提供給Kubernetes中的其它組件(如HPA)使用。Metrics Server可以幫助集群管理員和應(yīng)用程序開發(fā)者更好地了解集群中資源的使用情況,并根據(jù)這些數(shù)據(jù)做出合理的決策,例如調(diào)整Pod副本數(shù)、擴(kuò)展集群等。
3、Metrics Server對(duì)于Kubernetes中的資源管理和應(yīng)用程序擴(kuò)展非常重要。
-
API
+關(guān)注
關(guān)注
2文章
1545瀏覽量
63191 -
容器
+關(guān)注
關(guān)注
0文章
503瀏覽量
22297 -
監(jiān)控平臺(tái)
+關(guān)注
關(guān)注
0文章
30瀏覽量
8645 -
Prometheus
+關(guān)注
關(guān)注
0文章
28瀏覽量
1814
原文標(biāo)題:基于Prometheus的全方位監(jiān)控平臺(tái)--HPA自動(dòng)伸縮
文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Prometheus的架構(gòu)原理從“監(jiān)控”談起

[分享]全方位剖析BGA布線規(guī)則與技巧
全方位智能小車通訊應(yīng)該使用什么方式?
全方位距離雷達(dá)動(dòng)態(tài)檢測系統(tǒng)的設(shè)計(jì)怎么設(shè)計(jì)
Glance360全方位智能展示
什么是全方位汽車安全解決方案?
關(guān)于全方位立體電容傳感器的設(shè)計(jì)
prometheus做監(jiān)控服務(wù)的整個(gè)流程介紹
介紹一種全方位測量和檢驗(yàn)的軟件
安全監(jiān)控電路提供全方位監(jiān)測,確保系統(tǒng)的安全性
prometheus下載安裝教程

基于kube-prometheus的大數(shù)據(jù)平臺(tái)監(jiān)控系統(tǒng)設(shè)計(jì)
基于Prometheus開源的完整監(jiān)控解決方案

評(píng)論