国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

k8s集群應(yīng)用基于Prometheus實(shí)現(xiàn)HPA

IT那活兒 / 600人閱讀
k8s集群應(yīng)用基于Prometheus實(shí)現(xiàn)HPA

點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!


01

在k8s集群中,我們希望當(dāng)應(yīng)用負(fù)載過(guò)大的時(shí)候,可以對(duì)應(yīng)用進(jìn)行自動(dòng)擴(kuò)容,提升pod的副本數(shù)來(lái)應(yīng)對(duì)大量的流量,當(dāng)負(fù)載小的時(shí)候可以對(duì)應(yīng)用進(jìn)行自動(dòng)縮容,以避免資源浪費(fèi),這個(gè)時(shí)候就需要給應(yīng)用做一個(gè)HPA
但是并非所有系統(tǒng)應(yīng)用都可以通過(guò)多帶帶依靠CPU/內(nèi)存使用量度來(lái)滿(mǎn)足其SLA。有時(shí)候,我們希望除了CPU/內(nèi)存指標(biāo)外有更多的指標(biāo)能用于實(shí)現(xiàn)HPA。這樣不僅能保證實(shí)現(xiàn)HPA指標(biāo)的多樣性,還可以通過(guò)多指標(biāo)對(duì)系統(tǒng)應(yīng)用做HPA,以更好地處理突發(fā)事件并確保高可用性。 

02

HPA原理

對(duì)k8s比較熟悉的人,都知道k8s集群里的應(yīng)用在調(diào)度和擴(kuò)縮容的時(shí)候都有自己的一套算法,自動(dòng)彈性伸縮的原理是怎樣的呢,下面舉一個(gè)實(shí)際例子進(jìn)行闡述
假設(shè)存在一個(gè)叫A的Deployment,包含3個(gè)Pod,每個(gè)副本的Request值是1核,當(dāng)前3個(gè)Pod的CPU利用率分別是60%、70%與80%,此時(shí)我們?cè)O(shè)置HPA閾值為50%,最小副本為3,最大副本為10。
接下來(lái)我們將上述的數(shù)據(jù)帶入公式中:
  • 總的Pod的利用率是60%+70%+80% = 210%;
  • 當(dāng)前的Target是3;
  • 算式的結(jié)果是70%,大于50%閾值,因此當(dāng)前的Target 數(shù)目過(guò)小,需要進(jìn)行擴(kuò)容;
  • 重新設(shè)置 ,此時(shí)算式的結(jié)果為42%低于50%,判斷還需要擴(kuò)容兩個(gè)容器;
  • 此時(shí)HPA設(shè)置Replicas為5,進(jìn)行Pod的水平擴(kuò)容。


03

影響HPA的細(xì)節(jié)

經(jīng)過(guò)前面的推演,可以協(xié)助我們快速理解HPA最核心的原理,不過(guò)上面的推演結(jié)果和實(shí)際情況下是有所出入的,如果我們進(jìn)一步試驗(yàn)的話(huà),會(huì)發(fā)現(xiàn) Replicas最終的結(jié)果是6而不是5。這是由于 HPA 中一些細(xì)節(jié)的處理導(dǎo)致的,主要包含如下三個(gè)主要的方面:

3.1 噪聲處理

通過(guò)前面的公式可以發(fā)現(xiàn),Target的數(shù)目很大程度上會(huì)影響最終的結(jié)果,而在Kubernetes中,無(wú)論是變更或者升級(jí),都更傾向于使用Recreate而不是Restart的方式進(jìn)行處理。
這就導(dǎo)致了在Deployment的生命周期中,可能會(huì)出現(xiàn)某一個(gè)時(shí)間,Target會(huì)由于計(jì)算了Starting或者 Stopping的Pod而變得很大。這就會(huì)給HPA的計(jì)算帶來(lái)非常大的噪聲,在HPA Controller的計(jì)算中,如果發(fā)現(xiàn)當(dāng)前的對(duì)象存在Starting或者Stopping的Pod會(huì)直接跳過(guò)當(dāng)前的計(jì)算周期,等待狀態(tài)都變?yōu)镽unning再進(jìn)行計(jì)算。

3.2 冷卻周期

