日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HPA

發(fā)布時間:2024/3/7 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HPA 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

HPA


HPA的全稱為Horizontal Pod Autoscaling,它可以根據(jù)當前pod資源的使用率(如CPU、磁盤、內(nèi)存等),進行副本數(shù)的動態(tài)的擴容與縮容,以便減輕各個pod的壓力。當pod負載達到一定的閾值后,會根據(jù)擴縮容的策略生成更多新的pod來分擔壓力,當pod的使用比較空閑時,在穩(wěn)定空閑一段時間后,還會自動減少pod的副本數(shù)量

前提條件:系統(tǒng)應該能夠獲取當前Pod的資源使用情況(意思是可以執(zhí)行 kubectl top pod命令,并且能夠得到反饋信息)

heapster:這個組件之前是集成在k8s集群的,不過在1.12版本之后就被移除了。如果還想使用此功能,應該部署metricServer這個k8s集群資源使用情況的聚合器

要是想實現(xiàn)自動擴容縮容的功能,還需要部署heapster服務,而這個服務集成在Prometheus的MetricServer服務中,也就是說需要部署Prometheus服務,但是我們也可以直接部署heapster服務

實現(xiàn)Pod的擴容與縮容示例

因為heapster集成在MetricServer服務中,所以首先部署這個服務

1、首先安裝MerticServer服務,從Github上克隆項目

[root@master ~]# git clone https://github.com/kubernetes-incubator/metrics-server.git

2、修改yaml文件

[root@master ~]# vim metrics-server/deploy/kubernetes/metrics-server-deployment.yaml image: k8s.gcr.io/metrics-server-amd64:v0.3.1 #更換鏡像版本 //在44行添加 command: - /metrics-server - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP

3、下載metrics-server鏡像k8s.gcr.io/metrics-server-amd64:v0.3.1(因為國內(nèi)無法訪問k8s.gcr.io,所以采用以下辦法)

pull-google-container 工具腳本

[root@master ~]# vim pull-google.sh image=$1 echo $1 img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/_/-/g;s/anjia0532\./anjia0532\//g' | uniq | awk '{print ""$1""}'` echo "docker pull $img" docker pull $img echo "docker tag $img $image" docker tag $img $image [root@master ~]# chmod +x pull-google.sh && cp pull-google.sh /usr/local/bin/pull-google-container [root@master ~]# pull-google-container k8s.gcr.io/metrics-server-amd64:v0.3.1

4、將鏡像打包發(fā)給k8s各個節(jié)點

[root@master ~]# docker save > metrics-server-amd64.tar k8s.gcr.io/metrics-server-amd64:v0.3.1 [root@master ~]# scp metrics-server-amd64.tar node01:/root [root@master ~]# scp metrics-server-amd64.tar node02:/root [root@node01 ~]# docker load < metrics-server-amd64.tar [root@node02 ~]# docker load < metrics-server-amd64.tar

5、運行yaml文件

[root@master ~]# kubectl apply -f metrics-server/deploy/kubernetes/ clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created serviceaccount/metrics-server created deployment.apps/metrics-server created service/metrics-server created clusterrole.rbac.authorization.k8s.io/system:metrics-server created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created [root@master ~]# kubectl get pod -n kube-system metrics-server-849dcc6bb4-hr5xp 1/1 Running 0 13s

6、驗證

[root@master ~]# kubectl top node error: metrics not available yet #這里等一會就行 [root@master ~]# kubectl top pod -n kube-system metrics-server-849dcc6bb4-hr5xp NAME CPU(cores) MEMORY(bytes) metrics-server-849dcc6bb4-hr5xp 1m 13Mi [root@master ~]# kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master 56m 2% 1145Mi 66% node01 12m 0% 478Mi 27% node02 11m 0% 452Mi 26%

這里,我們使用一個測試鏡像,這個鏡像基于php-apache制作的docker鏡像,包含了一些可以運行cpu密集計算任務的代碼(模擬壓力測試)

[root@master ~]# kubectl run php-apache --image=mirrorgooglecontainers/hpa-example:latest --requests=cpu=200m --expose --port=80 [root@master ~]# kubectl get deployments. NAME READY UP-TO-DATE AVAILABLE AGE php-apache 1/1 1 1 33s [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE php-apache-794cdd478f-l9kxn 1/1 Running 0 6m27s [root@master ~]# kubectl top pod php-apache-794cdd478f-l9kxn NAME CPU(cores) MEMORY(bytes) php-apache-794cdd478f-l9kxn 0m 9Mi

創(chuàng)建HPA控制器

