本文介紹部署在K8s集群上的應用在不同階段需要注意的事項,以及如何實現在第一時間獲得EDAS的發布動態。
應用開發
您可以使用不同的開發者工具來開發應用,幫助您提升開發和部署效率。
應用部署與聯調
Cloud Toolkit
Cloud Toolkit是阿里云為開發者在IDEA中提供的一款插件,用于幫助開發者提升開發效率,并將應用部署到EDAS中。相關文檔,請參見Cloud Toolkit概述。
toolkit-maven-plugin
toolkit-maven-plugin插件可以幫助應用實現自動化部署。相關文檔,請參見toolkit-maven-plugin概述。
持續集成與部署
Jenkins
Jenkins是一個開源工具,幫助開發者持續、自動的構建和測試軟件項目、監控外部任務的運行。相關文檔,請參見Jenkins概述。
云效
阿里云云效支持公共云、專有云和混合云多種部署形態,提供了靈活易用的持續集成、持續驗證和持續發布功能,能夠幫助開發者快速將應用部署至EDAS。相關文檔,請參見概述。
搭建云基礎環境
Terraform
Terraform是一個開源工具,幫助開發者在阿里云安全高效地預配和管理云基礎結構。相關文檔,請參見Terraform概述。
應用部署
此處僅介紹應用部署中需要注意的事項。如需了解應用部署的更多信息,請參見創建和部署應用概述。
應用基本信息
如果選擇鏡像部署方式,建議使用容器鏡像服務企業版(ACR EE)管理鏡像。
容器鏡像服務企業版相對于個人版有以下優勢:
提升應用鏡像的分發效率。
支持鏡像安全掃描及多維度漏洞報告,保障存儲及內容安全。
提供應用鏡像的網絡訪問控制,保障應用鏡像訪問安全。
更多關于容器鏡像服務的信息,請參見什么是容器鏡像服務ACR。
關于如何制作應用鏡像并上傳到容器鏡服務,請參見制作應用鏡像。
應用配置信息
建議為應用配置2個及以上Pod實例。
配置多個Pod實例,可有效避免單個Pod實例故障而導致的應用無法使用。
建議為應用配置合理的CPU資源預留(Request)和Mem資源限制(Limit)。
配置合理的資源配額,為應用的Pod配置QoS Class。
說明對于Java應用,配置的Mem資源限制(Limit)不應低于JVM配置的內存使用上限,否則會在Pod層面出現內存不足(OOM),導致Pod重啟。
應用高級配置信息
配置調度規則。
建議為應用設置盡量多可用區部署和盡量多節點部署類型的調度規則。部署應用時,Pod實例會利用反親和性,盡可能打散Pod實例并部署到多可用區和不同節點,可有效避免單個Pod實例故障而導致的應用無法使用。相關文檔。請參見配置調度規則。
建議為應用設置合理的日志滾動策略,及時清理。
Pod實例內打印過多日志將侵占節點的磁盤空間,導致節點進入DiskPressure狀態,并引發Pod驅逐。
合理配置應用生命周期的探針。
為了便于故障自愈和優雅上下線,Liveness存活探針的各參數配置應當保證應用可以正常啟動,若應用正常啟動時間較長,可以配置更長的首次啟動延遲時間(InitialDelaySeconds)。相關文檔,請參見配置應用生命周期的鉤子和探針
如果部署的是非微服務應用,且通過Service實現的服務暴露,Readiness就緒探針的各參數配置應當保證能準確的反映應用健康狀況,以免非健康Pod提供服務(即未被Service摘除)。相關文檔,請參見配置應用生命周期的鉤子和探針和添加服務Service。
配置日志收集規則。
將Pod實例日志持久化保存到SLS日志服務,便于問題排查。由于Pod實例本身是無狀態的,會因為各種調度而重新創建和刪除,因此需要將Pod實例的日志進行集中化收集并持久化存儲。相關文檔,請參見配置日志收集。
應用運行
此處介紹應用運行階段需要注意的事項,當需要開展促銷活動時,還需要提前進行應用壓測、彈性伸縮等配置。
一般運行時態
謹慎使用編輯應用的YAML文件功能。
對于EDAS部署時可修改的配置項,建議在EDAS側完成相關配置,不建議通過編輯YAML文件功能來修改配置項,直接編輯資源會導致應用重啟。如果一定需要修改YAML文件,修改前需要熟悉Deployment資源的配置方法。
例如:通過編輯YAML文件修改Deployment的原生發布策略UpdateStrategy權限,有且僅會生效一次。當再次部署應用時,仍會使用EDAS的升級策略(單批發布、分批發布和金絲雀發布策略)。所以對于EDAS部署時可修改的配置項,都建議直接在EDAS側完成相關配置。
禁止從負載均衡控制臺直接修改SLB實例的監聽配置。
如果需要為應用關聯負載均衡SLB,必須在EDAS控制臺完成關聯SLB實例的監聽配置管理。相關文檔,請參見添加負載均衡CLB。
重要禁止從負載均衡控制臺直接修改SLB實例的監聽配置(含監聽+證書),可能導致SLB控制臺修改的配置回退,引發應用入口相關的故障。
請勿配置私網SLB進行集群內部服務的訪問。
Pod實例之間無法直接訪問私網SLB地址,私網SLB只是用來提供VPC內非同一K8s集群的訪問。當需要在集群內部訪問服務時,請創建Service并使用Service地址進行訪問。相關文檔,請參見添加服務Service。
建議為集群配置合理的監控報警。
一般都需要為集群配置監控報警,如Prometheus監控。以免底層資源不穩定等情況引發業務問題。如需了解更多的集群監控信息,請參見集群監控。
高并發時態
在高并發前,做好應用壓測。
建議用性能測試PTS對應用做全鏈路壓測,根據壓測水位提前預估好所需Pod和Node數量,在高并發前完成擴容;還需要評估存儲和網絡帶寬,提升存儲空間和負載均衡的規格或網絡帶寬;如果還需要用到應用路由,請注意查看Ingress Controller的監控指標,確認負載情況并設置合理的Pod副本數。
承壓的應用Pod盡量分布在同一個可用區,以避免跨可用訪問的時延問題。
如果避免不了Pod分布在不同的可用區,您可以為服務提供者配置同可用區優先調用,從而解決跨可用區調用帶來的網絡延時。相關文檔,請參見配置同可用區優先路由。
承壓的集群Node節點使用相同的規格,保證Pod的處理性能基本一致。
如果ECS實例規格差異較大,會容易導致Pod性能表現不一致,業務負載不均。
需要提前準備好目標規格的Node,如果對應規格的Node無法下單購買,請聯系解決方案架構師協調ECS備貨。
建議為應用開啟彈性伸縮。
建議直接使用EDAS提供的基于應用指標觸發或定時觸發的彈性伸縮規則;不建議在K8s層單獨開啟Deployment的HPA(Horizontal Pod Autoscaling)彈性伸縮,以免影響EDAS應用的正常部署行為。如何使用EDAS提供的基于應用指標觸發或定時觸發的彈性伸縮規則,請參見自動彈性擴縮容。
建議為應用關聯多個負載均衡SLB。
建議從DNS側配置多個SLB的解析記錄,以便分攤負載,消除單個SLB的性能瓶頸。為應用關聯SLB,請參見添加負載均衡CLB。
說明當前最大規格的負載均衡SLB實例(超強型slb.s3.large)的帶寬上限為5 G。
在高并發過程中,做好應用監控和代碼封網。
時刻關注相關的應用監控和集群監控,及早發現并解決可能存在的異常問題。相關文檔,請參見應用監控概述。
高并發過程中,應用處于承壓狀態,要嚴格控制應用代碼上傳,避免出現應用部署更新。
應用變更
此處僅介紹在應用變更階段的一些注意事項。您可以通過應用監控、應用報警判斷應用變更是否正常,如果變更失敗可以通過事件和失敗分析進行應用診斷。
應用變更前,預留集群資源。
注意為集群預留資源,避免在部署過程因為資源不足而進展緩慢,甚至部署失敗的情況出現。部署失敗的相關原因,請參見查看部署失敗的執行結果。
應用變更中,查看變更詳情和應用相關指標。
及時查看應用變更記錄,查看變更事件和失敗分析。相關文檔,請參見查看應用變更。
注意查看應用指標變化、發布診斷報告以及進行業務驗證,防止應用版本不符合預期。
如果發布不符合預期應及時回滾,使應用恢復到穩定狀態,處理好異常后再進行下一次發布。請勿在不符合預期時仍繼續發布,將導致無法回滾到上一個穩定狀態。回滾應用,請參見使用控制臺回滾應用(K8s)。
應用排障
此處介紹常見的應用排障相關事項。
如何獲得EDAS發布動態
您可以在EDAS相關釘釘交流群中,添加EDAS的發版公告機器人,以便在第一時間知曉EDAS的發布動態。相關文檔,請參見自助在釘釘群中添加釘釘機器人“EDAS產品小助手”。