K8S水平伸缩器 - 自动伸缩微服务实例数量
作者:justmine
頭條號:大數(shù)據(jù)達(dá)摩院
微信公眾號:大數(shù)據(jù)處理系統(tǒng)
創(chuàng)作不易,在滿足創(chuàng)作共用版權(quán)協(xié)議的基礎(chǔ)上可以轉(zhuǎn)載,但請以超鏈接形式注明出處。
為了方便大家閱讀,可以關(guān)注頭條號或微信公眾號,后續(xù)所有的文章將在移動端首發(fā),想學(xué)習(xí)更多云原生知識,請關(guān)注我。
前言
k8s已經(jīng)成為了容器管理和編排的標(biāo)準(zhǔn),當(dāng)應(yīng)用容器化到K8S后,如何根據(jù)服務(wù)器資源自動伸縮應(yīng)用,以應(yīng)對任何的突發(fā)流量。
請考慮如何實(shí)現(xiàn)以下應(yīng)用場景?
當(dāng)服務(wù)器高負(fù)載時(shí),自動擴(kuò)容應(yīng)用服務(wù)運(yùn)行數(shù)量;當(dāng)服務(wù)器低負(fù)載時(shí),自動縮減應(yīng)用服務(wù)運(yùn)行數(shù)量,以實(shí)現(xiàn)“合適規(guī)模”的應(yīng)用部署,從而更好地利用集群資源。
本篇就來演示K8S如何實(shí)現(xiàn)上面的場景。
準(zhǔn)備工作
安裝metrics-server
項(xiàng)目地址:
https://github.com/kubernetes-sigs/metrics-server
Kubernetes Metrics Server 是集群中資源使用情況數(shù)據(jù)的聚合器。
下載
wget https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz && tar -xzf v0.3.6.tar.gz;
部署
# Kubernetes 1.7$ kubectl create -f metrics-server-0.3.6/deploy/1.7/# Kubernetes > 1.8$ kubectl create -f metrics-server-0.3.6/deploy/1.8+/驗(yàn)證
kubectl get deployment metrics-server -n kube-system
演示
1、創(chuàng)建一個(gè)簡單的 Apache Web 服務(wù)器應(yīng)用程序
kubectl run httpd --image=httpd --requests=cpu=100m --limits=cpu=200m --expose --port=80
向此Apache Web服務(wù)器Pod提供100 millicpu和200 MB內(nèi)存,并在端口80上提供服務(wù)。
2、為 httpd 部署創(chuàng)建 Horizontal Pod Autoscaler 資源。
kubectl autoscale deployment httpd --cpu-percent=50 --min=1 --max=10
為Apache Web服務(wù)器創(chuàng)建50%CPU利用率的Autoscaler,并設(shè)置伸縮參數(shù),如下:
min(下限)=1:當(dāng)平均CPU負(fù)載低于50%時(shí),Autoscaler嘗試減少部署中的Pod數(shù)量,最低1個(gè)。
max(上限)=10:當(dāng)平均CPU負(fù)載大于50%時(shí),Autoscaler嘗試增加部署中的Pod數(shù)量,最高10個(gè)。
查看Autoscaler詳細(xì)信息,如下:
命令:kubectl describe hpa/httpd
3、模擬高負(fù)載
向Apache Web服務(wù)器并發(fā)50萬請求,命令如下:
kubectl run apache-bench -i --tty --rm --image=httpd -- ab -n 500000 -c 1000 http://httpd.default.svc.cluster.local/
輸出:
4、查看Apache Web服務(wù)器整個(gè)自動伸縮過程
kubectl get horizontalpodautoscaler.autoscaling/httpd --watch
從上面可以看出,當(dāng)服務(wù)器高負(fù)載時(shí),Pod數(shù)量從1擴(kuò)容到了10;當(dāng)服務(wù)器低負(fù)載時(shí),Pod數(shù)量從10又縮減到了1,這就是K8S的水平伸縮過程,也是K8S相對于傳統(tǒng)部署方式的突出優(yōu)勢。
總結(jié)
本篇演示了K8S的水平伸縮,這種伸縮方式非常適合于無狀態(tài)服務(wù),那么問題來了,如下:
如何伸縮有狀態(tài)服務(wù)呢?
答案:使用K8S的垂直伸縮器。
當(dāng)K8S集群資源不夠,如何進(jìn)行集群級別的伸縮呢?
答案:使用K8S的集群伸縮器。
欲知后事如何,請關(guān)注下回演示。
工欲善其事,必先利其器,K8S還有很多超能力,想學(xué)習(xí)更多K8S知識,及相關(guān)實(shí)踐,可以關(guān)注我。
參考
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/horizontal-pod-autoscaler.html
總結(jié)
以上是生活随笔為你收集整理的K8S水平伸缩器 - 自动伸缩微服务实例数量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dynatrace成功扩展kuberne
- 下一篇: SqlServer 利用游标批量更新数据