亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享

Kubernetes的彈性伸縮(HPA)

2022-06-30 09:42:58
35
0

前言

在(zai)kubernetes中(zhong),我們使用(yong)pod對外(wai)提(ti)供服務。這(zhe)時候,我們需要以下(xia)兩種情形需要關(guan)注:

Pod因(yin)為不(bu)(bu)明(ming)原因(yin)掛(gua)掉,導(dao)致服務不(bu)(bu)可用

Pod在高負荷(he)的(de)情況(kuang)下(xia),不能(neng)支撐我們(men)的(de)服(fu)務

如(ru)果我們(men)人工(gong)(gong)監控pods,人工(gong)(gong)進行調整副(fu)本那么(me)這個工(gong)(gong)作量無疑(yi)是巨(ju)大的(de),但kubernetes已經有了(le)相應的(de)機制來(lai)應對(dui)了(le)。

HPA全稱Horizontal Pod Autoscaler控制器工作流程(V1版本)

更詳(xiang)細的介紹參考官方(fang)文(wen)檔(dang)Horizontal Pod Autoscaler

- 流程

創(chuang)建(jian)HPA資源對(dui)象,關聯(lian)對(dui)應(ying)資源例(li)如(ru)Deployment,設定(ding)目標CPU使用率閾值,最(zui)大(da),最(zui)小replica數量。

前提:pod一定要設置資源限制(zhi),參數(shu)request,HPA才(cai)會工作。

HPA控制器每隔15秒鐘(可(ke)以通(tong)過設(she)置controller manager的–horizontal-pod-autoscaler-sync-period參數設(she)定,默(mo)認15s)通(tong)過觀測metrics值獲取(qu)資源使用信息

HPA控(kong)制器將獲取資源使用信息與HPA設定值進行對比(bi),計(ji)算出需要調整的(de)副本數量

根(gen)據(ju)計算(suan)結果(guo)調整副本數量(liang),使得單個POD的CPU使用率盡量(liang)逼近期望值,但不能(neng)照顧設定的最(zui)大(da),最(zui)小值。

以上2,3,4周期(qi)循環

- 周期

HPA控(kong)制器觀(guan)測資源(yuan)使用(yong)率并(bing)作出決策(ce)是(shi)有周(zhou)期的(de),執(zhi)行(xing)是(shi)需要時間的(de),在執(zhi)行(xing)自動(dong)伸縮(suo)過程中metrics不(bu)是(shi)靜止不(bu)變的(de),可能(neng)(neng)降低或者升高,如果(guo)執(zhi)行(xing)太(tai)頻繁可能(neng)(neng)導致資源(yuan)的(de)使用(yong)快速(su)抖動(dong),因此(ci)控(kong)制器每次(ci)決策(ce)后的(de)一段時間內不(bu)再(zai)進行(xing)新的(de)決策(ce)。對(dui)于擴(kuo)容(rong)這個(ge)時間是(shi)3分鐘(zhong),縮(suo)容(rong)則(ze)是(shi)5分鐘(zhong),對(dui)應調整參數

 

--horizontal-pod-autoscaler-downscale-delay
--horizontal-pod-autoscaler-upscale-delay

自動伸縮不(bu)是一次到位的,而是逐漸逼近計算值(zhi),每(mei)次調(diao)整(zheng)不(bu)超過當(dang)前副本數量的2倍或者(zhe)1/2

本(ben)記錄是(shi)(shi)對kubernetes HPA功(gong)能的驗證,參考(kao)kubernetes官方文檔(dang)(dang),使用的是(shi)(shi)官方文檔(dang)(dang)提供的鏡像php-apache進行(xing)測試。

metrics server

kubernetes集群需(xu)要配置(zhi)好metrics server,配置(zhi)參考文(wen)檔Kubernetes部署metrics-server

 

配置HPA實現應用橫向擴展

1. 配置啟動deployment:php-apache

 

cat hpa-deployment.ymal

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
  labels:
    app: hpa-test
spec:
  replicas: 1
  selector:
    matchLabels:
      name: php-apache
      app: hpa-test
  template:
    metadata:
      labels:
        name: php-apache
        app: hpa-test
    spec:
      containers:
      - name: php-apache
        image: mirrorgooglecontainers/hpa-example:latest
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        resources:
          requests:
            cpu: 0.005
            memory: 64Mi
          limits:
            cpu: 0.05
            memory: 128Mi

 