[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10 horizontalpodautoscaler.autoscaling/php-apache autoscaled [root@master ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 2m1s 限制cpu使用率不能超過50%,最少有一個Pod,最多有10個

實時監(jiān)控Pod的狀態(tài)

[root@master ~]# kubectl get pod -w NAME READY STATUS RESTARTS AGE php-apache-794cdd478f-l9kxn 1/1 Running 0 40m

創(chuàng)建一個應用,用來不停的訪問我們剛剛創(chuàng)建的php-apache的svc資源

[root@master ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh

進入Pod內(nèi),執(zhí)行此命令用來模擬訪問php-apache的svc資源

#對Pod進行死循環(huán)請求 / # while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

運行一段時間后查看pod的數(shù)量變化

NAME READY STATUS RESTARTS AGE load-generator-7d549cd44-xm98c 1/1 Running 1 25m php-apache-867f97c8cb-4r6sk 1/1 Running 0 19m php-apache-867f97c8cb-4rcpk 1/1 Running 0 13m php-apache-867f97c8cb-5pbxf 1/1 Running 0 16m php-apache-867f97c8cb-8htth 1/1 Running 0 13m php-apache-867f97c8cb-d94h9 0/1 ContainerCreating 0 13m php-apache-867f97c8cb-drh52 1/1 Running 0 18m php-apache-867f97c8cb-f67bs 0/1 ContainerCreating 0 17m php-apache-867f97c8cb-nxc2r 1/1 Running 0 19m php-apache-867f97c8cb-vw74k 1/1 Running 0 39m php-apache-867f97c8cb-wb6l5 0/1 ContainerCreating 0 15m

當停止死循環(huán)請求后,也并不會立即減少pod數(shù)量,會等一段時間后減少pod數(shù)量,防止流量再次激增。

至此,pod副本數(shù)量的自動擴縮容就實現(xiàn)了

[root@master ~]# kubectl get hpa -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 106%/50% 1 10 8 50m php-apache Deployment/php-apache 102%/50% 1 10 8 50m php-apache Deployment/php-apache 93%/50% 1 10 8 51m php-apache Deployment/php-apache 87%/50% 1 10 8 51m php-apache Deployment/php-apache 82%/50% 1 10 8 51m php-apache Deployment/php-apache 77%/50% 1 10 8 51m php-apache Deployment/php-apache 68%/50% 1 10 8 52m php-apache Deployment/php-apache 61%/50% 1 10 8 52m

資源限制


以下只是yaml文件中的一段,并不是整個yaml文件

基于Pod

kubernetes對資源的限制實際上是通過cgroup來控制的,cgroup是容器的一組用來控制內(nèi)核如何運行進程的相關屬性集合,針對內(nèi)存、cpu和各種設備都有對應的cgroup

默認情況下,Pod運行沒有cpu和內(nèi)存的限額,這意味著系統(tǒng)中的任何Pod將能夠想執(zhí)行該Pod所在的節(jié)點一樣,消耗足夠多的cpu和內(nèi)存,一般會針對某些應用的pod資源進行資源限制,這個資源限制通過resources的requeste和limits來實現(xiàn)

[root@master ~]# vim cgroup-pod.yaml spec:containers:- name: xxximagePullPolicy: Alwaysimage: xxxports:- protocol: TCPcontainerPort: 80resources:limits:cpu: "4"memory: 2Girequests:cpu: 260mmemory: 260Mi

requests:要分配的資源,limits為最高請求的資源值。可以簡單的理解為初始值和最大值

基于名稱空間


1)計算資源配額

[root@master ~]# vim compute-resources.yaml apiVersion: v1 kind: ResourceQuota metadata:name: compute-resources spec:hard:pods: "20"requests.cppu: "20"requests.memory: 100Gilimits.cpu: "40"limits.memory: 200Gi

2)配置對象數(shù)量配額限制

[root@master ~]# vim object-counts.yaml apiVersion: v1 kind: ResourceQuota metadata:name: object-counts spec:hard: configmaps: "10"persistentvolumeclaims: "4"replicationcontrollers: "20"secrets: "10"service.loadbalancers: "2"

3)配置CPU和內(nèi)存的LimitRange

[root@master ~]# vim limitRange.yaml apiVersion: v1 kind: LimiRange metadata:name: mem-limit-range spec:limits:- default:memory: 50Gicpu: 5defaultRequest:memory: 1Gicpu: 1type: Container

default即limit的值

defaultRequest即request的值

總結(jié)

以上是生活随笔為你收集整理的HPA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。