Serverless Kubernetes 容器服务介绍
作者 | 張維 阿里巴巴高級技術專家
導讀:Serverless Kubernetes 是以容器和 kubernetes 為基礎的 Serverless 服務,它提供了一種簡單易用、極致彈性、最優成本和按需付費的 Kubernetes 容器服務,其無需節點管理和運維,無需容量規劃,讓用戶更關注應用而非基礎設施的管理。我們可以把 Serverless Kubernetes 簡稱為 ASK。
Serverless 容器
首先從 Serverless 開始講起,相信我們已經熟知 Serverless 理念的核心價值,其中包括無需管理底層基礎設施,無需關心底層 OS 的升級和維護,因為 Serverless 可以讓我們更加關注應用開發本身,所以應用的上線時間更短。同時 Serverless 架構是天然可擴展的,當業務用戶數或者資源消耗增多時,我們只需要創建更多的應用資源即可,其背后的擴展性是用戶自己購買機器所無法比擬的。Serverless 應用一般是按需創建,用戶無需為閑置的資源付費,可以降低整體的計算成本。
以上所講的幾種都是 Serverless 理念的核心價值,也是 Serverless 容器與其他 Sererless 形態的相同之處。然而,Serverless 容器和其他 Serverless 形態的差異,在于它是基于容器的交付形態。
基于容器意味著通用性和標準性,我們可以 Build once and Run anywhere,容器不受語言和庫的限制,無論任何應用都可以制作成容器鏡像,然后以容器的部署方式啟動。基于容器的標準化,開源社區以 Kubernetes 為中心構建了豐富的云原生 Cloud Native 生態,極大地豐富了 Serverless 容器的周邊應用框架和工具,比如可以非常方便地部署 Helm Chart 包。基于容器和 Kubernetes 標準化,我們可以輕松地在不同環境中(線上線下環境),甚至在不同云廠商之間進行應用遷移,而不用擔心廠商鎖定。這些都是 Serverless 容器的核心價值。
(Serverless 容器產品 Landscape)
當下各大云廠商都推出了自己的 Serverless 容器服務,上圖為 Gartner 評估機構整理的 Serverless 容器產品 Landscape,其中阿里云有 Serverless Kubernetes ASK 和 ECI;AWS 有 Fargate,基于 Fargate 有 EKS on Fargate 和 ECS on Fargate 兩種形態;Azure 有 ACI。另外 Gartner 也預測,到 2023 年,將有 70% 的 AI 應用以容器和 Serverless 方式運行。
ASK/ACK on ECI 容器服務
下面介紹阿里云 Serverless 容器產品家族:ECI、 ACK on ECI 和 Serverless Kubernetes。
1. ECI
ECI 全稱是“Elastic Container Instance 彈性容器實例”,是 Serverless 容器的底層基礎設施,實現了容器鏡像的啟動。ECI 讓容器成為和 ECS 一樣的云上一等公民。ECI 底層運行環境基于安全容器技術進行強隔離,每個 ECI 擁有一個獨立的 OS 運行環境,保證運行時的安全性。ECI 支持 0.25c 到 64c 的 CPU 規格,也支持 GPU,按需創建按秒收費。和 ECS 一樣,ECI 也支持 Spot 可搶占式實例,在一些場景中可以節省 90% 的成本。ECI 實例的啟動時間目前約是 10s 左右,然后開始拉取容器鏡像。我們也提供了鏡像快照功能,每次容器啟動時從快照中讀取鏡像,省去遠端拉取的時間。值得強調的是,ECI 和 ECS 共用一個彈性計算資源池,這意味著 ECI 的彈性供給能力可以得到最大程度的充分保障,讓 ECI 用戶享受彈性計算資源池的規模化紅利。
ECI 只可以做到單個容器實例的創建,而沒有編排的能力,比如讓應用多副本擴容,讓 SLB 和 Ingress 接入 Pod 流量,所以我們需要在編排系統 Kubernetes 中使用 ECI,我們提供了兩種在 Kubernetes 中使用 ECI 的方式。一個是 ACK on ECI,另外一個是 ASK。
在與 Kubernetes 編排系統的集成中,我們以 Pod 的形式管理每個 ECI 容器實例,每個 Pod 對應一個 ECI 實例, ECI Pod 之間相互隔離,一個 ECI Pod 的啟動時間約是 10s。因為是在 Kubernetes 集群中管理 ECI Pod,所以完全連接了 Kubernetes 生態,有以下幾點體現:
- 很方便地用 Kubectl 管理 ECI Pod,可以使用標準的 Kubernetes 的 API 操作資源;
- 通過 Service 和 Ingress 連接 SLB 和 ECI Pod;
- 使用 Deployment / Statefulset 進行容器編排,使用 HPA 進行動態擴容;
- 可以使用 Proms 來監控 ECI Pod;
- 運行 Istio 進行流量管理,Spark / Presto 做數據計算,使用 Kubeflow 進行機器學習;
- 部署各種 Helm Chart。
這些都是使用 Kubernetes 管理容器實例的價值所在。
需要留意的是 Kubernetes 中的 ECI Pod 是 Serverless 容器,所以與普通的 Pod 相比,不支持一些功能(比如 Daemonset),不支持 Prividge 權限,不支持 HostPort 等。除此之外,ECI Pod 與普通 Pod 能力一樣,比如支持掛載云盤、NAS 和 OSS 數據卷等。
2. ACK on ECI
接下來我們看下在 ACK Kubernetes 集群中使用 ECI 的方式。這種方式適合于用戶已經有了一個 ACK 集群,集群中已經有了很多 ECS 節點,此時可以基于 ECI 的彈性能力來運行一些短時間 Short-Run 的應用,以解決元集群資源不足的問題,或者使用 ECI 來支撐應用的快速擴容,因為使用 ECI 進行擴容的效率要高于 ECS 節點擴容。
在 ACK on ECI 中,ECS 和 ECI Pod 可以互聯互通,ECI Pod 可以訪問集群中的 Coredns,也可以訪問 ClusterIP Service。
3. Serverless Kubernetes
與 ACK on ECI 不同的是,ASK Serverless Kubernetes 集群中沒有 ECS 節點,這是和傳統 Kubernetes 集群最主要的差異,所以在 ASK 集群中無需管理任何節點,實現了徹底的免節點運維環境,是一個純粹的 Serverless 環境,它讓 Kubernetes 的使用門檻大大降低,也丟棄了繁瑣的底層節點運維工作,更不會遇到節點 Notready 等問題。在 ASK 集群中,用戶只需關注應用本身,而無需關注底層基礎設施管理。
ASK 的彈性能力會優于普通 Kubernetes 集群,目前是 30s 創建 500 個 Pod 到 Running 狀態。集群中 ECI Pod 默認是按量收費,但也支持 Spot 和預留實例劵來降低成本。在兼容性方面,ASK 中沒有真實節點存在,所以不支持 Daemonset 等與節點相關的功能,像 Deployment / Statefulset / Job / Service / Ingress / CRD 等都是無縫支持的。
ASK 中默認的 Ingress 是基于 SLB 7 層轉發實現,用戶無需部署 Nginx Ingress,維護更加簡單。
同時基于 SLB 7 層我們實現了 Knative Serving 能力,其中 Knative Controller 被 ASK 托管,用戶無需負擔 Controller 的成本。
與 ACK 一樣,ASK 和 Arms / SLS 等云產品實現了很好的集成,可以很方便地對 Pod 進行監控,把 Pod 日志收集到 SLS 中。
這是 ASK 的整體架構,核心部分是 ASK-Schduler,它負責 Watch Pod 的變化,然后創建對應的 ECI 實例,同時把 ECI 實例狀態同步到 Pod。集群中沒有真實 ECS 節點注冊到 Apiserver。這個 Nodeless 架構解耦了 Kubernetes 編排層和 ECI 資源層,讓 Kubernetes 徹底擺脫底層節點規模導致的彈性和容量限制,成為面向云的 Nodeless Kubernetes 彈性架構。
ASK 典型功能
下面介紹 ASK 的幾個典型功能:
1. GPU 實例
第一個是 GPU 實例,在 Serverless 集群中使用 GPU 容器實例是一件非常簡單的事情,不需要安裝 GPU 驅動,只需要指定 GPU Pod 規格,以及容器需要的 GPU 卡數,然后就可以一鍵部署,這對于機器學習場景可以極大提高開發和測試的效率。
2. Spot 搶占式實例
第二個是 Spot 搶占式實例。搶占式實例是一種按需實例,可以在數據計算等場景中降低計算成本。搶占式實例創建成功后擁有一小時的保護周期。搶占式實例的市場價格會隨供需變化而浮動,我們支持兩種 Spot 策略,一種是完全根據市場出價,一種是指定價格上限,我們只需要給 Pod 加上對應的 Annotation 即可,使用方法非常簡單。
3. 彈性負載 Elastic Workload
第三個重要功能是彈性負載 Elastic Workload,彈性負載實現了 Deployment 多個副本調度在不同的單元上,比如 ECS、ECI 和 ECI-Spot 上,通過這種混合調度的模式,可以降低負載的計算成本。在這個示例中,Deployment 是 6 個副本,其中 2 個為正常的 ECI Pod,其他副本為 ECI-Spot 實例。
ASK 使用場景
上面我們已經對 Serverless Kubernetes 做了基本的產品和功能介紹,那么 ASK 適合在哪些場景中使用呢?**
1. 免運維應用托管
Serverless 集群最大的特點是解決了底層節點資源的運維問題,所以其非常適合對應用的免運維托管,讓用戶關注在應用開發本身。在傳統 K8s 集群中的應用可以無縫部署在 Serverless 集群中,包括各種 Helm Chart。同時結合預留實例劵可以降低 Pod 的長計算成本。
2. ECI 彈性資源池
第二個場景是 ACK on ECI 的優勢,我們可以選擇把 ECI 作為彈性資源池,加到已有的 Kubernetes 集群中,當應用業務高峰來臨時,通過 ECI 動態靈活地擴容,相比 ECS 節點擴容更有效率,這種比較適合電商或者在線教育這類有著明顯波峰波谷的業務場景,用戶無需管理一個很大的節點資源池,通過 ECI 彈性能力來降低整體計算成本。
3. 大數據計算
第三個場景是大數據計算,很多用戶使用 Serverless 集群或者 ACK on ECI 來進行 Spark / Presto / AI 等數據計算或者機器學習,利用 ECI 可以輕松解決資源規劃和不足的問題。
4. CI/CD 持續集成
第四個場景是 CI/CD 持續集成,將 Jenkins 和 Gitlab-Runner 對接 ASK 集群,按需創建 CI/CD 構建任務,構建完成后直接部署到 ASK 測試環境進行驗證,這樣我們無需為 Job 類任務維護一個固定資源池,按需創建極大降低成本,另外如果結合 Spot 實例還能進一步降低成本。
以上就是 Serverless Kubernetes 集群的典型場景,另有快速使用鏈接、產品文檔以及使用示例,供大家學習交流:
- 控制臺:https://cs.console.aliyun.com/ask
- 產品文檔:https://www.alibabacloud.com/help/doc-detail/86366.htm
- 示例:https://github.com/AliyunContainerService/serverless-k8s-examples
總結
以上是生活随笔為你收集整理的Serverless Kubernetes 容器服务介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Serverless Kubernete
- 下一篇: 低成本运行 Spark 数据计算