2. 配置service: php-apache-svc

 

cat hpa-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: php-apache-svc
  labels:
    app: hpa-test
spec:
  selector:
    name: php-apache
    app: hpa-test
  ports:
  - name: http
    port: 80
    protocol: TCP

3. 配置hpa:php-apache-hpa

 

cat hpa-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache-hpa
  labels:
    app: hpa-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50

4. 啟動deployment,service,hpa,并驗證

 

# kubectl apply -f ./
deployment.apps/php-apache configured
service/php-apache-svc unchanged
horizontalpodautoscaler.autoscaling/php-apache-hpa unchanged

# kubectl get all
NAME                              READY   STATUS    RESTARTS   AGE
pod/php-apache-6b9f498dc4-vwlfr   1/1     Running   0          3h14m


NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   7d20h
service/php-apache-svc   ClusterIP   10.104.34.168   <none>        80/TCP    3h14m


NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/php-apache   1/1     1            1           3h14m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/php-apache-6b9f498dc4   1         1         1       3h14m


NAME                                                 REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/php-apache-hpa   Deployment/php-apache   20%/50%   1         10        1          3h14m

壓(ya)力測(ce)試(shi),觀察HPA效果

1.生成(cheng)一個壓(ya)測客戶端(duan),持續壓(ya)力測試

 

kubectl run --generator=run-pod/v1 -i --tty load-generator --image=busybox /bin/sh
# while true; do wget -q -O- //php-apache-svc.default.svc.cluster.local; done
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!

2.壓測一(yi)下(xia),觀察結(jie)果

 

kubectl get hpa
    NAME             REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   800%/50%   1         10        1          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        2          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        4          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        8          27m


kubectl get hpa
    NAME             REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   120%/50%   1         10        10         27m

kubectl get deployment php-apache
    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    php-apache   10/10   10           10          28m

結論:隨著壓(ya)力(li)測試進行,deployment下pod的(de)CPU使用率增加,超過HPA設(she)定的(de)百分比50%,之后逐次翻(fan)倍擴容replicaset。達到上限停(ting)止擴容。根據replicaset設(she)置(zhi)的(de)request QoS逐漸穩(wen)定資源(yuan)的(de)使用率。

 

3.停止壓測

 

while true; do wget -q -O- //php-apache-svc.default.svc.cluster.local; done
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!wget: can't connect to remote host (10.104.63.73): Connection refused
OK!OK!OK!OK!OK!OK!........OK!OK!OK! ^C
/ # exit
/ # Session ended, resume using 'kubectl attach load-generator -c load-generator -i -t' command when the pod is running

CPU使用(yong)率(lv)恢(hui)復到最(zui)初值(zhi)(zhi)20%,controller會周期觀測,逐次縮容到最(zui)小(xiao)值(zhi)(zhi)。

 

kubectl get hpa
	NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
	php-apache-hpa   Deployment/php-apache   20%/50%   1         10        10         36m

#等待幾分鐘之后(默認5分鐘),原因:
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        4          41m

#再次等待幾分鐘后(默認5分鐘)
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        2          46m

#再次等待幾分鐘后(默認5分鐘),穩定在最小副本數量
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        1          53m

其他

以上測試驗證了HPA功能,使用(yong)的(de)API版(ban)(ban)本是autoscaling/v1。通過kubectl api-versions可(ke)以查看到存在3個版(ban)(ban)本。v1版(ban)(ban)本只(zhi)支(zhi)持CPU,v2beta2版(ban)(ban)本支(zhi)持多metrics(CPU,memory)以及自定義metrics。基于(yu)autoscaling/v2beta2的(de)hpa yaml文件寫法

 

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache-hpa
  labels:
    app: hpa-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

 

———&mdash;—&mdash;——————————

版權(quan)聲明:本(ben)文為CSDN博主「把酒問(wen)蒼(cang)天(tian)」的原創文章(zhang),遵循(xun)CC 4.0 BY-SA版權(quan)協議,轉載請附上(shang)原文出處鏈接及本(ben)聲明。

原(yuan)文鏈接(jie)://blog.csdn.net/bjwf125/article/details/100702935

0條評論
0 / 1000
AE86上山了
55文章(zhang)數(shu)
18粉絲數
AE86上山了
55 文章 | 18 粉絲

Kubernetes的彈性伸縮(HPA)

2022-06-30 09:42:58
35
0

