《何子波-螞蟻集團配置即代碼的規?;瘜嵺`之路.pdf》由會員分享,可在線閱讀,更多相關《何子波-螞蟻集團配置即代碼的規?;瘜嵺`之路.pdf(30頁珍藏版)》請在三個皮匠報告上搜索。
1、演講人:何子波目 錄01淺談配置管理02配置即代碼03螞蟻落地實踐04總結與展望淺談配置管理傳統的配置管理 Kubernetes YAML Strikes分布式配置中心 配置格式五花八門,YAML、配置領域專用語言(DSL)、通用編程語言(GPL)各種配置工具層出不窮,熱鬧非凡,Helm、Kustomize 仍然最流行配置即代碼Borg接入三件套:BCL/borgcfg/WebConsoleProdspec and Annealing運維平臺功能透明度不足,大量黑盒代碼邏輯運維平臺高度定制化靈活性不足,無法滿足應用個性化運維需求資源瓶頸,無法復用和發揮 SRE 沉淀的運維經驗開發集群測試集群生
2、產集群純開源技術棧,工程化水位低無規劃化流程,缺少技術風險防控低協同性,大量文件拷貝平臺SRE業務研發業務SRE平臺研發陷阱 1:沒有把配置作為一種編程語言如果你不是為之專門設計一種語言,那么最終用到的“語言”就不太可能是一種好語言。盡管配置語言描述的是數據而不是行為,但它們仍然具有編程語言的其他特征。陷阱 2:設計特殊的語言功能特殊的語言比正式設計的等效語言更復雜,并且通常具有低效的表達能力。與其祈禱配置系統不會復雜到需要一定的編程結構,不如在初始階段就考慮到這些需求。陷阱 3:使用現有的通用腳本語言 e.g.Python使用通用腳本語言的實現方式往往是重量級的,并且/或則需要使用侵入式沙盒
3、來確保密閉性。由于通用語言可以訪問本地系統,處于安全考慮,可能還是需要沙盒。Polyrepo(多倉庫)Monorepo(單體倉庫)配置跟著業務代碼倉庫走,開發者不需要感知額外的配置倉庫,認知成本低代碼量和復雜性可控,不用擔心可擴展問題利于權限控制,權限分配粒度可以做非常細優勢難以建立統一的代碼規范,平臺團隊缺少約束力依賴管理與升級非常復雜,不利于 SRE 進行批量的配置變更劣勢易于規范代碼,中心化流水線更容易把控代碼質量和風格,同時依賴管理與升級更加簡單利與 SRE 進行批量配置變更與重構,且易于代碼重用利于構建中心化的配置自動化層,便于上游即成優勢開發者需要感知額外的配置倉庫,有一定的學習成
4、本難以實現細粒度的權限控制,并且隨著代碼文件、數量越來越多,復雜性會越來越高,可能存在可擴展性問題劣勢Platform build ModulesDeveloper choose ModulesCodingPre-ApplyApplyPost-ApplyDeployValidationResourceLive DiffPreviewLLVM 優化器Native+WASM Target代碼索引、增量編譯高性能強不可變性靜態類型系統面向約束穩定多語言 SDK內置函數+系統庫YAML/JSON 親和 包管理工具Plugin工程化KCLHCLCUE建模能力通過 KCL Schema 進行建模,通過語言
5、級別的工程和部分面向對象特性,可以實現較高的模型抽象通過 Terraform Go Provider Schema 定義,在用戶界面不直接感知,此外編寫復雜的 object 和必選/可選字段定義時用戶界面較為繁瑣通過 Struct 進行建模,無繼承等特性,當模型定義之間無沖突時可以實現較高的抽象。由于 CUE 在運行時進行約束檢查,在大規模建模場景可能存在性能瓶頸約束能力更豐富的 check 聲明式約束語法,編寫更加容易,對于配置字段組合約束編寫更加簡單(比 CUE 多了 if guard 組合約束,all/any/map 等集合約束編寫更容易)通過 Variable 的 condition
6、字段對動態參數進行約束,Sentinel/Rego 等策略語言完成,語言本身的完整能力不能自閉環,且實現方式不統一CUE 將類型和值合并到一個概念中,通過各種語法簡化了約束的編寫,比如不需要泛型和枚舉,求和類型和空值合并都是一回事擴展性KCL 可以自定義配置分塊編寫方式和多種合并策略,KCL 同時支持冪等和非冪等的合并策略,可以滿足復雜的多租戶、多環境配置場景需求Terraform HCL 通過分文件進行 Override,模式比較固定,能力受限支持語言內部配置合并,CUE 的配置合并是完全冪等的,對于滿足復雜的多租戶、多環境配置場景的覆蓋需求可能無法滿足語言化編寫能力復雜的結構定義、循環、條
7、件約束場景編寫簡單編寫復雜的對象定義和必選/可選字段定義時用戶界面較為繁瑣對于復雜的循環、條件約束場景編寫復雜,對于需要進行配置精確修改的編寫場景較為繁瑣 面向開發者的平臺界面,屏蔽底層復雜性,降低開發者認知 覆蓋應用全生命周期,一份配置即可完整描述應用單一大庫收攏螞蟻所有應用交付配置主干開發,分支發布環境維度權限控制、對維度 CI 配套KonfigAppConfigurationComponentmodelsschemadocs可信原生中間件paascloud meshbasebase.krbac.kproddevproject.yamlstack.yamlpilotmain.kgalley
8、rbac.ktopology.kKonfig 配置大庫12123Workload 工作負載Accessories 配件Topology 部署拓撲GitKusion Module(應用研發)(SRE、平臺研發)OCI 制品倉庫上傳、注冊Kusion 引擎統一 Spec(SSOT)生成應用配置(AppConfiguration)環境維度基線Go 插件 GRPC 調用拉取Kusion Module 是對底層基礎設施服務、發布運維等平臺能力的封裝抽象,定義遵循單一職責原則,而非抽象整個云服務Kusion Module 由兩部分組成:面向應用開發者的基于 KCL 的 Schema 定義,以及基于通用編程
9、語言的 Generator 程序,負責實現對應的配置渲染、生成邏輯Kusion Module 的分發依賴 OCI 制品倉庫,Kusion Engine 訪問 OCI 中心拉取對應的 Kusion Module 制品,并以 Go 插件形式調用InitPreviewApplyDestoryOperationsDepAnalysisDAGRes Health Check3-WayMerge/DiffOperation EngineApplyGetDeleteWatchInterfacesRuntimesKubernetesRuntimeTerraformRuntimeThird PartyRunti
10、meKubernetesClustersCloudsOn Perm InfraK8s ResourcesTF ResourcesX ResourcesKusion 引擎StateFilesystemDatabaseOSSRWKusion:面向開發者的云原生接入工具,提供配套工具能力支持Engine:提供終端命令依賴的資源管理、DAG編排、三路對比等核心功能Runtimes:抽象統一的基礎設施接入層,可擴展方式實現異構基礎設施一致交互State:真實世界資源在引擎中的映射,Kusion 管理基礎架構的必要數據螞蟻落地實踐業務代碼倉庫代碼掃描編譯構建鏡像中心業務代碼 CI 階段Konfig 大庫推
11、送拉取配置自動化服務層研發SRE生效配置生效變更管控可視化CD 階段 交付即運維 技術風險水位測試大庫 CI 階段變更預覽影響面分析配置代碼變更Provider/Module 庫代碼合并應用代碼變更評審 單一事實來源 風險左移 變更預覽Kusion 引擎Watch配置飄逸檢查評審拉取交付態部署態研發態申請應用應用配置入駐大庫部署驗證質量驗收應用封版修改配置驗收不通過驗收通過配置生效應用研發鏡像倉庫編譯構建拉取交付物構建交付包拉取鏡像私有云OCI 倉庫交付包分發配置管理配置驅動生效結束拉取穩定版本Kusion Modules100+業務應用3000+螞蟻開發者1500+Konfig 大庫提交47
12、0000+CI 流水線1200+/天KCL Code200M+總結與展望透過現象看本質,不同產品、工具解決問題的思路透過現象看本質,不同產品、工具解決問題的思路本質是一樣的,都面臨根本性挑戰本質是一樣的,都面臨根本性挑戰挑戰一:靈活性與簡單性之間的矛盾挑戰二:配置代碼獨家驅動導致的不對稱如果你計劃實施平臺工程戰略,請務必確保你的平臺支持動態配置管理DeveloperControlPlaneIDE(KCL Tools)Version Control SystemsKusion Developer PortalCustom PortalBackstage PluginCopilotKusion M
13、odelsIntegration&DeliveryCI/CDKusion Platform OrchestratorKusion K8s OperatorResources50+Kusion ProvidersMonitoring&LoggingObservabilityKusion ExplorerSearch,Diagnosis,Insight,IntelligenceStability&Security&IdentityIdentitySecretsTrust Tunnel Website https:/kusionstack.io/Github https:/ https:/ Slack https:/ Twitter KusionStackTHANKS大模型正在重新定義軟件Large Language Model Is Redefining The Software