使用DHorse釋出SpringBoot專案到K8S

tiandizhiguai發表於2023-11-20

前言

在介紹DHorse的操作之前,先來介紹一下使用k8s釋出應用的步驟,以SpringBoot應用為例進行說明。

1.首先從程式碼倉庫下載程式碼,比如GitLab;

2.接著進行構建,比如使用Maven;

3.如果要使用k8s作為編排,還需要把步驟2產生的包製作成映象,比如使用Docker;

4.上傳步驟3的映象到遠端倉庫,比如Harhor;

5.最後,下載映象並編寫Deployment檔案部署到雲叢集,比如k8s;

DHorse簡化了以上步驟的流程,使用它部署應用變得更簡單,下面詳細介紹。

DHorse操作說明

配置程式碼倉庫

如圖1所示:

圖1

配置映象倉庫

如圖2所示:

圖2

配置叢集

進入“叢集管理”選單,可以進行新增叢集操作,假如已經部署好k8s叢集,則可以新增到DHorse,如圖4所示:

圖4

可以透過如下方式生成k8s的認證令牌:

  1. 小於1.24版本
kubectl create serviceaccount dhorse-admin -n kube-system
kubectl create clusterrolebinding dhorse-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dhorse-admin
secret=$(kubectl get -n kube-system serviceaccounts dhorse-admin -o jsonpath='{.secrets[0].name}')
kubectl get -n kube-system secrets $secret -o jsonpath='{.data.token}' | base64 -d
  1. 大於等於1.24版本
kubectl create serviceaccount dhorse-admin -n kube-system
kubectl create clusterrolebinding dhorse-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dhorse-admin
kubectl create token dhorse-admin -n kube-system --duration 867240h

建立應用

在“應用管理”選單下,以新增SpringBoot應用為例(https://jihulab.com/tiandizhiguai/hello-springboot),如圖6、圖7所示:

圖6

圖7

其中,圖6中的“程式碼倉庫地址”是對應程式碼倉庫定義的專案路徑或專案編號,比如GitLab的專案ID如圖8所示:

圖8

新增應用完成以後,就可以在“釋出管理”選單下看到分支資訊,如圖9所示:

圖9

可以看出,在分支列表裡可以分別對每個分支進行“構建版本”操作,以master分支構建為例,如圖10所示:

圖10

然後進入“版本列表”選單,可以看到產生了一條版本記錄,狀態是構建中,同時也可以檢視該版本的構建日誌,如圖11所示:

圖11

特別注意,第一次構建版本時由於Maven需要下載依賴的包,速度會比較慢,需要耐心等待。接下來,就可以建立一個環境,然後使用剛才構建的版本釋出該環境。

釋出服務

進入“環境管理”選單,然後進行新增環境操作,如圖12所示:

圖12
其中,“環境模板”選項的值可以在“系統配置-環境模板”選單下進行配置。

儲存之後,“環境管理”列表裡會出現一條環境記錄,如果13所示:

圖13

接著,可以在“操作”列點選“部署”按鈕,如圖14所示:

圖14

選擇剛才的版本,並點選“確認部署”。然後,進入到“部署歷史”選單下,可以看到產生了一條部署記錄,同樣可以檢視該記錄的日誌,如圖15所示:

圖15

等待部署完成以後,進入“副本管理”選單,可以看到副本(Pod)的相關資訊,如果16所示:

圖16

至此,一個完整的釋出流程完成了。最後,再來看看如何訪問hello應用的服務。

訪問服務

叢集內訪問

假如hello應用裡有一個/hello的api。

  1. 訪問單個副本的服務

可以透過“副本IP:埠”進行訪問,該方式在副本或Node節點都可以訪問通,如圖16所示的IP,訪問示例:http://10.32.1.153:8080/hello

  1. 透過負載均衡

DHorse在部署應用以後,會為每個應用啟動一個ClusterIP的service服務,那麼就可以在副本里透過“應用名稱-環境標識.名稱空間:服務埠”的形式來訪問其他應用的服務,訪問示例如:http://hello-qa.default:8080/hello ,叢集內服務之間的呼叫,推薦該方式。

叢集外訪問

兩種方式:

  1. 透過建立NodePort或LoadBalancer,目前DHorse不支援,如果需要可以手動在叢集內建立;

  2. 打通叢集內外的網路,該方式需要運維的支援,如:透過靜態路由轉發等。叢集內外網路互通以後,在叢集外部就可以直接訪問副本的IP了。

相關文章