一、前言經(jīng)過超過半年的研發(fā),螞蟻金服在今年完成了 Kubernetes 的全面落地,并使得核心鏈路100% 運行在 Kubernetes。到今年雙十一,螞蟻金服內(nèi)部通過 Kubernetes 管理了數(shù)以萬計的機器以及數(shù)十萬的業(yè)務(wù)實例,超過90%的業(yè)務(wù)已經(jīng)平穩(wěn)運行在 Kubernetes 上。整個技術(shù)切換過程平穩(wěn)透明,為云原生的資源基礎(chǔ)設(shè)施演進邁好了關(guān)鍵的一步。 本文主要介紹 Kubernetes 在螞蟻金服的使用情況,雙十一大促對 Kubernetes 帶來史無前例的挑戰(zhàn)以及我們的最佳實踐。希望通過分享這些我們在實踐過程中的思考,讓大家在應(yīng)用 Kubernetes 時能夠更加輕松自如。 二、螞蟻金服的 Kubernetes 現(xiàn)狀2.1 發(fā)展歷程與落地規(guī)模Kubernetes 在螞蟻金服落地主要經(jīng)歷了四個階段:
2.2 統(tǒng)一資源調(diào)度平臺Kubernetes 承載了螞蟻金服在云原生時代對資源調(diào)度的技術(shù)目標(biāo):統(tǒng)一資源調(diào)度。通過統(tǒng)一資源調(diào)度,可以有效提升資源利用率,極大的節(jié)省資源成本。要做到統(tǒng)一調(diào)度,關(guān)鍵在于從資源層面將各個二層平臺的調(diào)度能力下沉,讓資源在 Kubernetes 統(tǒng)一分配。 螞蟻金服在落地 Kubernetes 實現(xiàn)統(tǒng)一調(diào)度目標(biāo)時遵循了標(biāo)準(zhǔn)化的擴展方式:
得益于持續(xù)的標(biāo)準(zhǔn)化工作,我們在落地 Kubernetes 的大半年內(nèi)應(yīng)用了多項技術(shù),包含安全容器,統(tǒng)一日志,GPU 精細調(diào)度,網(wǎng)絡(luò)安全隔離及安全可信計算等,并通過 Kubernetes 統(tǒng)一使用和管理這些資源服務(wù)了大量在線業(yè)務(wù)以及計算任務(wù)型業(yè)務(wù)。 三、雙十一 Kubernetes 實踐下面我們通過以下幾種場景介紹螞蟻金服內(nèi)部是如何使用 Kubernetes,以及在此過程中我們面對的挑戰(zhàn)和實踐之路。 3.1 資源分時復(fù)用在大促過程中,不同業(yè)務(wù)域的洪峰流量通常都是在不同時間段來臨,而應(yīng)對這些不同時間到來的業(yè)務(wù)流量往往都需要大量的額外計算資源做保障。在以往的幾次活動中,我們嘗試了通過應(yīng)用快速騰挪的方式來做到資源上的分時復(fù)用,但是服務(wù)實例上下線需要預(yù)熱,騰挪耗時不可控,大規(guī)模調(diào)度的穩(wěn)定性等因素都影響了最終騰挪方案的實踐效果。 今年雙十一我們采用了資源共享調(diào)度加精細化切流的技術(shù)以達到資源分時利用的目標(biāo),為了達到資源充分利用和極速切換的目標(biāo),我們在以下方面做了增強:
整套平臺和技術(shù)最終實現(xiàn)了令人激動的成果:螞蟻金服內(nèi)部不同業(yè)務(wù)鏈路數(shù)以萬計的實例實現(xiàn)了最大程度的資源共享,這些共享資源的實例可分鐘級完成平滑切換。這種技術(shù)能力也突破了當(dāng)下資源水平伸縮能力的效率限制,為資源的分時復(fù)用打開了想象空間。 3.2 計算型任務(wù)混部Kubernetes 社區(qū)的落地案例中,我們往往看到的都是各種各樣的在線業(yè)務(wù),計算型業(yè)務(wù)往往通過“圈地”式的資源申請和獨立的二層調(diào)度跑在 Kuberentes 集群中。但是在螞蟻內(nèi)部我們從決定使用 Kubernetes 的第一天起,就將 Kubernetes 融合計算型業(yè)務(wù)實現(xiàn)資源的統(tǒng)一調(diào)度作為我們的目標(biāo)。 在螞蟻金服內(nèi)部我們持續(xù)的使用 Kubernetes 支持各類計算業(yè)務(wù),例如各類AI 訓(xùn)練任務(wù)框架,批處理任務(wù)和流式計算等。他們都有一個共同的特點:資源按需申請,即用即走。 我們通過 Operator 模型適配計算型任務(wù),讓任務(wù)在真正執(zhí)行時才會調(diào)用 Kubernetes API 申請 Pod 等資源,并在任務(wù)退出時刪除 Pod 釋放資源。同時我們在調(diào)度引擎中引入了動態(tài)資源調(diào)度能力和任務(wù)畫像系統(tǒng),這為在線和計算的不同等級業(yè)務(wù)提供了分級資源保障能力,使在線業(yè)務(wù)不受影響的情況下資源被最大化的利用。 今年雙十一除了洪峰時間段(00:00~02:00),螞蟻金服 Kubernetes 上運行的任務(wù)均未做降級,每分鐘仍有數(shù)以百計的計算任務(wù)在 Kubernetes 上申請和釋放。未來螞蟻金服內(nèi)部將會持續(xù)推動業(yè)務(wù)調(diào)度融合,將 Kubernetes 打造成為資源調(diào)度的航空母艦。 3.3 規(guī)模化核心螞蟻金服是目前少數(shù)運行了全球最大規(guī)模的 Kubernetes 集群的公司之一,單集群機器規(guī)模過萬,Pods 數(shù)量數(shù)十萬。隨著類似計算型任務(wù)混部和資源分時復(fù)用這類業(yè)務(wù)的落地,資源的動態(tài)使用以及業(yè)務(wù)自動化運維都對 Kubernetes 的穩(wěn)定性和性能帶來的巨大的挑戰(zhàn)。 首先需要面對的挑戰(zhàn)是調(diào)度性能,社區(qū)的調(diào)度器在5k規(guī)模測試中調(diào)度性能只有1~2 pods/s,這顯然無法滿足螞蟻金服的調(diào)度性能需求。 針對同類業(yè)務(wù)的資源需求往往相同的特點,我們自研了批量調(diào)度功能,再加上例如局部的filters性能優(yōu)化等工作,最終達到了百倍的調(diào)度性能提升! 在解決了調(diào)度性能問題后,我們發(fā)現(xiàn)規(guī)模化場景下 APIServer 逐漸成為了影響 Kubernetes 可用性的關(guān)鍵組件,CRD+Operator 的靈活擴展能力更是對集群造成巨大的壓力。業(yè)務(wù)方有100種方法可以玩垮生產(chǎn)集群,讓人防不勝防。 面對這種“核按鈕”不在集群管理員手上的情況,螞蟻內(nèi)部通過兩方面入手解決規(guī)?;瘞淼膯栴}:
通過規(guī)范和優(yōu)化,我們從 client 到 server 對 API 負載做了整體鏈路的優(yōu)化,讓資源交付能力在落地的大半年內(nèi)提升了6倍,集群每周可用率達到了3個9,讓 Kubernetes 平穩(wěn)順滑的支撐了雙十一的大促。 3.4 彈性資源建站近幾年大促螞蟻金服都會充分利用云化資源,通過快速彈性建站的方式將全站業(yè)務(wù)做“臨時”擴容,并在大促后回收站點釋放資源。這樣的彈性建站方式為螞蟻節(jié)省了大量的資源開支。 Kubernetes 提供了強大的編排能力,但集群自身的管理能力還比較薄弱。螞蟻金服從 0 開始,基于 Kubernetes on Kubernetes 和面向終態(tài)的設(shè)計思路,開發(fā)了一套管理系統(tǒng)來負責(zé)螞蟻幾十個生產(chǎn)集群的管理,提供面向大促的快速彈性建站功能。 通過這種方式我們可以自動化的完成站點搭建,3小時內(nèi)交付可立即使用的包含數(shù)千個 Nodes 的 Kubernetes 集群。今年雙十一我們在一天內(nèi)交付了全部彈性云化集群,隨著技術(shù)的不斷提升和磨練,我們期望未來能夠按天交付符合業(yè)務(wù)引流標(biāo)準(zhǔn)的集群,讓螞蟻金服的站點隨時隨地可彈。 四、展望未來,迎接挑戰(zhàn)云原生時代已經(jīng)到來,螞蟻金服內(nèi)部已經(jīng)通過 Kubernetes 邁出了云原生基礎(chǔ)設(shè)施建設(shè)的第一步。雖然當(dāng)前在實踐中仍然有許多挑戰(zhàn)在等著我們?nèi)?yīng)對,但相信隨著我們在技術(shù)上持續(xù)的投入,這些問題會一一得到解決。 4.1 平臺與租戶當(dāng)前我們面對的一大挑戰(zhàn)是多租戶帶來的不確定性。螞蟻金服內(nèi)部不可能為每個業(yè)務(wù)部門都維護一套Kubernetes集群,而單個 Kubernetes 集群的多租戶能力十分薄弱,這體現(xiàn)在以下兩個維度:
未來我們會在核心能力如 Priority and Fairness for API Server Requests 以及 Virtual Cluster 上持續(xù)的做技術(shù)投入和應(yīng)用,有效保障租戶的服務(wù)能力保障和隔離。 4.2 自動化運維除了資源調(diào)度,Kubernetes 下一階段的重要場景就是自動化運維。這涉及到應(yīng)用資源全生命周期的面向終態(tài)自行維護,包含但不限于資源自動交付及故障自愈等場景。 隨著自動化程度的不斷提升,如何有效控制自動化帶來的風(fēng)險,讓自動化運維能夠真正提升效率而不是任何時刻都需要承擔(dān)刪庫跑路的風(fēng)險是接下來的一個重要難題。 螞蟻金服在落地 Kubernetes 的過程中經(jīng)歷過類似的情況:從初期高度自動化帶來無限的興奮,到遭遇缺陷不受控制最終爆炸引發(fā)故障后的無比沮喪,這些都說明了在 Kubernetes 上做自動化運維仍有很長的路要走。 為此我們接下來和阿里集團兄弟部門一起推動 Operator 的標(biāo)準(zhǔn)化工作。從接入標(biāo)準(zhǔn),Operator 框架,灰度能力建設(shè)和控制治理上入手,讓 Kubernetes 上的自動化運維變的更加可視可控。 五、結(jié)束語今年我們實現(xiàn)了 Kubernetes 由 0-1 的落地,經(jīng)受了雙十一雙大促真實場景的考驗。但云原生的基礎(chǔ)設(shè)施建設(shè)仍是剛剛起步,接下來我們將在彈性資源交付,集群規(guī)模化服務(wù)以及技術(shù)風(fēng)險與自動化運維上持續(xù)發(fā)力,以技術(shù)支撐和推動業(yè)務(wù)服務(wù)完成云原生的落地。 最后,也歡迎志同道合的伙伴加入我們,一起參與建設(shè)云原生場景下的基礎(chǔ)設(shè)施!可點擊【金融級分布式架構(gòu)】公眾號【加入我們】-【超多崗位】 tab 獲取職位信息。 作者介紹曹寅,螞蟻金服 Kubernetes 落地負責(zé)人,2015年加入螞蟻金服,主要從事容器技術(shù)及平臺研發(fā)相關(guān)工作,2018年開始負責(zé)螞蟻Kubernetes的研發(fā)落地。 曾在阿里云彈性計算工作四年,對云計算基礎(chǔ)設(shè)施領(lǐng)域有著深刻的理解。 公眾號:金融級分布式架構(gòu)(Antfin_SOFA) |
|