使用SDM快速部署Spring Boot應用到Kubernetes

banq發表於2018-09-20
你可能聽說過Spring Boot和Kubernetes。但是您是否嘗試過從頭開始將Spring Boot應用程式部署到Kubernetes叢集?

即使在使用Kubernetes超過3年後,想到我需要編寫的YAML數量 - 或者複製和修改 - 來執行新服務,我仍然害怕。幸運的是,Atomist可以消除這種痛苦。

在這篇文章中,我將展示如何在幾分鐘內將新的或現有的Spring Boot應用程式部署到Kubernetes叢集,而無需編寫任何YAML,Dockerfile或shell指令碼。您將獲得沒有任何CI檔案的強大CD。

本文假設您可以訪問Kubernetes叢集和正確配置的kubectl,並且您可以在本地模式下執行Atomist Software Delivery Machine(簡稱SDM)(需要Node.js> = 8.1.0和npm)。如果您的系統滿足這些要求,則可以跳過下一部分。

安裝Minikube
探索Kubernetes的最快方式是透過Minikube,它允許您在膝上型電腦上設定和執行群集。如果您沒有準備好使用Kubernetes群集,請按照以下說明設定。

對於每個作業系統,安裝Minikube都是不同的,因此我
建議遵循安裝指南。以下是允許我在Mac上安裝Minikube的步驟:

1. 為作業系統安裝VirtualBox或其他受支援的虛擬機器監控程式
2. 安裝Kubernetes命令列客戶端kubectl
3. 透過執行安裝Minikube with Homebrew brew cask install minikube

安裝完成後,啟動Minikube以建立新群集:

$ minikube start

安裝ingress外掛:

$ minikube addons enable ingress

現在執行以下命令檢查本地Kubernetes叢集的狀態:

$ kubectl get pods --all-namespaces

幾分鐘後,所有系統內部窗格都應顯示Running狀態,並且已準備好1/1。

安裝Atomist CLI
按如下方式安裝Atomist CLI:

$ npm install -g @atomist/cli

如果還沒有Node.js和npm,請參閱Node.js 安裝指南。有關Atomist CLI的更多詳細資訊,請參閱開發人員快速入門。

建立軟體交付計算機
當地SDM是一個程式:做繁重的事情,把
你的Spring應用程式轉到到一個Docker映象,並將其部署到Kubernetes叢集。使用以下命令建立新的SDM:

$ atomist create sdm

從可能的SDM選項列表選擇spring to k8,並輸入GitHub的組織和儲存庫名稱。(此時我們實際上並沒有向GitHub提交任何內容。)

建立SDM後,切換到建立SDM的目錄。
預設情況下,它將$HOME/atomist/<owner>/<repository>. 透過執行以下命令啟動SDM:

$ atomist start --local

在SDM編譯和啟動時,開啟另一個終端並啟動Atomist feed監聽器,這將允許您使用剛剛啟動的SDM執行構建,停靠和部署專案的過程:

$ atomist feed --goals

部署Spring Boot示例專案
現在新的SDM正在執行,我們可以使用它從Spring Boot Rest 種子專案建立一個新的Spring Boot 專案:

$ atomist create spring

此命令將建立一個Spring Boot專案並將其提交到本地Git儲存庫中$HOME/atomist/<owner>/<repository>。SDM將對此儲存庫上的提交作出反應,將Maven構建和測試,docker構建和部署等目標安排到Minikube叢集中。

然後deploy to testing目標已經完成,Spring Boot應用程式應起來了,並在Kubernetes叢集開始接受訪問。您可以透過執行來驗證這一點:

$ kubectl get pods -n testing

當pod處於Running狀態並顯示就緒計數時,就可以透過導航到Atomist feed檢視中輸出的URL來進入應用端點。在當前這種情況下,它是:

http://spring-rest.atomist.testing.192.168.99.100.nip.io

如果該URL無法解析,則可能是您的ISP或DNS阻止了此類萬用字元地址,在這種情況下,你必須向本地/etc/hosts檔案新增一個條目,以將主機名對映到本地Minikube IP地址。

spring-rest.atomist.testing.192.168.99.100.nip.io 192.168.99.100

從現在開始,如果本地SDM正在執行,每次提交到Spring Boot應用程式都會觸發向Kubernetes叢集的交付。

現在我們已經成功地將一個Spring Boot應用程式部署到了Kubernetes。


Deploy your Spring Boot application to Kubernetes

相關文章