HPA控制器觀測(cè)資源使用率并作出決策是有周期的,執(zhí)行是需要時(shí)間的,在執(zhí)行自動(dòng)伸縮過(guò)程中metrics不是靜止不變的,可能降低或者升高,如果執(zhí)行太頻繁可能導(dǎo)致資源的使用快速抖動(dòng),因此控制器每次決策后的一段時(shí)間內(nèi)不再進(jìn)行新的決策。
在彈性伸縮中,冷卻周期是不能逃避的一個(gè)話(huà)題,很多時(shí)候我們期望快速?gòu)棾雠c快速回收,而另一方面,我們又不希望集群震蕩,所以一個(gè)彈性伸縮活動(dòng)冷卻周期的具體數(shù)值是多少,一直被開(kāi)發(fā)者所挑戰(zhàn)。在HPA中,默認(rèn)的擴(kuò)容冷卻周期是3min,縮容冷卻周期是5min。可以通過(guò)調(diào)整kube-controller-manager組件啟動(dòng)參數(shù)設(shè)置冷卻時(shí)間:
--horizontal-pod-autoscaler-downscale-delay擴(kuò)容冷卻
--horizontal-pod-autoscaler-upscale-delay縮容冷卻
針對(duì)不同的k8s版本,可以參考相應(yīng)k8s版本kube-controller-manager組件關(guān)于HPA的啟動(dòng)參數(shù):

3.3 邊界值計(jì)算

我們回到剛才的計(jì)算公式,第一次我們算出需要彈出的容器數(shù)目是 5,此時(shí)擴(kuò)容后整體的負(fù)載是42%,但是我們似乎忽略了一個(gè)問(wèn)題:
一個(gè)全新的 Pod啟動(dòng)會(huì)不會(huì)自己就占用了部分資源?
此外,8%的緩沖區(qū)是否就能夠緩解整體的負(fù)載情況?
要知道當(dāng)一次彈性擴(kuò)容完成后,下一次擴(kuò)容要最少等待3分鐘才可以繼續(xù)擴(kuò)容。為了解決這些問(wèn)題,HPA引入了邊界值,目前在計(jì)算邊界條件時(shí),會(huì)自動(dòng)加入10%的緩沖,這也是為什么在剛才的例子中最終的計(jì)算結(jié)果為6的原因。 


04

HPA 的API版本

目前HPA已經(jīng)支持三大版本:autoscaling/v1、autoscaling/v2beta1和autuscaling/v2beta2 三個(gè)大版本。
  • API的v1版本,在當(dāng)前穩(wěn)定版本(autoscaling/v1)中只支持基于 CPU 指標(biāo)的擴(kuò)縮。
  • API的beta版本,autoscaling/v2beta1版和autuscaling/v2beta2版引入了基于內(nèi)存和自定義指標(biāo)的擴(kuò)縮,在autoscaling/v2beta1中增加支持custom metrics,在 autoscaling/v2beta2 中增加支持 external metrics。


05

實(shí)現(xiàn)流程圖

關(guān)鍵組件介紹:
  • Prometheus:采集Pod的性能指標(biāo)數(shù)據(jù)。
  • Custom Metrics server:從Prometheus中采集性能指標(biāo)數(shù)據(jù)。它是資源指標(biāo)數(shù)據(jù)的聚合器,實(shí)現(xiàn)了自定義指標(biāo)API(Resource Metres API),通過(guò)Kubernetes的Custom Metrics server(Prometheus Adapter)層將自定義指標(biāo)HPA注冊(cè)Maste API server中,以/apis/custom.metrics.k8s.io路徑提供指標(biāo)數(shù)據(jù)。
  • HAI Controler:為APA控制器,通過(guò)自定義指標(biāo)API從API Server中獲取指標(biāo)數(shù)據(jù),以決策擴(kuò)縮容操作。


06


安裝

組件包括Prometheus,Metrics server,Custom Metrics server(prometheus-adapter),如果集群已經(jīng)安裝了Prometheus,Metrics server,只需安裝Custom Metrics server即可。

6.1 安裝Custom Metrics server

測(cè)試環(huán)境當(dāng)中已經(jīng)安裝了Prometheus,Metrics server,這里只需安裝Custom Metrics server即可,下載prometheus-adapter的helm chart,使用helm一鍵部署。
編輯values.yaml添加平臺(tái)Prometheus.service地址,使用如下命令一鍵部署:
helm install  prometheus-adapter --namespace monitoring ../prometheus-adapter/ -f values.yaml

