久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Kubernetes自動(dòng)縮放是什么

共計(jì) 6601 個(gè)字符,預(yù)計(jì)需要花費(fèi) 17 分鐘才能閱讀完成。

這篇文章主要介紹“Kubernetes 自動(dòng)縮放是什么”,在日常操作中,相信很多人在 Kubernetes 自動(dòng)縮放是什么問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Kubernetes 自動(dòng)縮放是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!

編者按

許多 Kubernetes 用戶,特別是那些企業(yè)級(jí)用戶,很快就遇到了對(duì)環(huán)境自動(dòng)縮放的需求。幸運(yùn)的是,Kubernetes Horizontal Pod Autoscaler(HPA)允許您將部署配置為以多種方式水平擴(kuò)展。使用 Kubernetes Autoscaling 的最大優(yōu)勢(shì)之一是您的集群可以跟蹤現(xiàn)有 Pod 的負(fù)載能力,并計(jì)算是否需要更多的 Pod。

Kubernetes Autoscaling

通過(guò)協(xié)調(diào)內(nèi)置的兩層可擴(kuò)展性,可以充分利用高效的 Kubernetes Autoscaling:

Pod 級(jí)別的自動(dòng)縮放:包括 Horizontal Pod Autoscaler(HPA)和 Vertical Pod Autoscaler(VPA); 兩者都可以擴(kuò)展容器的可用資源。

集群級(jí)別的自動(dòng)縮放:集群自動(dòng)調(diào)節(jié)器(CA)通過(guò)在必要時(shí)向上或向下擴(kuò)展集群內(nèi)的節(jié)點(diǎn)數(shù)來(lái)管理這種可擴(kuò)展性平面。

Kubernetes Autoscaling 詳情 Horizontal Pod Autoscaler(HPA)

HPA 會(huì)在集群中縮放 Pod 副本的數(shù)量。該操作由 CPU 或內(nèi)存觸發(fā),以根據(jù)需要向上或向下擴(kuò)展。但是,也可以根據(jù)各種外部的和自定義指標(biāo)(metrics.k8s.io,external.metrics.k8s.io 和 custom.metrics.k8s.io)來(lái)配置 HPA 以擴(kuò)展 Pod。

Vertical Pod Autoscaler(VPA)

VPA 主要用于有狀態(tài)服務(wù),它可根據(jù)需要為 Pod 添加 CPU 或內(nèi)存——它也適用于無(wú)狀態(tài)的 Pod。為了應(yīng)用這些更改,VPA 重新啟動(dòng) Pod 以更新新的 CPU 和內(nèi)存資源,這些資源可以配置為響應(yīng) OOM(內(nèi)存不足)事件而啟動(dòng)。重新啟動(dòng) Pod 的時(shí)候,VPA 始終確保根據(jù) Pod 分配預(yù)算(PDB)確定最小數(shù)量,您可以設(shè)置該資源分配最大和最小速率。

Cluster Autoscaler(CA)

第二層的自動(dòng)縮放涉及 CA,它在以下情況下自動(dòng)調(diào)整集群的大小:

由于集群中的容量不足,任何 Pod/ s 都無(wú)法運(yùn)行并進(jìn)入掛起狀態(tài)(在這種情況下,CA 將向上擴(kuò)展)。

集群中的節(jié)點(diǎn)在一段時(shí)間內(nèi)未得到充分利用,并且有可能遷移節(jié)點(diǎn)上的 Pod(在這種情況下,CA 將縮小)。

CA 進(jìn)行例行檢查以確定是否有任何 pod 因等待額外資源處于待定狀態(tài),或者集群節(jié)點(diǎn)是否未得到充分利用。如果需要更多資源,會(huì)相應(yīng)地調(diào)整 Cluster 節(jié)點(diǎn)的數(shù)量。CA 與云提供商交互以請(qǐng)求其他節(jié)點(diǎn)或關(guān)閉空閑節(jié)點(diǎn),并確保按比例放大的集群保持在用戶設(shè)置的限制范圍內(nèi)。它適用于 AWS,Azure 和 GCP。

將 HPA 和 CA 與 Amazon EKS 配合使用的 5 個(gè)步驟

本文提供了通過(guò)適用于 Kubernetes(Amazon EKS)集群的 Amazon Elastic 容器服務(wù),通過(guò) HPA 和 CA 安裝和自動(dòng)擴(kuò)展的分步指南。以下指南是兩個(gè)測(cè)試用例示例:

集群要求

滿足 EKS 集群要求的 Amazon VPC 和 一個(gè)安全組。

或者,為免手動(dòng)創(chuàng)建 VPC,AWS 提供了創(chuàng)建了 VPC 和 EKS 的 CloudFormation 模板

CloudFormation YAML 文件

應(yīng)用到集群的 EKS 角色

1. 根據(jù)官方指南創(chuàng)建一個(gè) AWS EKS 集群 (控制面板和和工作節(jié)點(diǎn)). 一旦你把工作節(jié)點(diǎn)以 auto scaling group 的形式啟動(dòng)了,它們會(huì)自動(dòng)向 EKS 集群注冊(cè),你就可以開(kāi)始部署 k8s 應(yīng)用了。

