作者 | 賢維 阿裡巴巴進階技術專家
導讀:Serverless Kubernetes 是阿裡雲容器服務團隊對未來 Kubernetes 演進方向的一種探索,通過對 Kubernetes 做減法,降低運維管理負擔,簡化叢集管理,讓 Kubernetes 從複雜到簡單。
背景
Kubernetes 作為通用的容器編排系統,承載了廣泛的應用和場景,包括 CI/CD,資料計算,線上應用,AI 等,然而由于其通用性和複雜性,管理一個 Kubernetes 叢集對于很多使用者而言還是充滿挑戰的,主要展現在:
- 學習成本高;
- 叢集運維管理成本高,包括節點管理、容量規劃,以及各種節點異常問題的定位;
- 計算成本在很多場景中沒有達到最優,比如對于一個定時運作 Jobs 的叢集,長期持有資源池對于使用者來說是浪費的行為,資源使用率不高。
對 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 | ASK |
---|---|---|
存儲 | 需要部署 aliyun-disk-controller/flexvolume | 無需部署(正在支援中) |
CNI 網絡 | 需要部署 terway/flannel daemonset | 無需部署,基于 vpc 網絡通信 |
coredns 服務發現 | 需要部署 2 個 coredns 副本 | 無需部署,基于 privatezone 通路 |
kube-proxy | 需要部署 kube-proxy daemonset | |
Ingress | 需要部署 nginx-ingress-controller | 無需部署,基于 SLB 七層轉發 |
免密拉取 ACR 鏡像 | 需要部署 acr-credential-helper | 無需部署,預設支援 |
sls 日志收集 | 需要部署 logtail daemonset | |
metrics 統計 | 需要部署 metrics-server | 無需部署,開箱即用 |
挂載 eip | 需要部署 terway | 無需部署,使用 annotaion 指定 |
雲盤随 pod 建立挂載 | 依賴 aliyun-disk-controller | |
彈性伸縮 | 需要部署 cluster-autoscaler | 無需部署 |
GPU 插件 | 需要部署 Nivida-docker |
綜上可以看到,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 環境及執行流水線建構
- 建立 Service
- 基于 privatezone 服務發現
- 建立 Ingress
- 使用 nginx ingress
- 使用 kaniko 自動化建構鏡像
- 使用虛拟節點
- 使用 GPU 容器執行個體
- pod 挂載 eip
- 使用鏡像快照加速啟動
- 收集 pod 日志到 sls
- 運作 Argo workflow
- 使用 vk-autoscaler
- ASK Examples
“ 阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”