前言

在(zai)kubernetes中,我們(men)使用pod對外提(ti)供服(fu)務。這(zhe)時候,我們(men)需要(yao)以下兩種情(qing)形需要(yao)關注:

Pod因為不(bu)明原因掛掉,導(dao)致服務不(bu)可(ke)用

Pod在高負(fu)荷(he)的(de)(de)情況下,不能支(zhi)撐我們的(de)(de)服(fu)務

如果我們人工監控(kong)pods,人工進(jin)行(xing)調(diao)整副本(ben)那(nei)么這個工作量無疑是(shi)巨大(da)的(de),但kubernetes已經有(you)了相應(ying)的(de)機制來(lai)應(ying)對了。

HPA全稱Horizontal Pod Autoscaler控制器工作流程(V1版本)

更(geng)詳(xiang)細的介紹(shao)參考官(guan)方文檔Horizontal Pod Autoscaler

- 流程

創建HPA資源對(dui)象,關聯對(dui)應資源例如(ru)Deployment,設定(ding)目標CPU使(shi)用率(lv)閾值,最大(da),最小replica數(shu)量(liang)。

前提:pod一定要設置資(zi)源限制,參數(shu)request,HPA才會工作。

HPA控制器每(mei)隔(ge)15秒(miao)鐘(可以通過設置controller manager的–horizontal-pod-autoscaler-sync-period參數設定,默(mo)認15s)通過觀測metrics值獲(huo)取(qu)資源(yuan)使用信息

HPA控制(zhi)器(qi)將獲取(qu)資源使用(yong)信息(xi)與HPA設(she)定值進行對(dui)比,計算出需要調整(zheng)的副本數量

根(gen)據(ju)計算結果調整副(fu)本數量,使(shi)得單個POD的CPU使(shi)用率盡量逼近期望值,但(dan)不能照顧設定(ding)的最大,最小值。

以上(shang)2,3,4周(zhou)期循環(huan)

- 周期

HPA控制(zhi)器觀(guan)測資源使用率并作出決(jue)策(ce)是(shi)(shi)(shi)有周期的(de)(de),執(zhi)行(xing)是(shi)(shi)(shi)需要時間(jian)(jian)的(de)(de),在執(zhi)行(xing)自(zi)動伸縮過(guo)程中(zhong)metrics不是(shi)(shi)(shi)靜止不變的(de)(de),可能(neng)降低(di)或者升高,如(ru)果執(zhi)行(xing)太(tai)頻繁可能(neng)導致資源的(de)(de)使用快速抖動,因此控制(zhi)器每次(ci)決(jue)策(ce)后的(de)(de)一段時間(jian)(jian)內不再進行(xing)新的(de)(de)決(jue)策(ce)。對于擴容(rong)這個時間(jian)(jian)是(shi)(shi)(shi)3分鐘(zhong),縮容(rong)則(ze)是(shi)(shi)(shi)5分鐘(zhong),對應調整參數

 

--horizontal-pod-autoscaler-downscale-delay
--horizontal-pod-autoscaler-upscale-delay

自動伸縮(suo)不(bu)是(shi)一次到位的(de),而是(shi)逐漸逼(bi)近計(ji)算值(zhi),每次調整不(bu)超(chao)過當(dang)前副本數量的(de)2倍(bei)或者1/2

本記錄是(shi)對kubernetes HPA功(gong)能的驗證,參考kubernetes官方文檔,使(shi)用的是(shi)官方文檔提供的鏡像php-apache進行測(ce)試。

metrics server

kubernetes集群需(xu)要(yao)配(pei)置(zhi)好metrics server,配(pei)置(zhi)參考(kao)文(wen)檔Kubernetes部署metrics-server

 

配置HPA實現應用橫向擴展

1. 配置啟動deployment:php-apache

 

cat hpa-deployment.ymal

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
  labels:
    app: hpa-test
spec:
  replicas: 1
  selector:
    matchLabels:
      name: php-apache
      app: hpa-test
  template:
    metadata:
      labels:
        name: php-apache
        app: hpa-test
    spec:
      containers:
      - name: php-apache
        image: mirrorgooglecontainers/hpa-example:latest
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        resources:
          requests:
            cpu: 0.005
            memory: 64Mi
          limits:
            cpu: 0.05
            memory: 128Mi

 

2. 配置service: php-apache-svc

 

