快速云原生化,從數(shù)據(jù)中心到云原生的遷移最佳實(shí)踐
云原生的時(shí)代已經(jīng)到來,云原生技術(shù)正在重塑整個(gè)軟件生命周期,阿里巴巴是國(guó)內(nèi)最早布局云原生技術(shù)的公司之一。
容器服務(wù)團(tuán)隊(duì)在過去的幾年時(shí)間內(nèi)幫助很多用戶成功把業(yè)務(wù)云原生化并遷移上云,其中有現(xiàn)在已經(jīng)是我們 TOP10 的大客戶,也有需要在國(guó)內(nèi)開展業(yè)務(wù)的海外用戶,有些是從其他云廠商遷移過來的用戶,有些是從 IDC 里遷移上云的用戶,而且越來越多的用戶開始咨詢?nèi)绾螌?duì)自己的應(yīng)用做云原生化改造、如何把業(yè)務(wù)平滑地遷移到云上。每個(gè)用戶的業(yè)務(wù)場(chǎng)景都是不同的,有些差異化的業(yè)務(wù)場(chǎng)景對(duì)容器平臺(tái)也有一些定制化的需求,我們?cè)趲椭@些用戶落實(shí)遷云方案的同時(shí)也在不斷思考如何把這些案例中共性的東西做一些沉淀,總結(jié)出一些優(yōu)秀的解決方案、最佳實(shí)踐以及開發(fā)一些工具來幫助用戶快速完成遷云的這件事情。這些解決方案、最佳實(shí)踐以及遷云工具就是今天這篇文章想要分享的內(nèi)容。
在幫助用戶落實(shí)遷云方案之前,我們首先必須要回答至少 3 個(gè)問題:
(1)ACK(阿里云容器服務(wù) Kubernetes)如何能保證用戶業(yè)務(wù)的可靠性、穩(wěn)定性、安全性和靈活性;
(2)如何設(shè)計(jì)遷云方案把業(yè)務(wù)平滑地遷移到 ACK;
(3)應(yīng)用如何做進(jìn)一步改造來適配 ACK 提供的更強(qiáng)大的擴(kuò)展能力。
ACK 如何保證用戶業(yè)務(wù)的
可靠性、穩(wěn)定性、安全性和靈活拓展性
首先,ACK 是以阿里云可靠穩(wěn)定的 IaaS 平臺(tái)為底座的,有最大的彈性化與低廉成本和全球化接入的優(yōu)勢(shì);其次,ACK 本身處于阿里云的安全體系架構(gòu)之下并從基礎(chǔ)設(shè)施到容器運(yùn)行時(shí)環(huán)境對(duì)容器集群有全維度的安全加固;過去幾年我們很好地支撐了成百上千家大小企業(yè)的業(yè)務(wù)運(yùn)行,有海量用戶經(jīng)驗(yàn)總結(jié)并經(jīng)過雙 11 驗(yàn)證;除此之外。ACK 是在標(biāo)準(zhǔn)的 Kubernetes 基礎(chǔ)上,對(duì)與用戶息息相關(guān)的能力做了大幅提升,用戶完全不需要擔(dān)心會(huì)被某一家廠商綁定。
在我們過去幫助用戶業(yè)務(wù)上云的案例中,絕大部分是自建 Kubernetes 集群遷移到 ACK 集群,與自建 Kubernetes 集群相比較,ACK 在成本、彈性、IaaS 高度融合、性能、安全加固以及實(shí)踐經(jīng)驗(yàn)等方面都有非常巨大的優(yōu)勢(shì)。
另外,ACK 與阿里云的所有 region 保持一致,除了國(guó)內(nèi)多個(gè)區(qū)域開服外,在東南亞、中東、歐洲、美東美西等地域都有開服,完全可以滿足用戶開展全球業(yè)務(wù)的需求。
整體遷云方案設(shè)計(jì)
用戶業(yè)務(wù)整體遷云的方案設(shè)計(jì)會(huì)涉及到集群規(guī)劃、數(shù)據(jù)搬遷、監(jiān)控切換、日志切換以及最終的生產(chǎn)流量切換或并網(wǎng)操作。
遷云到 ACK 需要做涉及到哪些組件、搬遷哪些數(shù)據(jù)、切換哪些服務(wù)等,都是需要需要在遷移上云之前設(shè)計(jì)好的。
首先需要做集群規(guī)劃,用戶需要根據(jù)自己業(yè)務(wù)場(chǎng)景的不同來選擇不同的機(jī)器類型,比如 CPU 機(jī)器還是 GPU 機(jī)器,比如虛擬服務(wù)器ECS還是神龍裸金屬服務(wù)器等等。
其次網(wǎng)絡(luò)規(guī)劃這部分會(huì)涉及到容器集群基礎(chǔ)設(shè)施選擇 vpc 內(nèi)網(wǎng)網(wǎng)絡(luò)還是經(jīng)典網(wǎng)絡(luò),集群內(nèi) pod 之間進(jìn)行通信模式是 flannel 模式還是 terway 模式等。
再次在容量規(guī)劃這部分,用戶可以根據(jù)自己的成本以及預(yù)算規(guī)劃一個(gè)可滿足初期業(yè)務(wù)正常運(yùn)行的容量即可,隨后可以配置動(dòng)態(tài)擴(kuò)縮容隨時(shí)彈縮集群規(guī)模。
第四在安全防護(hù)提升這部分,有基礎(chǔ)架構(gòu)安全比如設(shè)置合理的安全組規(guī)則,有鏡像安全比如使用私有鏡像并定義鏡像安全掃描,Kubernetes 應(yīng)用安全管理比如設(shè)置不同服務(wù)間互相訪問的網(wǎng)絡(luò)安全策略等。
第五在監(jiān)控切換這部分相對(duì)于用戶自建 Kubernetes 會(huì)更加全維度和立體,從基礎(chǔ)設(shè)施到容器運(yùn)行時(shí)監(jiān)控一應(yīng)俱全,并可根據(jù)閾值設(shè)定觸發(fā)報(bào)警通知;用戶一般也會(huì)把自建的日志收集方案切換成阿里云上企業(yè)級(jí)的日志產(chǎn)品 SLS。
第六在數(shù)據(jù)遷移是非常重要的一部分,這些數(shù)據(jù)包括數(shù)據(jù)庫(kù)數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)、容器鏡像等,我們會(huì)對(duì)接阿里云上企業(yè)級(jí)的產(chǎn)品以及遷移工具來完成數(shù)據(jù)的遷移,目的是為了保證數(shù)據(jù)遷云的可靠性、安全性。目前備份中心支持云下數(shù)據(jù)到云上 ACK 的遷移,您可以使用備份中心來完成應(yīng)用及數(shù)據(jù)到 ACK 的遷移。
最后在應(yīng)用改造主要涉及的內(nèi)容包括鏡像地址的更新、服務(wù)暴露方式的優(yōu)化以及存儲(chǔ)盤掛載方式的更新適配。另外需要提供一個(gè)滿足用戶快速迭代上線產(chǎn)品的 CICD 方案。以上各個(gè)組件調(diào)試完畢后,我們就可以進(jìn)行一部分生產(chǎn)流量的切換。
以上是從集群規(guī)劃到生產(chǎn)流量切換便是用戶業(yè)務(wù)遷移上云所需要涉及到的總體幾個(gè)步驟。
我們提供了一個(gè)企業(yè)容器化生命周期模型,這個(gè)模型是根據(jù)時(shí)間階段和用戶側(cè)各個(gè)業(yè)務(wù)角色來劃分的,比如業(yè)務(wù)架構(gòu)師角色需要關(guān)心的是業(yè)務(wù)上云能給公司帶來什么價(jià)值,在 TCO 和場(chǎng)景上會(huì)帶來哪些優(yōu)化,云平臺(tái)在安全性以及計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)能力上是否能滿足當(dāng)前業(yè)務(wù)需求;IT 架構(gòu)師負(fù)責(zé)規(guī)劃當(dāng)前業(yè)務(wù)需要的集群容量和規(guī)模以及網(wǎng)絡(luò)選型等問題,剩下的就是系統(tǒng)管理員與應(yīng)用管理員把遷云方案的各個(gè)細(xì)節(jié)落實(shí)下來。這個(gè)模型的主要核心關(guān)注點(diǎn)是讓用戶的業(yè)務(wù)上云后能更穩(wěn)定、成本更低、效率更高。
全棧遷云架構(gòu)思路分兩種,一種是整體遷移,一種是平滑遷移。整體遷移是指用戶應(yīng)用全部遷移上云后,各個(gè)組件調(diào)試完畢、測(cè)試驗(yàn)收通過后,可以整體切換生產(chǎn)流量到線上集群,待線上集群上的業(yè)務(wù)穩(wěn)定運(yùn)行一段時(shí)間后再下線原有環(huán)境。平滑遷移是指用戶可以使用線上 ACK 集群納管線下節(jié)點(diǎn),或者線上集群與線下集群混合組網(wǎng)對(duì)外提供服務(wù),逐步改造業(yè)務(wù)組件上云后將原有環(huán)境下線。這兩種方式相比,整體遷移更簡(jiǎn)單,平滑遷移響度復(fù)雜但對(duì)業(yè)務(wù)影響小,所以也需要根據(jù)用戶的實(shí)際場(chǎng)景做選擇。
容器化整體遷云這部分還有兩個(gè)小場(chǎng)景,一個(gè)是用戶從自建 Kubernetes 集群遷移到 ACK,此場(chǎng)景下用戶的應(yīng)用已經(jīng)做了很大一部分的云原生化改造,遷移工作相對(duì)來說會(huì)簡(jiǎn)單些,還有一部分用戶的應(yīng)用是傳統(tǒng)應(yīng)用,直接運(yùn)行在虛擬機(jī)或者裸金屬服務(wù)器上,沒有做過任何云原生化的改造,對(duì)于這部分場(chǎng)景,我們也提供了相關(guān)工具或方案幫助用戶進(jìn)行云原生化的遷云改造,比如使用 derrick 項(xiàng)目可以自動(dòng)檢測(cè)源碼項(xiàng)目類型并生成 Dockerfile 和用于應(yīng)用部署編排的 yaml 文件。
為了幫助用戶提高遷云的效率,我們也在持續(xù)積累和開源一些遷云工具及產(chǎn)品。比 ack-image-builder 為用戶提供創(chuàng)建 ACK 集群節(jié)點(diǎn)自定義鏡像的模板并通過校驗(yàn)?zāi)K檢查自定義鏡像是否滿足 ACK 集群要求;sync-repo 能夠幫助用戶快速完成容器鏡像批量遷移至 ACR(容器鏡像倉(cāng)庫(kù)服務(wù)); 備份中心為無狀態(tài)或有狀態(tài)應(yīng)用的備份、恢復(fù)與遷移提供了一站式的解決方案,特別是對(duì)混合云,多集群的有狀態(tài)應(yīng)用提供了數(shù)據(jù)容災(zāi)和應(yīng)用遷移能力,能夠幫助用戶快速把其他云廠商或者自建 Kubernetes 集群下的完整應(yīng)用及 PV 數(shù)據(jù)遷移至 ACK 集群,并支持豐富的云下存儲(chǔ)類型。
通過備份中心來實(shí)現(xiàn)已有 Kubernetes 集群遷移的主要步驟如下:
-
在線下 Kubernetes 創(chuàng)建集群(例如,Rancher 集群),將線下集群接入注冊(cè)集群。具體操作,請(qǐng)參見創(chuàng)建注冊(cè)集群并接入本地?cái)?shù)據(jù)中心集群;
-
云上通過 ACK 創(chuàng)建托管版集群,部署備份服務(wù)組件;
-
云下納管集群(即注冊(cè)集群)安裝備份組件,并通過備份中心備份線下集群的應(yīng)用及 PV 數(shù)據(jù),具體操作,請(qǐng)參見創(chuàng)建備份任務(wù);
-
在云上 ACK 集群中,通過備份中心使云下應(yīng)用和數(shù)據(jù)的備份,在云上進(jìn)行恢復(fù)。
在數(shù)據(jù)搬遷部分,可靠遷移是關(guān)鍵。目前備份中心支持的云下存儲(chǔ)類型為:
- 數(shù)據(jù)中心本地塊存儲(chǔ) SAN、Ceph OBD 及本地盤 LVM 等。
- 數(shù)據(jù)中心文件系統(tǒng) HostPath、NFS、NetApp、GlusterFS 及 CephFS 等。
- 數(shù)據(jù)中心本地對(duì)象存儲(chǔ) Ceph S3 等。
通過備份中心,可以將云下 Kubernetes 應(yīng)用及 PV 數(shù)據(jù)遷移到 ACK 集群,實(shí)現(xiàn)順利云原生化改造。
數(shù)據(jù)、應(yīng)用遷云完成后,需要進(jìn)一步適配監(jiān)控、日志等組件,待各個(gè)組件調(diào)試完畢通過驗(yàn)收后,可以使用智能 DNS 進(jìn)行生產(chǎn)流量的切割。
應(yīng)用改造和優(yōu)化
對(duì)于應(yīng)用改造和優(yōu)化這部分,Kubernetes 到 Kubernetes 的場(chǎng)景下,需要優(yōu)化的是去適配自動(dòng)擴(kuò)容等自建 Kubernetes 不具備的那些能力,在傳統(tǒng)應(yīng)用遷移到 ACK 的場(chǎng)景下,這部分的工作量會(huì)更大些,所以我們針對(duì)這個(gè)場(chǎng)景也輸出了一些方案,比如類似于異地多活的方案,我們把用戶傳統(tǒng)應(yīng)用環(huán)境,通常是虛擬機(jī)或者裸機(jī)環(huán)境集成到線上 ACK 部署的 Istio 網(wǎng)格中,逐步改造應(yīng)用直至業(yè)務(wù)全部切換到線上 ACK 集群。
在應(yīng)用逐步改造的這個(gè)過程中,會(huì)涉及到應(yīng)用如何容器化、網(wǎng)絡(luò)環(huán)境如何遷移以及數(shù)據(jù)遷移的問題,應(yīng)用容器化這個(gè)問題,我們可以使用SMC遷云中心來完成虛擬機(jī)轉(zhuǎn)換為容器鏡像的過程,網(wǎng)絡(luò)這部分可以通過 iptables,External,CoreDNS PrivateZone 等方式對(duì) IP 地址 DNS 域名做處理,保持原先的邏輯 IP 和域名不變,并通過 Istio 實(shí)現(xiàn)網(wǎng)絡(luò)虛擬路由和可觀測(cè)性的管理。
案例和總結(jié)
最后列舉的是部分遷云案例,其中有對(duì)高性能網(wǎng)絡(luò)有特殊需求的用戶,有做深度學(xué)習(xí)相關(guān)業(yè)務(wù)對(duì)大規(guī)模 GPU 機(jī)器有需求的用戶,也有要求裸金屬機(jī)型服務(wù)器的用戶等等。
以上這些不同用戶的不同業(yè)務(wù)場(chǎng)景在云原生化遷云方案的設(shè)計(jì)和落實(shí)上都有各自的差異性,不盡相同,需要結(jié)合 ACK 團(tuán)隊(duì)沉淀下來的最佳實(shí)踐來快速做出評(píng)估和計(jì)劃,并借助已有的一系列遷云工具快速完成業(yè)務(wù)從線下遷移上云的過程。
其他
ack-image-builder 能夠幫助用戶制作符合 ACK 集群節(jié)點(diǎn)要求的自定義鏡像
sync-repo 能夠幫助用戶快速完成容器鏡像批量遷移至 ACR(容器鏡像倉(cāng)庫(kù)服務(wù))
跨集群恢復(fù) Kunbernetes 應(yīng)用備份中心能夠幫助用戶快速把其他云廠商或者自建 Kubernetes 集群下的完整應(yīng)用遷移至 ACK 集群
相關(guān)鏈接
1)ACK(阿里云容器服務(wù)Kubernetes):
https://cs.console.aliyun.com/?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
2)derrick:
https://github.com/alibaba/derrick
3)ack-image-builder:
https://github.com/AliyunContainerService/ack-image-builder?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
4)sync-repo:
https://github.com/AliyunContainerService/sync-repo?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
5)ACR(容器鏡像倉(cāng)庫(kù)服務(wù))
https://cr.console.aliyun.com/cn-hangzhou/instances
6)備份中心
https://help.aliyun.com/document_detail/311759.html?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
7)Rancher集群
https://rancher.com/docs/rancher/v2.5/en/installation/?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
8)創(chuàng)建注冊(cè)集群并接入本地?cái)?shù)據(jù)中心集群
9)創(chuàng)建備份任務(wù)
10)ack-image-builder
https://github.com/AliyunContainerService/ack-image-builder?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
11)sync-repo
https://github.com/AliyunContainerService/sync-repo?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef
12)ACR(容器鏡像倉(cāng)庫(kù)服務(wù))
https://cr.console.aliyun.com/cn-hangzhou/instances
13)跨集群恢復(fù)Kunbernetes應(yīng)用
https://help.aliyun.com/document_detail/188871.html?spm=a2c6h.12873639.0.0.2eb53cd3L9rbef