背景
Kubernetes作為通用的容器編排系統,承載了廣泛的應用和場景,包括CI/CD,數據計算,在線應用,AI等,然而由於其通用性和復雜性,管理一個kubernetes集群對於很多用戶而言還是充滿挑戰的,主要體現在:
- 學習成本高;
- 集群運維管理成本高,包括節點管理、容量規划,以及各種節點異常問題的定位;
- 計算成本在很多場景中沒有達到最優,比如對於一個定時運行Jobs的集群,長期持有資源池對於用戶來說是浪費的行為,資源利用率不高。
Serverless Kubernetes是阿里雲容器服務團隊對未來kubernetes演進方向的一種探索,通過對kubernetes做減法,降低運維管理負擔,簡化集群管理,讓kubernetes從復雜到簡單。
對Kubernetes集群做減法
無節點管理
我們相信未來用戶會更加關注應用的開發,而不是基礎設施的維護。體現在kubernetes集群中,我們希望用戶能夠關注在pod/service/ingress/job等應用編排語義上,對底層node則可以減少關注。
無需管理節點也可以顯著降低集群的運維管理成本,經統計kubernetes常見的異常問題中大多數與節點相關,比如Node NotReady問題,也無需擔憂Node的安全問題,以及基礎系統軟件的升級和維護。
在ASK集群中,我們使用虛擬節點virtual-kubelet代替ecs節點,虛擬節點的容量可以認為是“無限大”,用戶不需要為集群的容量擔憂,無需預先做容量規划。
無Master管理
和ACK托管版一樣,ASK的Master(apiserver, ccm, kcm等)資源被容器服務平台托管,用戶無需管理這些核心組件的升級和運維,也不用付出成本。
極簡的k8s基礎運行環境
除了無需管理節點和Master外,我們還對kubernetes集群管理做了大量簡化,包括默認托管很多addon,用戶無需再管理一些基礎的addon,也不需要為這些addon付費。依賴阿里雲原生的網絡和存儲等能力,以及獨特的托管架構設計,我們提供了極度簡化但功能完備的kubernetes基礎運行環境。
綜上可以看到,ACK集群至少需要2台ecs機器以運行這些基本的Addon,而ASK集群把這些基礎Addon化為無形,可以達到0成本創建一個開箱可用的kubernetes集群。
簡化彈性伸縮
因為無需管理節點和容量規划,因此當集群需要擴容時也就不需要考慮節點層面的擴容,只需要關注pod的擴容,
這對於擴容的速度和效率都是極大的提升,目前一些客戶指定使用ASK/ECI的方式來快速應對業務流量高峰。
當前ASK/ECI支持30s完全啟動500個pod(至Running狀態),單個pod啟動可以達到10s以內。
更低成本
除去ASK集群本身的低成本創建外,pod的按需使用也讓很多場景下資源利用率達到最優。對於很多Jobs或者數據計算場景而言,用戶並不需要長期維護一個固定的資源池,這時ASK/ECI可以很好的支持這些訴求。
經驗證,當pod一天中運行時間少於16個小時,則ASK/ECI的方式相比保有ecs資源池更節省經濟成本。
ECI:快速交付容器資源的彈性計算服務
談起ASK,一定會談到ASK的資源底座ECI。ECI是阿里雲基於ECS IaaS資源池提供的穩定、高效、高彈性容器實例服務。ECI讓容器成為了公有雲的第一等公民,用戶無需購買和管理ecs就可以直接部署容器應用,這種簡化的容器實例產品形態和ASK形成了一個完美的組合。
用戶可以直接使用ECI Open API創建容器實例資源,但在容器場景中用戶普遍需要一個編排系統,來負責容器的調度、高可用編排等能力,而ASK正是這樣的kubernetes編排層。
對於ASK而言,ECI讓ASK容器服務免去了搭建后台計算資源池的必要,更不用為底層計算資源池的容量而擔憂。基於ECI就意味着基於整個阿里雲IaaS規模化資源池,天然擁有了庫存和彈性優勢(比如可以通過Annotation的方式指定底層eci對應的ecs規格,大部分ecs規格都可以在ASK中使用,滿足多種計算場景的需求)。另外ECI和ECS復用資源池意味着我們可以最大化釋放規模化紅利,給用戶提供更低成本的計算服務。
容器生態支持
ASK對kubernetes容器生態提供了完善的支持,目前已有大量客戶使用ASK來支撐如下各種場景。
- CI/CD:gitlab-runner,jenkins/jenkins-x
- 數據計算:spark/spark-operator,flink,presto,argo
- AI:tensorflow/arena
- ServiceMesh: istio,knative
- 測試:locust,selenium
ASK集群不支持Helm v2,近期ACK/ASK會發布Helm v3的支持,之后用戶可以非常方便的在ASK集群中部署Charts。
更多ASK參考文檔
- 快速部署jenkins環境及執行流水線構建:https://yq.aliyun.com/articles/685219
- 創建Service:https://help.aliyun.com/document_detail/86397.html
- 基於privatezone服務發現:https://help.aliyun.com/document_detail/141685.html
- 創建Ingress:https://help.aliyun.com/document_detail/86398.html
- 使用nginx ingress:https://yq.aliyun.com/articles/727019
- sls日志收集: https://help.aliyun.com/document_detail/86402.html
- 使用kaniko自動化構建鏡像:https://yq.aliyun.com/articles/693541
- 使用虛擬節點:https://help.aliyun.com/document_detail/118970.html
- 使用GPU容器實例:https://help.aliyun.com/document_detail/119191.html
- pod掛載eip:https://help.aliyun.com/document_detail/119199.html
- 使用鏡像快照加速啟動:https://help.aliyun.com/document_detail/141241.html
- 收集pod日志到sls:https://help.aliyun.com/document_detail/131598.html
- 運行Argo workflow:https://yq.aliyun.com/articles/727132
- 使用vk-autoscaler: https://help.aliyun.com/document_detail/131590.html
ASK Examples: https://github.com/AliyunContainerService/serverless-k8s-examples
本文作者:賢維
本文為阿里雲內容,未經允許不得轉載。