2. 部署度量服務(wù)器以便 HPA 能夠根據(jù) API 提供的 CPU/ 內(nèi)存數(shù)據(jù)自動(dòng)縮放 POD 副本的數(shù)量。metrics.k8s.io api 通常由 metrics-server(負(fù)責(zé)從 summary api 收集 cpu 和內(nèi)存度量)提供。

3. 把以下策略應(yīng)用到 EKS 創(chuàng)建的 worker 節(jié)點(diǎn)的 Role 上

{
  Version :  2012-10-17 ,
  Statement : [
 {
  Effect :  Allow ,
  Action : [
  autoscaling:DescribeAutoScalingGroups ,
  autoscaling:DescribeAutoScalingInstances ,
  autoscaling:DescribeLaunchConfigurations ,
  autoscaling:DescribeTags ,
  autoscaling:SetDesiredCapacity ,
  autoscaling:TerminateInstanceInAutoScalingGroup 
 ],
  Resource :  * 
 }
 ]
}

4. 部署 k8s CA 特性

根據(jù)你使用的 linux 發(fā)行版,你可能需要更新部署文件和證書(shū)路徑。例如,如果使用 AMI Linux,需要用 /etc/ssl/certs/ca-bundle.crt 替換 /etc/ssl/certs/ca-certificates.crt

5. 更新 CA 的部署 YAML 文件,找到指定的 AWS AG(k8s.io/cluster-autoscaler/ CLUSTER NAME 應(yīng)該包含真實(shí)的集群名稱)標(biāo)簽。同時(shí)更新 AWS_REGION 環(huán)境變量。

把以下 tag 添加到 AWS AG,以便 k8s 的 cluster autoscaler 能夠自動(dòng)識(shí)別 AWS AG:

k8s.io/cluster-autoscaler/enabled k8s.io/cluster-autoscaler/

Kubernetes Autoscaling 測(cè)試用例 #1

測(cè)試 k8s hpa 特性和 k8s ca 特性同時(shí)使用

要求:

一個(gè)運(yùn)行中的 eks 集群

安裝好 metric server

安裝了 k8s cluster autoscaler 特性

1. 部署一個(gè)測(cè)試 app,為 app 部署創(chuàng)建 HPA 資源。

2. 從不同的地理位置發(fā)起請(qǐng)求以增加負(fù)載。

3. HPA 應(yīng)該會(huì)隨著負(fù)載的增加開(kāi)始縮放 pod 的數(shù)量。它會(huì)根據(jù) hpa 資源指定的進(jìn)行縮放的。在某一時(shí)刻,新的 POD 在等待其他資源的時(shí)候會(huì)是等待狀態(tài)。

$ kubectl get nodes -w
NAME STATUS ROLES AGE VERSION
ip-192-168-189-29.ec2.internal Ready 1h v1.10.3
ip-192-168-200-20.ec2.internal Ready 1h v1.10.3
$ kubectl get Pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE
ip-192-168-200-20.ec2.internal
php-apache-8699449574-4mg7w 0/1 Pending 0 17m
php-apache-8699449574-64zkm 1/1 Running 0 1h 192.168.210.90 ip-192-168-200-20
php-apache-8699449574-8nqwk 0/1 Pending 0 17m
php-apache-8699449574-cl8lj 1/1 Running 0 27m 192.168.172.71 ip-192-168-189-29
php-apache-8699449574-cpzdn 1/1 Running 0 17m 192.168.219.71 ip-192-168-200-20
php-apache-8699449574-dn9tb 0/1 Pending 0 17m
...

4. CA 檢測(cè)到因?yàn)槿萘坎蛔愣M(jìn)入等待狀態(tài)的 pods,調(diào)整 AWS 自動(dòng)縮放組的大小。一個(gè)新的節(jié)點(diǎn)加入了:

$ kubectl get nodes -w
NAME STATUS ROLES AGE VERSION
ip-192-168-189-29.ec2.internal Ready 2h v1.10.3
ip-192-168-200-20.ec2.internal Ready 2h v1.10.3
ip-192-168-92-187.ec2.internal Ready 34s v1.10.3

5. HPA 能夠把等待狀態(tài)的 POD 調(diào)度到新的節(jié)點(diǎn)上了。平均 cpu 使用率低于指定的目標(biāo),沒(méi)有必要再調(diào)度新的 pod 了。

$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 40%/50% 2 25 20 1h $ kubectl get Pods -o wide -w
$ kubectl get Pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE
php-apache-8699449574-4mg7w 1/1 Running 0 25m 192.168.74.4 ip-192-168-92-187
php-apache-8699449574-64zkm 1/1 Running 0 1h 192.168.210.90 ip-192-168-200-20
php-apache-8699449574-8nqwk 1/1 Running 0 25m 192.168.127.85 ip-192-168-92-187
php-apache-8699449574-cl8lj 1/1 Running 0 35m 192.168.172.71 ip-192-168-189-29
...

