容器服务kubernetes弹性伸缩高级用法
前言
近期,阿里云容器服務(wù)kubernetes發(fā)布了cluster-autoscaler的支持,開發(fā)者可以通過頁面簡單快捷的配置節(jié)點(diǎn)的彈性伸縮,支持普通實(shí)例、GPU實(shí)例以及競價(jià)實(shí)例幫助開發(fā)者實(shí)現(xiàn)架構(gòu)彈性和運(yùn)營成本之間的博弈。阿里云容器服務(wù)kubernetes的cluster-autoscaler的能力還有很多會(huì)陸續(xù)通過控制臺(tái)開放出來,對(duì)于cluster-autoscaler高級(jí)功能有強(qiáng)需求的開發(fā)者,也提供手動(dòng)配置的方式進(jìn)行實(shí)現(xiàn),那么接下來我們一起來看一下cluster-autoscaler支持的高級(jí)功能。
高級(jí)功能解析
在解析高級(jí)特性之前,我們首先要了解的是彈性伸縮的主要原理,在阿里云容器服務(wù)kubernetes中,通過頁面配置的伸縮規(guī)則會(huì)轉(zhuǎn)換為ESS(彈性伸縮服務(wù))中的伸縮組,主動(dòng)下發(fā)組件cluster-autoscaler,并將組ID作為參數(shù)傳遞給cluster-autoscaler,然后cluster-autoscaler會(huì)根據(jù)相應(yīng)的配置實(shí)現(xiàn)伸縮組的選擇以及具體彈出的實(shí)例規(guī)格。下發(fā)的cluster-autoscaler在命名空間kube-system下面,模板內(nèi)容如下:
可以看到在cluster-autoscaler的啟動(dòng)參數(shù)中包含了--node的參數(shù),里面配置了伸縮組的ID,cluster-autoscaler就是通過這個(gè)組ID來識(shí)別伸縮組信息并實(shí)現(xiàn)伸縮的。在了解了這些原理后,我們來看下怎么使用阿里云容器服務(wù)kubernetes提供的高級(jí)特性。阿里云容器服務(wù)kubernetes的cluster-autoscaler支持如下高級(jí)特性:
| 單可用區(qū)、多可用區(qū)支持 | 支持 |
| 普通實(shí)例(CPU)、異構(gòu)計(jì)算實(shí)例(GPU)、競價(jià)實(shí)例、神龍服務(wù)器 | 支持 |
| 多實(shí)例規(guī)格彈性伸縮配置 | 支持 |
| 定時(shí)伸縮、報(bào)警伸縮 | 支持 |
| 指定伸縮組調(diào)度 | 支持 |
| 自定義安裝腳本支持 | 支持 |
| ? | ? |
接下來我們針對(duì)上述的高級(jí)特性進(jìn)行一一解析:
單可用區(qū)、多可用區(qū)支持
阿里云容器服務(wù)kubernetes集群支持單可用區(qū)與多可用區(qū)兩種形式,多可用區(qū)的kubernetes集群可以具備更好的集群魯棒性,不會(huì)因?yàn)閱我豢捎脜^(qū)機(jī)房的宕機(jī)造成整個(gè)集群的不可用。那么多可用區(qū)的cluster-autoscaler有什么好處呢?多可用區(qū)的cluster-autoscaler可以提高實(shí)例彈性伸縮的成功率。因?yàn)樵瀑Y源是動(dòng)態(tài)調(diào)整的,每個(gè)地域每個(gè)可用區(qū)的庫存都會(huì)根據(jù)不同的時(shí)間不同的資源狀態(tài)進(jìn)行調(diào)整,同樣規(guī)格的實(shí)例可能在可用區(qū)A中可以生產(chǎn),但是在可用區(qū)B中無法生產(chǎn)。如果配置多個(gè)可用區(qū),那么就擁有了在多個(gè)可用區(qū)中彈出實(shí)例的可能,提高了彈性伸縮的成功率。
目前在控制臺(tái)上只支持單可用區(qū)的伸縮組配置,那么怎么創(chuàng)建一個(gè)具有多可用區(qū)的彈性伸縮組并使用呢,從上文我們了解到cluster-autoscaler只需要識(shí)別伸縮組ID即可,那么只需要?jiǎng)?chuàng)建一個(gè)新的伸縮組,并配置給cluster-autoscaler即可。
伸縮組中的其他配置,建議拷貝一個(gè)已有的伸縮做來設(shè)置,降低配置的難度。最后將這個(gè)伸縮組的ID配置到y(tǒng)aml中即可
多實(shí)例規(guī)格的支持
多實(shí)例規(guī)格可以獲得更好的伸縮成功率,而且結(jié)合競價(jià)實(shí)例可以獲得更優(yōu)的運(yùn)營成本節(jié)約,對(duì)于競價(jià)實(shí)例不了解的開發(fā)者,可以先參考下這篇文檔。多實(shí)例規(guī)格的支持方式非常簡單,我們可以無需新建伸縮組,只需修改已有的配置即可。通過容器服務(wù)彈性伸縮的頁面點(diǎn)擊進(jìn)入ESS的伸縮組配置。
點(diǎn)擊左側(cè)菜單的伸縮配置以及右側(cè)配置的修改按鈕,并添加希望加入的其他配置,此處需要特別注意的是容器的配置一定要保證規(guī)格一致,比如CPU和內(nèi)存的大小必須保持一致
配置完成點(diǎn)擊確認(rèn)配置即可生效。
定時(shí)伸縮與報(bào)警伸縮
定時(shí)伸縮是一個(gè)非常常見的伸縮場景,但是定時(shí)伸縮與cluster-autoscaler的伸縮策略是不完全相同的,那么如何實(shí)現(xiàn)呢。此處我們只需要依賴ESS(彈性伸縮服務(wù))即可,首先參考多可用的配置,先創(chuàng)建一個(gè)伸縮組。然后在這個(gè)伸縮組中設(shè)置彈出的伸縮規(guī)則。
在定時(shí)任務(wù)中設(shè)置任務(wù)配置,選擇伸縮組與伸縮規(guī)則,并設(shè)置執(zhí)行時(shí)間
?
此時(shí),就設(shè)置完成了一個(gè)定時(shí)的伸縮,如果需要周期性設(shè)置,那么可以勾選下放的重復(fù)周期設(shè)置。同理,可以設(shè)置縮容的規(guī)則,以及縮容的時(shí)間。對(duì)于報(bào)警伸縮而言,和定時(shí)伸縮配置方法是一致的,他們都無需依賴cluster-autoscaler來實(shí)現(xiàn)。
自定義安裝腳本
在講解如何定義安裝腳本之前,需要額外講解下一個(gè)ECS的機(jī)器是如何加入到集群中的,在伸縮配置的高級(jí)選項(xiàng)中有一個(gè)base64的自定義數(shù)據(jù),我們通過base64的解碼工具進(jìn)行解析,可以看到里面內(nèi)容如下:
#!/bin/sh curl http://aliacs-k8s-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/public/pkg/run/attach/1.10.4/attach_node.sh | bash -s -- --openapi-token [secret_token] --ess true --labels workload_type=spot上述的腳本的作用就是將一個(gè)ECS的節(jié)點(diǎn)加入到集群中的,我們自定義的安裝腳本可以添加到上述腳本后面,然后通過base64工具進(jìn)行加密,并貼回原來的自定義數(shù)據(jù)框內(nèi)即可。
最后
在本文中,給大家講解了如何使用cluster-autoscaler的高級(jí)特性來支持不同維度和場景的彈性伸縮,cluster-autoscaler也會(huì)在近期開源并提交給社區(qū)
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的容器服务kubernetes弹性伸缩高级用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站常见问题1分钟定位(三)| 如何使用
- 下一篇: Dubbo Mesh | 阿里巴巴中间件