0. 前言
雲原生的時代已經到來,雲原生技術正在重塑整個軟體生命周期,阿裡巴巴是國内最早布局雲原生技術的公司之一。
容器服務團隊在過去的幾年時間内幫助很多使用者成功把業務雲原生化并遷移上雲,其中有現在已經是我們TOP10的大客戶,也有需要在國内開展業務的海外使用者,有些是從其他雲廠商遷移過來的使用者,有些是從IDC裡遷移上雲的使用者,而且越來越多的使用者開始咨詢如何對自己的應用做雲原生化改造、如何把業務平滑地遷移到雲上。每個使用者的業務場景都是不同的,有些差異化的業務場景對容器平台也有一些定制化的需求,我們在幫助這些使用者落實遷雲方案的同時也在不斷思考如何把這些案例中共性的東西做一些沉澱,總結出一些優秀的解決方案、最佳實踐以及開發一些工具來幫助使用者快速完成遷雲的這件事情。這些解決方案、最佳實踐以及遷雲工具就是今天這篇文章想要分享的内容。
在幫助使用者落實遷雲方案之前,我們首先必須要回答至少3個問題:(1)
ACK(阿裡雲容器服務Kubernetes)如何能保證使用者業務的可靠性、穩定性、安全性和靈活性;(2)如何設計遷雲方案把業務平滑地遷移到ACK;(3)應用如何做進一步改造來适配ACK提供的更強大的擴充能力。
1. ACK如何保證使用者業務的可靠性、穩定性、安全性和靈活擴充性