6. 關(guān)閉幾個(gè) terminal,停掉一些負(fù)載

7. CPU 平均利用率減小了,所以 HPA 開(kāi)始更改部署里的 pod 副本數(shù)量并殺掉一些 pods

$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 47%/50% 2 20 7 1h 
$ kubectl get Pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE
php-apache-8699449574-v5kwf 1/1 Running 0 36m 192.168.250.0 ip-192-168-200-20
php-apache-8699449574-vl4zj 1/1 Running 0 36m 192.168.242.153 ip-192-168-200-20
php-apache-8699449574-8nqwk 1/1 Terminating 0 26m 192.168.127.85 ip-192-168-92-187
php-apache-8699449574-dn9tb 1/1 Terminating 0 26m 192.168.124.108 ip-192-168-92-187
php-apache-8699449574-k5ngv 1/1 Terminating 0 26m 192.168.108.58 ip-192-168-92-187
...

8. CA 檢測(cè)到一個(gè)節(jié)點(diǎn)未充分使用,正在運(yùn)行的 pod 能夠調(diào)度到其他節(jié)點(diǎn)上。

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-189-29.ec2.internal Ready 2h v1.10.3
ip-192-168-200-20.ec2.internal Ready 2h v1.10.3
ip-192-168-92-187.ec2.internal NotReady 23m v1.10.3
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-189-29.ec2.internal Ready 2h v1.10.3
ip-192-168-200-20.ec2.internal Ready 2h v1.10.3

9. 在向下縮放的時(shí)候,terminal 中應(yīng)該沒(méi)有明顯的 timeout

Kubernetes Autoscaling 測(cè)試用例 #2

測(cè)試在如果沒(méi)有足夠的 CPU 容量調(diào)度 pod 下,CA 是否能夠自動(dòng)調(diào)整集群的大小

要求:

一個(gè)運(yùn)行中的 aws eks 集群

Kubernetes ca 特性已安裝

1. 創(chuàng)建 2 個(gè)請(qǐng)求小于 1vcpu 的 deployment

$ kubectl run nginx --image=nginx:latest --requests=cpu=200m
$ kubectl run nginx2 --image=nginx:latest --requests=cpu=200m

2. 創(chuàng)建一個(gè)新的 deployment,請(qǐng)求比剩余的 cpu 更多的資源

$ kubectl run nginx3 --image=nginx:latest --requests=cpu=1

3. 新的 POD 會(huì)處于等待狀態(tài),因?yàn)闆](méi)有可用的資源:

$ kubectl get Pods -w
NAME READY STATUS RESTARTS AGE
nginx-5fcb54784c-lcfht 1/1 Running 0 13m
nginx2-66667bf959-2fmlr 1/1 Running 0 3m
nginx3-564b575974-xcm5t 0/1 Pending 0 41s

描述 pod 的時(shí)候,可能會(huì)看到?jīng)]有足夠的 cpu 的事件

$ kubectl describe Pod nginx3-564b575974-xcm5t
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 32s (x7 over 1m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu

4. CA 自動(dòng)調(diào)整集群的大小,新加了一個(gè)節(jié)點(diǎn)

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-142-179.ec2.internal Ready 1m v1.10.3  
ip-192-168-82-136.ec2.internal Ready 1h v1.10.3

5. 集群現(xiàn)在有了足夠的資源以運(yùn)行 pod

$ kubectl get Pods
NAME READY STATUS RESTARTS AGE
nginx-5fcb54784c-lcfht 1/1 Running 0 48m
nginx2-66667bf959-2fmlr 1/1 Running 0 37m
nginx3-564b575974-xcm5t 1/1 Running 0 35m

6. 兩個(gè)部署刪除了。一段時(shí)間后,CA 檢測(cè)到集群中的一個(gè)節(jié)點(diǎn)未被充分利用,運(yùn)行的 pod 可以安置到其他存在的節(jié)點(diǎn)上。AWS AG 更新,節(jié)點(diǎn)數(shù)量減 1。

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-82-136.ec2.internal Ready 1h v1.10.3 
$ kubectl get Pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-5fcb54784c-lcfht 1/1 Running 0 1h 192.168.98.139 ip-192-168-82-136

清除環(huán)境的步驟:

刪除添加到 eks worker 節(jié)點(diǎn)上 Role 的自定義策略

按照這個(gè)指南刪除這個(gè)集群

到此,關(guān)于“Kubernetes 自動(dòng)縮放是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)6601字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 万源市| 九龙城区| 高邑县| 洛扎县| 镇赉县| 五大连池市| 墨竹工卡县| 扬州市| 伊春市| 精河县| 永川市| 长沙县| 长寿区| 三河市| 嘉义县| 明光市| 彰化县| 正镶白旗| 内黄县| 囊谦县| 阿城市| 通海县| 阿尔山市| 本溪市| 科技| 杭锦后旗| 民丰县| 鄂温| 防城港市| 盐池县| 德保县| 封丘县| 阿拉善左旗| 周宁县| 寿阳县| 安顺市| 青阳县| 乐都县| 盐源县| 平遥县| 梅河口市|