cat hpa-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: php-apache-svc
  labels:
    app: hpa-test
spec:
  selector:
    name: php-apache
    app: hpa-test
  ports:
  - name: http
    port: 80
    protocol: TCP

3. 配置hpa:php-apache-hpa

 

cat hpa-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache-hpa
  labels:
    app: hpa-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50

4. 啟動deployment,service,hpa,并驗證

 

# kubectl apply -f ./
deployment.apps/php-apache configured
service/php-apache-svc unchanged
horizontalpodautoscaler.autoscaling/php-apache-hpa unchanged

# kubectl get all
NAME                              READY   STATUS    RESTARTS   AGE
pod/php-apache-6b9f498dc4-vwlfr   1/1     Running   0          3h14m


NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   7d20h
service/php-apache-svc   ClusterIP   10.104.34.168   <none>        80/TCP    3h14m


NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/php-apache   1/1     1            1           3h14m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/php-apache-6b9f498dc4   1         1         1       3h14m


NAME                                                 REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/php-apache-hpa   Deployment/php-apache   20%/50%   1         10        1          3h14m

壓力(li)測試,觀(guan)察HPA效果

1.生成一個壓測客戶端,持續壓力測試

 

kubectl run --generator=run-pod/v1 -i --tty load-generator --image=busybox /bin/sh
# while true; do wget -q -O- //php-apache-svc.default.svc.cluster.local; done
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!

2.壓測一下,觀(guan)察結果

 

kubectl get hpa
    NAME             REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   800%/50%   1         10        1          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        2          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        4          27m

kubectl get hpa
    NAME             REFERENCE               TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   1000%/50%   1         10        8          27m


kubectl get hpa
    NAME             REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    php-apache-hpa   Deployment/php-apache   120%/50%   1         10        10         27m

kubectl get deployment php-apache
    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    php-apache   10/10   10           10          28m

結(jie)論:隨(sui)著壓力(li)測(ce)試進行,deployment下pod的(de)CPU使(shi)用率增(zeng)加,超過HPA設定的(de)百分(fen)比50%,之后逐次翻倍擴(kuo)容replicaset。達(da)到(dao)上限(xian)停止擴(kuo)容。根(gen)據(ju)replicaset設置的(de)request QoS逐漸穩定資(zi)源的(de)使(shi)用率。

 

3.停止壓測

 

while true; do wget -q -O- //php-apache-svc.default.svc.cluster.local; done
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!wget: can't connect to remote host (10.104.63.73): Connection refused
OK!OK!OK!OK!OK!OK!........OK!OK!OK! ^C
/ # exit
/ # Session ended, resume using 'kubectl attach load-generator -c load-generator -i -t' command when the pod is running

CPU使用率恢復到(dao)最(zui)初值20%,controller會周期觀測,逐次縮容(rong)到(dao)最(zui)小值。

 

kubectl get hpa
	NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
	php-apache-hpa   Deployment/php-apache   20%/50%   1         10        10         36m

#等待幾分鐘之后(默認5分鐘),原因:
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        4          41m

#再次等待幾分鐘后(默認5分鐘)
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        2          46m

#再次等待幾分鐘后(默認5分鐘),穩定在最小副本數量
kubectl get hpa
NAME             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache-hpa   Deployment/php-apache   20%/50%   1         10        1          53m

其他

以上測試(shi)驗證了HPA功(gong)能,使用(yong)的(de)API版(ban)(ban)本是(shi)autoscaling/v1。通過kubectl api-versions可以查看到存在3個版(ban)(ban)本。v1版(ban)(ban)本只支持(chi)CPU,v2beta2版(ban)(ban)本支持(chi)多(duo)metrics(CPU,memory)以及自定義metrics。基于autoscaling/v2beta2的(de)hpa yaml文件寫法

 

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache-hpa
  labels:
    app: hpa-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

 

—&mdash;——&mdash;———————————

版(ban)權聲明:本文為CSDN博主(zhu)「把酒問蒼天」的原創文章,遵(zun)循(xun)CC 4.0 BY-SA版(ban)權協(xie)議(yi),轉(zhuan)載請(qing)附上原文出處鏈接及(ji)本聲明。

原(yuan)文(wen)鏈接(jie)://blog.csdn.net/bjwf125/article/details/100702935

文章來自個人專欄
文章(zhang) | 訂閱
0條評論
0 / 1000
請輸入你的評論
2
0