6.2 配置

我們可以將Prometheus中的任何一個(gè)指標(biāo)都用于HPA,但是前提是我們能通過(guò)查詢(xún)語(yǔ)句將它拿到(包括指標(biāo)名稱(chēng)和其對(duì)應(yīng)的值)。
Prometheus適配器在configmap里配置了如何從prometheus獲取數(shù)據(jù),并與k8s的資源做對(duì)應(yīng),以及如何在api接口中展示的規(guī)則。


07

驗(yàn)證

列出prometheus提供的自定義指標(biāo),發(fā)現(xiàn)所有Prometheus里能查看的監(jiān)控指標(biāo)在這里都被獲取到了。
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
獲取monitoring命名孔徑下所有Pod的FS使用率:
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/monitoring/pods/*/fs_usage_bytes" | jq .
從自定義metrics API中獲取每秒請(qǐng)求總數(shù)。
例如Prometheus監(jiān)控的應(yīng)用,暴露了名為http_requests_total的自定義指標(biāo)。Prometheus適配器刪除_total后綴,并將度量標(biāo)記為計(jì)數(shù)器度量(counter metric)。
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/http_requests" | jq .

{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/%2A/http_requests"
},
"items": [
{
"describedObject": {
"kind": "Pod",
"namespace": "default",
"name": "podinfo-6c994884cf-m6l6m",
"apiVersion": "/v1"
},
"metricName": "http_requests",
"timestamp": "2020-10-09T03:01:01Z",
"value": "1072m"
},
{
"describedObject": {
"kind": "Pod",
"namespace": "default",
"name": "podinfo-6c994884cf-pns2n",
"apiVersion": "/v1"
},
"metricName": "http_requests",
"timestamp": "2020-10-09T03:01:01Z",
"value": "1035m"
}
]
}
自定義API SERVER收到請(qǐng)求后會(huì)從Prometheus里面查詢(xún)http_requests_total的值,然后把這個(gè)值換算成一個(gè)以時(shí)間為單位的請(qǐng)求率。
m代表milli-units,例如1035m代表1035 milli-requests(就是大約1個(gè)請(qǐng)求),用十進(jìn)制表示為 1.035。可能度量指標(biāo)API將返回沒(méi)有后綴的整數(shù),否則返回以千分單位的數(shù)量。
這意味著我們可能會(huì)看到你的度量指標(biāo)在1和1035m(也就是在十進(jìn)制記數(shù)法中的 1 和 1.035之間波動(dòng))。

7.1 創(chuàng)建HPA

基于pod/svc/CPU/memory創(chuàng)建HPA:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: podinfo-hpa-f
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 200Mi
- type: Pods
pods:
metric:
name: http_requests
target:
type: AverageValue
averageValue: 50
- type: Object
object:
metric:
name: http_requests
describedObject:
apiVersion: v1
kind: service
name: podinfo
target:
type: Value
value: 50
一個(gè)HPA中可以定義多種指標(biāo),如果定義多個(gè)指標(biāo)將針對(duì)每種類(lèi)型指標(biāo)都計(jì)算Pod副本數(shù)量,取最大的進(jìn)行擴(kuò)縮容。
換句話(huà)說(shuō),系統(tǒng)會(huì)根據(jù)CPU和pod的自定義指標(biāo)計(jì)算,在每個(gè)調(diào)度周期(默認(rèn)為30s)都會(huì)計(jì)算出一個(gè)縮放的推薦值并記錄下來(lái),在每次計(jì)算縮放值時(shí)都會(huì)查看歷史的推薦值,從最近的一段歷史推薦值中挑選最大的,任何一個(gè)達(dá)到了都進(jìn)行擴(kuò)容。
上面HPA相關(guān)配置如下:
1)scaleTargetRef:自動(dòng)擴(kuò)容縮容的對(duì)象,可以是Deployment或者ReplicaSet,這里寫(xiě)具體的Deployment的名稱(chēng)。
2)metrics:這里是指標(biāo)的目標(biāo)值。在type中定義類(lèi)型;通過(guò)target來(lái)定義指標(biāo)的閾值,系統(tǒng)將在指標(biāo)達(dá)到閾值的時(shí)候出發(fā)擴(kuò)縮容操作。
3)可以指定資源度量指標(biāo)使用絕對(duì)數(shù)值或者百分比,需要將 target 類(lèi)型 AverageUtilization(百分比)替換成AverageValue(絕對(duì)數(shù)值),同時(shí)將target.averageUtilization替換成target.averageValue并設(shè)定相應(yīng)的值。百分比適用于cpu/內(nèi)存指標(biāo)。
4)metrics中的type有如下類(lèi)型:
  • Resource:基于資源的指標(biāo),可以是CPU或者是內(nèi)存,如果基于這個(gè)類(lèi)型的指標(biāo)來(lái)做只需要部署Metric-server即可,不需要部署自定義APISERVER。
  • Pods:基于Pod的指標(biāo),系統(tǒng)將對(duì)Deployment中的全部Pod副本指標(biāo)進(jìn)行平均值計(jì)算,如果是Pod則該指標(biāo)必須來(lái)源于Pod本身。
  • Object:基于Ingress或者其他自定義指標(biāo),比如ServiceMonitor。它的target類(lèi)型可以是Value或者AverageValue(根據(jù)Pod副本數(shù)計(jì)算平均值)。

7.2 壓測(cè)服務(wù)并驗(yàn)證HPA

以每秒200個(gè)請(qǐng)求的速度為podinfo服務(wù)加壓,
[root@ysgz-33 home]# ./bin/hey -n 10000 –q 2 -c 100 http://10.3.37.189:9898
一段時(shí)間后發(fā)現(xiàn)podinfo服務(wù)的pod數(shù)量增加了,撤掉加壓,過(guò)一會(huì)兒pod數(shù)量發(fā)生了縮減。
可以通過(guò)kubectl describe hpa 命令查看當(dāng)前影響HPA的各種狀態(tài)條件信息。
使用 autoscaling/v2beta2 格式的 HorizontalPodAutoscale時(shí),可以看到Kubernetes為 HPA設(shè)置的狀態(tài)條件(Status Conditions)。
這些狀態(tài)條件可以顯示當(dāng)前HPA是否能夠執(zhí)行擴(kuò)縮以及是否受到一定的限制。status.conditions字段展示了這些狀態(tài)條件:
  • AbleToScale表明HPA是否可以獲取和更新擴(kuò)縮信息,以及是否存在阻止擴(kuò)縮的各種回退條件。
  • ScalingActive表明HPA是否被啟用(即目標(biāo)的副本數(shù)量不為零)以及是否能夠完成擴(kuò)縮計(jì)算。當(dāng)這一狀態(tài)為False時(shí),通常表明獲取度量指標(biāo)存在問(wèn)題。
  • ScalingLimitted 表明所需擴(kuò)縮的值被HPA所定義的最大或者最小值所限制。(即已經(jīng)達(dá)到最大或者最小擴(kuò)縮值)


08

擴(kuò)展

本次測(cè)試使用的壓測(cè)工具安裝。
hey壓測(cè)工具安裝:
yum install golang -y
export GOROOT=/usr/lib/golang
export GOPATH=/home
# 生效配置:
source /etc/profile

cd /home
go get -u github.com/rakyll/hey
go install github.com/rakyll/hey
./bin/hey -n 10000 -q 10 -c 50 http://地址
使用域名時(shí),注意添加本地域名解析:

-n 請(qǐng)求次數(shù)

-q 請(qǐng)求速度

-c 請(qǐng)求并發(fā)數(shù)

09

總結(jié)

9.1 在集群中做了這樣一個(gè)配置后,集群可支持一個(gè)HPA中定義多種指標(biāo)(cpu/內(nèi)存,訪(fǎng)問(wèn)量及其他Prometheus能獲取的指標(biāo))實(shí)現(xiàn)HPA;
9.2 如果定義了多種指標(biāo),系統(tǒng)會(huì)根據(jù)CPU和pod的自定義指標(biāo)計(jì)算,在每個(gè)調(diào)度周期(默認(rèn)為30s)都會(huì)計(jì)算出一個(gè)縮放的推薦值并記錄下來(lái),在每次計(jì)算縮放值時(shí)都會(huì)查看歷史的推薦值,從最近的一段歷史推薦值中挑選最大的,任何一個(gè)達(dá)到了都進(jìn)行擴(kuò)容。 

 

 

END



本文作者:符 海

本文來(lái)源:IT那活兒(上海新炬王翦團(tuán)隊(duì))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/129487.html

相關(guān)文章

  • k8sHPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo)

    摘要:與通過(guò)來(lái)自定義監(jiān)控指標(biāo)自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。適配器刪除后綴并將度量標(biāo)記為計(jì)數(shù)器度量標(biāo)準(zhǔn)。負(fù)載測(cè)試完成后,會(huì)將部署縮到其初始副本您可能已經(jīng)注意到自動(dòng)縮放器不會(huì)立即對(duì)使用峰值做出反應(yīng)。 k8s與HPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo) 自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。 Kubernetes中的自...

    孫吉亮 評(píng)論0 收藏0
  • k8sHPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo)

    摘要:與通過(guò)來(lái)自定義監(jiān)控指標(biāo)自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。適配器刪除后綴并將度量標(biāo)記為計(jì)數(shù)器度量標(biāo)準(zhǔn)。負(fù)載測(cè)試完成后,會(huì)將部署縮到其初始副本您可能已經(jīng)注意到自動(dòng)縮放器不會(huì)立即對(duì)使用峰值做出反應(yīng)。 k8s與HPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo) 自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。 Kubernetes中的自...

    HollisChuang 評(píng)論0 收藏0
  • k8sHPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo)

    摘要:與通過(guò)來(lái)自定義監(jiān)控指標(biāo)自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。適配器刪除后綴并將度量標(biāo)記為計(jì)數(shù)器度量標(biāo)準(zhǔn)。負(fù)載測(cè)試完成后,會(huì)將部署縮到其初始副本您可能已經(jīng)注意到自動(dòng)縮放器不會(huì)立即對(duì)使用峰值做出反應(yīng)。 k8s與HPA--通過(guò) Prometheus adaptor 來(lái)自定義監(jiān)控指標(biāo) 自動(dòng)擴(kuò)展是一種根據(jù)資源使用情況自動(dòng)擴(kuò)展或縮小工作負(fù)載的方法。 Kubernetes中的自...

    ityouknow 評(píng)論0 收藏0
  • 容器監(jiān)控實(shí)踐—Custom Metrics

    摘要:自定義指標(biāo)由提供,由此可支持任意采集到的指標(biāo)。文件清單的,收集級(jí)別的監(jiān)控?cái)?shù)據(jù)監(jiān)控服務(wù)端,從拉數(shù)據(jù)并存儲(chǔ)為時(shí)序數(shù)據(jù)。本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 概述 上文metric-server提到,kubernetes的監(jiān)控指標(biāo)分為兩種: Core metrics(核心指標(biāo)):從 Kubelet、cAdvisor 等獲取度量數(shù)據(jù),再由metrics-server提供給 Dashboar...

    laznrbfe 評(píng)論0 收藏0
  • 容器監(jiān)控實(shí)踐—Custom Metrics

    摘要:自定義指標(biāo)由提供,由此可支持任意采集到的指標(biāo)。文件清單的,收集級(jí)別的監(jiān)控?cái)?shù)據(jù)監(jiān)控服務(wù)端,從拉數(shù)據(jù)并存儲(chǔ)為時(shí)序數(shù)據(jù)。本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 概述 上文metric-server提到,kubernetes的監(jiān)控指標(biāo)分為兩種: Core metrics(核心指標(biāo)):從 Kubelet、cAdvisor 等獲取度量數(shù)據(jù),再由metrics-server提供給 Dashboar...

    DangoSky 評(píng)論0 收藏0
  • 容器監(jiān)控實(shí)踐—Heapster

    摘要:還可以把數(shù)據(jù)導(dǎo)入到第三方工具展示或使用場(chǎng)景共同組成了一個(gè)流行的監(jiān)控解決方案原生的監(jiān)控圖表信息來(lái)自在中也用到了,將作為,向其獲取,作為水平擴(kuò)縮容的監(jiān)控依據(jù)監(jiān)控指標(biāo)流程首先從獲取集群中所有的信息。 概述 該項(xiàng)目將被廢棄(RETIRED) Heapster是Kubernetes旗下的一個(gè)項(xiàng)目,Heapster是一個(gè)收集者,并不是采集 1.Heapster可以收集Node節(jié)點(diǎn)上的cAdvis...

    DDreach 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<