1. 程式人生 > >容器服務kubernetes彈性伸縮高階用法

容器服務kubernetes彈性伸縮高階用法

前言

近期,阿里雲容器服務kubernetes釋出了cluster-autoscaler的支援,開發者可以通過頁面簡單快捷的配置節點的彈性伸縮,支援普通例項、GPU例項以及競價例項幫助開發者實現架構彈性和運營成本之間的博弈。阿里雲容器服務kubernetes的cluster-autoscaler的能力還有很多會陸續通過控制檯開放出來,對於cluster-autoscaler高階功能有強需求的開發者,也提供手動配置的方式進行實現,那麼接下來我們一起來看一下cluster-autoscaler支援的高階功能。

高階功能解析

在解析高階特性之前,我們首先要了解的是彈性伸縮的主要原理,在阿里雲容器服務kubernetes中,通過頁面配置的伸縮規則會轉換為ESS(彈性伸縮服務)中的伸縮組,主動下發元件cluster-autoscaler,並將組ID作為引數傳遞給cluster-autoscaler,然後cluster-autoscaler會根據相應的配置實現伸縮組的選擇以及具體彈出的例項規格。下發的cluster-autoscaler在名稱空間kube-system下面,模板內容如下:

clipboard.png

可以看到在cluster-autoscaler的啟動引數中包含了--node的引數,裡面配置了伸縮組的ID,cluster-autoscaler就是通過這個組ID來識別伸縮組資訊並實現伸縮的。在瞭解了這些原理後,我們來看下怎麼使用阿里雲容器服務kubernetes提供的高階特性。阿里雲容器服務kubernetes的cluster-autoscaler支援如下高階特性:

clipboard.png

接下來我們針對上述的高階特性進行一一解析:

單可用區、多可用區支援

阿里雲容器服務kubernetes叢集支援單可用區與多可用區兩種形式,多可用區的kubernetes叢集可以具備更好的叢集魯棒性,不會因為單一可用區機房的宕機造成整個叢集的不可用。那麼多可用區的cluster-autoscaler有什麼好處呢?多可用區的cluster-autoscaler可以提高例項彈性伸縮的成功率。因為雲資源是動態調整的,每個地域每個可用區的庫存都會根據不同的時間不同的資源狀態進行調整,同樣規格的例項可能在可用區A中可以生產,但是在可用區B中無法生產。如果配置多個可用區,那麼就擁有了在多個可用區中彈出例項的可能,提高了彈性伸縮的成功率。

目前在控制檯上只支援單可用區的伸縮組配置,那麼怎麼建立一個具有多可用區的彈性伸縮組並使用呢,從上文我們瞭解到cluster-autoscaler只需要識別伸縮組ID即可,那麼只需要建立一個新的伸縮組,並配置給cluster-autoscaler即可。

clipboard.png

伸縮組中的其他配置,建議拷貝一個已有的伸縮做來設定,降低配置的難度。最後將這個伸縮組的ID配置到yaml中即可

clipboard.png

多例項規格的支援

多例項規格可以獲得更好的伸縮成功率,而且結合競價例項可以獲得更優的運營成本節約,對於競價例項不瞭解的開發者,可以先參考下這篇文件。多例項規格的支援方式非常簡單,我們可以無需新建伸縮組,只需修改已有的配置即可。通過容器服務彈性伸縮的頁面點選進入ESS的伸縮組配置。

clipboard.png

點選左側選單的伸縮配置以及右側配置的修改按鈕,並新增希望加入的其他配置,此處需要特別注意的是容器的配置一定要保證規格一致,比如CPU和記憶體的大小必須保持一致

clipboard.png

clipboard.png

配置完成點選確認配置即可生效。

定時伸縮與報警伸縮

定時伸縮是一個非常常見的伸縮場景,但是定時伸縮與cluster-autoscaler的伸縮策略是不完全相同的,那麼如何實現呢。此處我們只需要依賴ESS(彈性伸縮服務)即可,首先參考多可用的配置,先建立一個伸縮組。然後在這個伸縮組中設定彈出的伸縮規則。

clipboard.png

在定時任務中設定任務配置,選擇伸縮組與伸縮規則,並設定執行時間

clipboard.png

此時,就設定完成了一個定時的伸縮,如果需要週期性設定,那麼可以勾選下放的重複週期設定。同理,可以設定縮容的規則,以及縮容的時間。對於報警伸縮而言,和定時伸縮配置方法是一致的,他們都無需依賴cluster-autoscaler來實現。

自定義安裝指令碼

在講解如何定義安裝指令碼之前,需要額外講解下一個ECS的機器是如何加入到叢集中的,在伸縮配置的高階選項中有一個base64的自定義資料,我們通過base64的解碼工具進行解析,可以看到裡面內容如下:

clipboard.png

上述的指令碼的作用就是將一個ECS的節點加入到叢集中的,我們自定義的安裝指令碼可以新增到上述指令碼後面,然後通過base64工具進行加密,並貼回原來的自定義資料框內即可。

最後

在本文中,給大家講解了如何使用cluster-autoscaler的高階特性來支援不同維度和場景的彈性伸縮,cluster-autoscaler也會在近期開源並提交給社群,有需求或者問題可以提交issues到github(https://github.com/AliyunCont...

本文作者:莫源

閱讀原文