首先,ACK是以阿裡雲可靠穩定的IaaS平台為底座的,有最大的彈性化與低廉成本和全球化接入的優勢;其次,ACK本身處于阿裡雲的安全體系架構之下并從基礎設施到容器運作時環境對容器叢集有全次元的安全加強;過去幾年我們很好地支撐了成百上千家大小企業的業務運作,有海量使用者經驗總結并經過雙11驗證;除此之外。ACK是在标準的Kubernetes基礎上,對與使用者息息相關的能力做了大幅提升,使用者完全不需要擔心會被某一家廠商綁定。
在我們過去幫助使用者業務上雲的案例中,絕大部分是自建Kubernetes叢集遷移到ACK叢集,與自建Kubernetes叢集相比較,ACK在成本、彈性、IaaS高度融合、性能、安全加強以及實踐經驗等方面都有非常巨大的優勢。
另外,ACK與阿裡雲的所有region保持一緻,除了國内多個區域開服外,在東南亞、中東、歐洲、美東美西都有開服,完全可以滿足使用者開展全球業務的需求。
2. 整體遷雲方案設計
使用者業務整體遷雲的方案設計會涉及到叢集規劃、資料搬遷、監控切換、日志切換以及最終的生産流量切換或并網操作。
遷雲到ACK需要做涉及到哪些元件、搬遷哪些資料、切換哪些服務等,都是需要需要在遷移上雲之前設計好的。
首先需要做叢集規劃,使用者需要根據自己業務場景的不同來選擇不同的機器類型,比如CPU機器還是GPU機器,比如虛拟伺服器ECS還是神龍裸金屬伺服器等等,網絡規劃這部分會涉及到容器叢集基礎設施選擇vpc内網網絡還是經典網絡,叢集内pod之間進行通信模式是flannel模式還是terway模式等,在容量規劃這部分,使用者可以根據自己的成本以及預算規劃一個可滿足初期業務正常運作的容量即可,随後可以配置動态擴縮容随時彈縮叢集規模;在安全防護提升這部分,有基礎架構安全比如設定合理的安全組規則,有鏡像安全比如使用私有鏡像并定義鏡像安全掃描,K8S應用安全管理比如設定不同服務間互相通路的網絡安全政策等;監控切換這部分相對于使用者自建Kubernetes會更加全次元和立體,從基礎設施到容器運作時監控一應俱全,并可根據門檻值設定觸發報警通知;使用者一般也會把自建的日志收集方案切換成阿裡雲上企業級的日志産品SLS;資料遷移是非常重要的一部分,這些資料包括資料庫資料、存儲資料、容器鏡像等,我們會對接阿裡雲上企業級的粗出産品以及遷移工具,目的是為了保證資料遷雲的可靠性、安全性;應用改造主要涉及的内容包括鏡像位址的更新、服務暴露方式的優化以及存儲盤挂載方式的更新适配;最後提供一個滿足使用者快速疊代上線産品的CICD方案。以上各個元件調試完畢後,我們就可以進行一部分生産流量的切換。
以上從叢集規劃到生産流量切換便是使用者業務遷移上雲所需要涉及到的方方面面。
我們提供了一個企業容器化生命周期模型,這個模型是根據時間階段和使用者側各個業務角色來劃分的,比如業務架構師角色需要關心的是業務上雲能給公司帶來什麼價值,在TCO和場景上會帶來哪些優化,雲平台在安全性以及計算、存儲、網絡能力上是否能滿足目前業務需求;IT架構師負責規劃目前業務需要的叢集容量和規模以及網絡選型等問題,剩下的就是系統管理者與應用管理者把遷雲方案的各個細節落實下來。這個模型的主要核心關注點是讓使用者的業務上雲後能更穩定、成本更低、效率更高。
全棧遷雲架構思路分兩種,一種是整體遷移,一種是平滑遷移。整體遷移是指使用者應用全部遷移上雲後,各個元件調試完畢、測試驗收通過後,可以整體切換生産流量到線上叢集,待線上叢集上的業務穩定運作一段時間後再下線原有環境。平滑遷移是指使用者可以使用線上ACK叢集納管線下節點,或者線上叢集與線下叢集混合組網對外提供服務,逐漸改造業務元件上雲後将原有環境下線。這兩種方式相比,整體遷移更簡單,平滑遷移響度複雜但對業務影響小,是以也需要根據使用者的實際場景做選擇。
容器化整體遷雲這部分還有兩個小場景,一個是使用者從自建Kubernetes叢集遷移到ACK,此場景下使用者的應用已經做了很大一部分的雲原生化改造,遷移工作相對來說會簡單些,還有一部分使用者的應用是傳統應用,直接運作在虛拟機或者裸金屬伺服器上,沒有做過任何雲原生化的改造,對于這部分場景,我們也提供了相關工具或方案幫助使用者進行雲原生化的遷雲改造,比如使用
derrick項目可以自動檢測源碼項目類型并生成Dockerfile和用于應用部署編排的yaml檔案,比如我們正在聯合ECS SMC(遷雲中心)開發的虛拟機轉換容器鏡像并運作在ACk叢集中的能力。
為了幫助使用者提高遷雲的效率,我們也在持續積累和開源一些遷雲工具。比
ack-image-builder為使用者提供建立ACK叢集節點自定義鏡像的模闆并通過校驗子產品檢查自定義鏡像是否滿足ACK叢集要求;
sync-repo能夠幫助使用者快速完成容器鏡像批量遷移至
ACR(容器鏡像倉庫服務);
velero能夠幫助使用者快速把其他雲廠商後者自建Kubernetes叢集下的完整應用遷移至ACK叢集。
Velero遷移Kubernetes應用到ACK視訊DEMO在資料搬遷部分,可靠遷移是關鍵,根據使用者資料類型的不同,我們會使用與之比對的企業級遷移工具,比如資料線上遷移服務DOMS,比如OSS的遷移工具,還有離線海量資料遷移方案閃電立方等。
資料、應用遷雲完成後,需要進一步适配監控、日志等元件,待各個元件調試完畢通過驗收後,可以使用智能DNS進行生産流量的切割。
3. 應用改造和優化
對于應用改造和優化這部分,K8s到K8s的場景下,需要優化的是去适配自動擴容等自建K8s不具備的那些能力,在傳統應用遷移到ACK的場景下,這部分的工作量會更大些,是以我們針對這個場景也輸出了一些方案,比如類似于異地多活的方案,我們把使用者傳統應用環境,通常是虛拟機或者裸機環境內建到線上ACK部署的Istio網格中,逐漸改造應用直至業務全部切換到線上ACK叢集。
在應用逐漸改造的這個過程中,會涉及到應用如何容器化、網絡環境如何遷移以及資料遷移的問題,應用容器化這個問題,我們可以使用前面我提到過的一個服務叫做SMC遷雲中心來完成虛拟機轉換為容器鏡像的過程,網絡這部分可以通過iptables,External,CoreDNS PrivateZone等方式對IP位址DNS域名做處理,保持原先的邏輯IP和域名不變,并通過Istio實作網絡虛拟路由和可觀測性的管理。
4. 案例和總結
最後列舉的是部分遷雲案例,其中有對高性能網絡有特殊需求的使用者,有做深度學習相關業務對大規模GPU機器有需求的使用者,也有要求裸金屬機型伺服器的使用者等等。
以上這些不同使用者的不同業務場景在雲原生化遷雲方案的設計和落實上都有各自的差異性,不盡相同,需要結合ACK團隊沉澱下來的最佳實踐來快速做出評估和計劃,并借助已有的一系列遷雲工具快速完成業務從線下遷移上雲的過程。