欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Kubernetes的彈性伸縮用法

如果我們?nèi)斯けO(jiān)控pods,人工進(jìn)行調(diào)整副本那么這個工作量無疑是巨大的,但kubernetes已經(jīng)有了相應(yīng)的機(jī)制來應(yīng)對了。

創(chuàng)新互聯(lián)主營溆浦網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),溆浦h5成都微信小程序搭建,溆浦網(wǎng)站營銷推廣歡迎溆浦等地區(qū)企業(yè)咨詢

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

更詳細(xì)的介紹參考官方文檔Horizontal Pod Autoscaler

  • 流程

    1. 創(chuàng)建HPA資源對象,關(guān)聯(lián)對應(yīng)資源例如Deployment,設(shè)定目標(biāo)CPU使用率閾值,最大,最小replica數(shù)量。
      前提:pod一定要設(shè)置資源限制,參數(shù)request,HPA才會工作。
    2. HPA控制器每隔15秒鐘(可以通過設(shè)置controller manager的–horizontal-pod-autoscaler-sync-period參數(shù)設(shè)定,默認(rèn)15s)通過觀測metrics值獲取資源使用信息
    3. HPA控制器將獲取資源使用信息與HPA設(shè)定值進(jìn)行對比,計(jì)算出需要調(diào)整的副本數(shù)量
    4. 根據(jù)計(jì)算結(jié)果調(diào)整副本數(shù)量,使得單個POD的CPU使用率盡量逼近期望值,但不能照顧設(shè)定的最大,最小值。
    5. 以上2,3,4周期循環(huán)
  • 周期
    1. HPA控制器觀測資源使用率并作出決策是有周期的,執(zhí)行是需要時間的,在執(zhí)行自動伸縮過程中metrics不是靜止不變的,可能降低或者升高,如果執(zhí)行太頻繁可能導(dǎo)致資源的使用快速抖動,因此控制器每次決策后的一段時間內(nèi)不再進(jìn)行新的決策。對于擴(kuò)容這個時間是3分鐘,縮容則是5分鐘,對應(yīng)調(diào)整參數(shù)
      --horizontal-pod-autoscaler-downscale-delay
      --horizontal-pod-autoscaler-upscale-delay
    2. 自動伸縮不是一次到位的,而是逐漸逼近計(jì)算值,每次調(diào)整不超過當(dāng)前副本數(shù)量的2倍或者1/2
      本記錄是對kubernetes HPA功能的驗(yàn)證,參考kubernetes官方文檔,使用的是官方文檔提供的鏡像php-apache進(jìn)行測試。
  • metrics server
    kubernetes集群需要配置好metrics server,配置參考文檔Kubernetes部署metrics-server

###配置HPA實(shí)現(xiàn)應(yīng)用橫向擴(kuò)展

  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,并驗(yàn)證

    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          3h24m

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    3h24m

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

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

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

###壓力測試,觀察HPA效果
>1.生成一個壓測客戶端,持續(xù)壓力測試

kubectl run --generator=run-pod/v1 -i --tty load-generator --image=busybox /bin/sh

while true; do wget -q -O- http://php-apache-svc.default.svc.cluster.local; done

OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!

>2.壓測一下,觀察結(jié)果

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

#####結(jié)論:隨著壓力測試進(jìn)行,deployment下pod的CPU使用率增加,超過HPA設(shè)定的百分比50%,之后逐次翻倍擴(kuò)容replicaset。達(dá)到上限停止擴(kuò)容。根據(jù)replicaset設(shè)置的request QoS逐漸穩(wěn)定資源的使用率。

>3.停止壓測

while true; do wget -q -O- http://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使用率恢復(fù)到最初值20%,controller會周期觀測,逐次縮容到最小值。

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

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

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

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

###其他
以上測試驗(yàn)證了HPA功能,使用的API版本是autoscaling/v1。通過kubectl api-versions可以查看到存在3個版本。v1版本只支持CPU,v2beta2版本支持多metrics(CPU,memory)以及自定義metrics。基于autoscaling/v2beta2的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

名稱欄目:Kubernetes的彈性伸縮用法
當(dāng)前鏈接:http://chinadenli.net/article2/ppdcic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司云服務(wù)器商城網(wǎng)站企業(yè)網(wǎng)站制作響應(yīng)式網(wǎng)站關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)