每個人都希望他們的應用程式在Kubernetes上執行。 但是如何開始這個過程呢? 應該執行什麼步驟? 如何估算工作量?
許多開發團隊才剛剛開始他們的K8之旅。 儘管Kubernetes近年來很流行,但仍有許多組織才剛剛開始計劃遷移過程。
作為我們工作的一部分,我們在Kubernetes遷移過程中提供幫助和支援。 在這裡,我們要分享開發團隊將出色的應用程式移植到K8上應該採取的常見步驟和里程碑。 在本文中,我們重點介紹此過程的三個主要方面:
· 使App K8s就緒
· 建立CI / CD流程
· 準備Kubernetes叢集
在開始之前,值得一提的是,所有這些領域的工作都可以並行進行。
此外,我們知道每個應用程式都有其獨特的體系結構,因此可能會有自己的遷移細節。 儘管如此,我們知道每次應用遷移過程中都有一些典型的里程碑。
我們的目的是強調流程並指導您完成流程。 儘管我們無法為您在Kubernetes上的應用提供確切的架構解決方案; 您可以從以下步驟中找到更多資訊,我們很樂意回答您對此過程的疑問。
使App K8s就緒應用程式遷移過程非常簡單。 我們必須為Kubernetes部署準備每個應用程式部分。 但是同時,這是遷移過程中最模糊的部分。 由於您的應用程式可能具有應移至Kubernetes的一系列服務和流程。 但是,在許多應用程式之間仍然存在一些共同點:
1.檢視當前架構。 正確的文件甚至體系結構圖都將幫助您制定遷移計劃,估算涉及的工作並與您的管理層進行與遷移範圍有關的富有成效的對話。
如果您已記錄了應用程式的所有部分,則很幸運。 在這裡,您至少應命名將要遷移的所有元件。 此外,棘手的部分是如何整合它們。 您必須考慮應用程式中存在的所有通訊選項,無論是訊息佇列還是服務匯流排等。在此過程的這一部分中,諸如部署檢視或資料流程圖或六邊形檢視之類的通用圖將非常有用。
2.重新考慮架構。 最初,團隊通常非常熱心-讓我們遷移到Kubernetes,用微服務代替整體,讓我們重寫一切!
但是,根據經驗,我們建議一開始不要使您的旅程複雜化。 嘗試以最小的修改來移植元件,只有一些阻礙您的必要部分才需要重構。 在不了解應用架構細節的情況下,我們無法為您提供有關K8架構外觀的精確指南。 但總的來說,與標準虛擬機器託管相比,主要區別之一是您的服務將是短暫的-它們可以隨時啟動或停止。
這提供了可伸縮性,但帶來了一些需要克服的挑戰。 因此,接下來需要修改的地方-日誌記錄解決方案(移至集中式日誌記錄,例如ELK),共享記憶體和會話儲存(Redis)以及檔案儲存(外部永久卷); 以及在遷移之前需要修改的其他任何內容。
3.自動化測試。 是的,根據我們的經驗,這一點是有意的,也是必不可少的。 我們堅信,自動化文化可以節省您的時間和金錢,並保持較低的壓力水平。 您必須考慮如何測試遷移的元件。 您是否有針對他們的整合測試? 您會並行執行新版本和舊版本並比較它們的結果嗎?
4.容器化您的應用程式。 現在,實現起來並不困難。 對於許多框架和應用程式執行時,有很多現成的Docker映像。 您可以找到有關如何使用每種現代程式語言對元件進行Docker化的示例和文件。 這裡的主要工作是調整/替換/查詢將在Linux上執行的庫。 此外,可能需要更改一些程式碼。 然後,您只需準備docker檔案並測試它們是否正常工作。
5.對映到K8s物件。 Kubernetes提供了多個物件和選項,可用於託管元件,例如部署,服務,端點,作業和其他物件。 在此階段,一個有用的練習是繪製新的K8s架構的草稿併為模組選擇物件型別。
6. Kubernetes指令碼。 下一步是為元件建立Kubernetes物件。 您應該為Kubernetes部署,服務,pod,作業和其他元件編寫YAML檔案。
指令碼可以儲存在每個應用程式元件附近,也可以為這些配置建立一個單獨的儲存庫。 您可以使用minikube或Docker Desktop在本地K8s設定上準備和測試此類指令碼。 此外,您可以在此處為應用程式基礎結構的某些部分準備指令碼,例如設定RabbitMQ,Redis或任何其他要求。
7.應用程式資料庫。 在大多數情況下,您將資料庫保持不變,而僅從新的Kubernetes應用程式連線到該資料庫。 但有時,您可以包括將資料庫遷移到本機Kubernetes技術的過程。 例如使用Crunchy資料執行PostgreSQL。
一項出色且節省時間的練習是一次移植您的工作負載。 嘗試將體系結構拆分為幾個小的可部署部分。 您將從第一個小遷移中學習該過程,然後將其應用於更大的元件。
建立CI / CD流程這個階段很重要,通常不會引起人們的注意,該階段是為您對Kubernetes的更改配置一個交付管道。 下圖顯示了所需的CI / CD過程。
1.從原始碼儲存庫中的新更改開始。
2.然後,CI / CD引擎啟動並執行構建過程。
3.構建的結果是帶有應用程式檔案的可立即部署的Docker映像。 該映像已推送到Docker Registry。
4. CI / CD引擎通過更新相應K8s部署的映像版本來觸發部署過程。
5. Kubernetes更新pod並從Docker登錄檔中提取一個新的應用程式映像。
我們假定您已經具有CI / CD工具,以便我們從遷移過程的下一步開始:
1.配置構建執行器
在此階段重要的是,構建過程的結果將是Docker映像。 這意味著構建跑步者必須支援Docker,並且能夠構建您的應用並將其打包到映像中。
而且,最好有一個Docker執行器,其中每個構建都在Docker內部執行。 這意味著您將能夠並行執行多個構建,並保持構建流水線清潔,而不會被多種框架和語言所淹沒。 因此,在這種情況下,您需要準備幾個具有相應框架的構建Docker映像。
2.建立或選擇Docker登錄檔
您可以在計算機上執行一些私有登錄檔,也可以使用雲提供商的其中一個登錄檔。 每個提供商都有其自己的登錄檔,它們具有相似的功能,並且易於使用,您只需要比較它們的價格即可。
3.配置CI / CD構建
在這裡,您應該為元件設定CI / CD流程,無論是手動還是您的工具支援配置指令碼。 最好的方法是編寫描述每個應用程式儲存庫中構建過程的配置檔案(YAML或其他)。
您將為第一個應用程式部分啟動程式碼配置過程,然後將指令碼重用於其他部分將非常方便。 另外,一個有用的最佳實踐是擁有一個單獨的原始碼儲存庫來儲存常用應用程式和元件的構建和部署模板。
4.建立Kubernetes部署指令碼
此里程碑的最後一步是觸發Kubernetes Admin API來啟動部署過程。 通常,為此使用Python或Shell指令碼。
例如,對於Python,有一些Kube API客戶端庫可用於Kubernetes訪問及其資源操縱。 這些指令碼的目標是使用新的映像版本更新相應的K8s部署物件,然後Kubernetes將完成其餘工作。 您可以在本地K8s設定或開發叢集(如果已準備就緒)上開始測試此類指令碼。
準備Kubernetes叢集Kubernetes叢集配置是一個複雜的過程,涉及多個里程碑。 最佳實踐建議是從一個簡單的版本開始,然後再發展。 從一開始就不要嘗試做太多事情; 僅選擇所需的元件。
至於叢集的建立,您可以檢查官方文件並在此處選擇一些受信任的提供程式,例如Rancher或類似技術。 此外,所有大型雲提供商都提供了託管Kubernetes叢集的版本,只需單擊幾下即可執行和執行該叢集。
我們無法為Kubernetes設定提供確切的安裝說明或指令碼,因為每個應用程式的配置和遷移都略有不同。 但是在這裡,我們列出了您應該為叢集考慮的元件或工件。
· 友好的控制面板使用。 您需要一個管理面板來管理所有Kubernetes部件。 這取決於您如何建立叢集。 一些工具已經為您提供了一個很好的K8s管理UI。 但是以防萬一,這裡是一些安裝kubeadm的步驟。
· 配置的安全性和策略。 建立叢集安全性並組織使用者訪問控制。 在這裡,官方文件為您提供了有關什麼以及如何配置的概述。
· 網路流量和DNS。 網路是叢集的重要組成部分。 從一些基本的網路策略開始,然後設定入口流量,包括DNS配置。
· 叢集監控。 收集指標併為其配置相應的警報。 這裡的標準組合是Prometheus + Grafana。 或一些現成的產品,例如New Relic,Dynatrace,DataDog等。
· 可用的卷儲存。 大多數應用程式都有一些檔案要儲存。 在這種情況下,您必須為他們提供一些持久的彈性儲存。 例如,基於NFS甚至AWS EBS或其他型別的儲存類配置卷。
· Secret儲存。 在這裡可以更有效地儲存敏感資料,例如連線字串,密碼等。 同樣,Kubernetes在這裡為您提供了一些選項,例如其自己的Secret物件,或者您可以使用其他替代方案,例如AWS Secrets Manager。
· 集中的日誌儲存。 應用程式最關鍵的部分之一是日誌記錄,您必須知道服務中正在發生什麼。 在這裡,您可以建立自己的日誌記錄解決方案,例如,基於ELK。 或使用某些日誌產品Graylog,Logz.io,Splunk等。
· Kubernetes名稱空間。 最後但並非最不重要的是K8s名稱空間。 您必須考慮如何組織群集資源。 您將在預設名稱空間中工作還是以自己的資源配額建立多個名稱空間?
此處的預期結果是將所有Kubernetes配置都作為原始碼,這與IaC(基礎架構即程式碼)方法相容。 通常,您有一個單獨的儲存庫,用於儲存所有Kubernetes物件的指令碼。 您可以從普通的Kubernetes指令碼開始,然後將它們組合到Helm Charts中。
Kubernetes的一個優點是您可以在任何環境中重新建立叢集,它具有相同的API,無論您在裸機上還是在雲提供商內部執行它。
> Migrate to Kubernetes
摘要我們希望這些遷移步驟可以幫助您了解您的應用程式是否已準備好Kubernetes,以及將其移植到Kubernetes會有多困難。 您可以使用它們來制定自己的K8s遷移計劃,並在以後進行平滑遷移。 不斷完善您的應用!
(本文翻譯自Illia Saveliev的文章《How to migrate your app to Kubernetes?》,參考:https://medium.com/greenm/how-to-migrate-your-app-to-kubernetes-612ce01c6c9)