EDAS支持在ECS集群和K8s集群中部署應用,兩種環境都能滿足應用托管的需求,但功能上也存在一定的差異。如果您處于技術選型或架構遷移過程中,對于選擇使用哪種環境來管理應用存在疑惑,本文為您提供一些選擇環境的建議和兩種環境的功能對比,以幫助您完成決策。
部署環境簡介
EDAS為應用提供了ECS和K8s兩種集群部署環境。
ECS集群和K8s集群都支持Spring Cloud、Dubbo和HSF微服務框架的Java應用的托管、服務治理及可觀測性。
僅K8s集群支持多語言應用的托管、服務治理及可觀測性。
另外,這兩種部署環境對于應用程序本身和用戶技術棧的要求是不一樣的,且EDAS提供的應用管理能力也有所區別。
部署環境選擇建議
一般情況下,建議使用K8s環境部署應用。EDAS與阿里云容器服務Kubernetes版進行了深度整合,提供了豐富的應用管理功能,可以實現更高的資源利用率。
您根據實際使用場景,來選擇合適的環境。
場景 | 環境 |
| K8s環境 |
| ECS環境 |
如果您已經使用了ECS環境來管理應用,現在需要使用K8s提供的高級功能,可以將應用遷移至K8s環境。
應用托管功能對比
下表列出了ECS環境和K8s兩個環境的功能對比,Y代表支持,N代表不支持。
功能 | ECS環境 | K8s環境 | 備注 |
部署應用 | Y | Y | K8s環境支持更豐富的實例調度策略,支持單機多部署。 |
啟動應用 | Y | Y | 無 |
停止應用 | Y | Y | 無 |
刪除應用 | Y | Y | 無 |
應用擴縮容 | Y | Y | 無 |
重置應用 | Y | N | K8s環境無需此功能,刪除Pod即為重置。 |
容器升降級 | Y | Y | 無 |
應用回滾 | Y | Y | 無 |
自動水平擴容 | Y | Y | 支持方式和規則有所區別。 |
定時彈性 | N | Y | 無 |
分批部署 | Y | Y | 無 |
應用分組 | Y | N | 無 |
應用分組配置 | Y | N | 無 |
實時日志 | Y | Y | 無 |
日志目錄 | Y | Y | 無 |
SLS日志 | Y | Y | 無 |
負載均衡 | Y | Y | 無 |
健康檢查 | Y | Y | K8s環境支持Readiness和Liveness探針,與ECS環境不同。 |
JVM參數配置 | Y | Y | 無 |
Tomcat配置 | Y | Y | 無 |
生命周期掛鉤 | Y | Y | K8s環境支持PostStart和PreStop掛鉤,與ECS不同。 |
環境變量 | Y | Y | 無 |
金絲雀發布(灰度發布) | Y | Y | 無 |
流量監控 | Y | Y | 無 |
限流降級 | Y | Y | K8s環境可實現無侵入接入。 |
服務列表查詢 | Y | Y | 無 |
配置推送 | Y | Y | 無 |
事件中心 | Y | Y | 無 |
通知報警 | Y | Y | 無 |
應用診斷 | Y | Y | K8s(Kubernetes)具備更為強大的一體化監管控與診斷能力。 |
資源代購 | Y | N | 無 |
服務網格 | N | Y | 無 |
鏡像部署支持 | N | Y | 無 |
多語言支持 | N | Y | 無 |
NAS支持 | N | Y | 無 |
常見問題
ECS環境能否支持單節點部署多應用實例?
不支持,如有此需求,請使用K8s環境。
ECS環境能否支持部署多語言應用?
不支持,如有此需求,請使用K8s環境。
ECS環境和K8s環境對應的OpenAPI接口是否相同?
不完全相同。OpenAPI列表,請參見API概覽。
ECS環境和K8s環境是否都支持使用開發者工具?
都支持,但配置有所區別,需要注意區分。
Cloud Toolkit的更多信息,請參見Cloud Toolkit概述。
Maven Plugin的更多信息,請參見toolkit-maven-plugin概述。
Terraform的更多信息,請參見Terraform概述。
Jenkins的更多信息,請參見Jenkins概述。
ECS和K8s環境是否都支持云效?
都支持。云效2020支持ECS和K8s環境部署。
云效舊版本僅支持ECS環境部署,如果需要K8s環境部署請遷移至云效2020。更多信息,請參見老版云效(RDC)遷移須知。
云效2020支持ECS和K8s環境部署。更多信息,請參見云效流水線 Flow。
K8s環境如何實現節點資源的代購擴容?
K8s環境對應的彈性伸縮功能是指Pod的彈性伸縮,正常情況下不會購買新的ECS實例(節點),也不會釋放已有的實例(節點)。
可以配合容器服務提供的功能來實現節點的彈性伸縮。更多信息,請參見節點自動伸縮。
如果使用ECS環境的掛載腳本功能,如何遷移至K8s環境?
ECS應用的掛載腳本用于在發布單執行到特定階段時執行指定的命令,目前有4個生命周期階段可供掛載,分別是準備實例、啟動應用、停止應用和銷毀實例。
由于K8s環境提供的生命周期掛鉤僅限于PostStart和PreStop,與ECS應用無法完全對應,因此在遷移使用了掛載腳本功能的應用到K8s環境時,需要做一定的修改。
準備實例階段前的掛載腳本,可以將其編排到Dockerfile,并固定到鏡像中。
啟動應用階段前的掛載腳本,也可以將其編排到Dockerfile,并固定到鏡像中。
Pod的準備實例與啟動應用是一個過程。
啟動階段后的掛載腳本,可以配置到PostStart掛鉤中。
停止實例階段前的掛載腳本,可以配置到PreStop掛鉤中。
停止實例階段后的掛載腳本,建議在應用進程的優雅停止過程中做清理工作(比如在Java的ShutdownHook或者其他對于sigterm信號的監聽流程中做清理),也可以視情況將其移動到PreStop掛鉤中處理。
銷毀實例階段前的掛載腳本,建議在應用進程的優雅停止過程中做清理工作(比如在Java的ShutdownHook或者其他對于sigterm信號的監聽流程中做清理),也可以視情況將其移動到PreStop掛鉤中處理。
Pod的銷毀實例與停止實例是一個過程。