docker+k8s+springcloud微服務集群部署實例


本文是在CentOS7環境上,搭建微服務集群系統簡單樣例。

架構描述:

k8s集群:1台master node,2台slave node,均安裝maven、docker、k8s環境;k8s集群系統用來保證單個服務指定數量的微服務實例副本Pod。

微服務系統:微服務注冊中心fudan-eureka部署1個副本Pod、微服務fudan-service部署2個副本Pod、微服務fudan-consumer1部署3個副本Pod。其中微服務fudan-consumer1中的getUser接口方法會調用微服務fudan-service1中的sayHello接口方法。

 
系統架構

 

1、編寫微服務注冊中心fudan-eureka並部署到K8S

1.1 創建微服務注冊中心工程

使用Eclipse+Maven+Springboot編寫注冊中心工程實現:

使用Eclipse+Maven+Springboot編寫微服務fudan-service1工程實現:main方法類上增加EnableEurekaServer注解,標注加載微服務注冊中心。

工程截圖如下所示:

 
微服務注冊中心項目工程

注冊中心無業務代碼,僅有啟動類App.java

注意:在啟動類上加入注解@EnableEurekaServer,標注加載微服務注冊中心。

 
注冊中心

配置文件application.properties:

 
項目配置文件application.propeties

Dockerfile文件,用於mvn docker打包鏡像:

 
腳本Dockerfile

Maven pom.xml文件:

 
 

1.2 部署微服務注冊中心eureka到K8S集群

1. 將fudan-eureka項目完整上傳到CentOS機器上

2. 編譯打包鏡像;

首先到fudan-eureka項目文件夾下,依次執行命令:

命令:mvn package docker:build

 

 
 

編譯打包鏡像成功:

 
編譯打包鏡像成功

查看images鏡像:

 
 

3. 鏡像上傳到Docker Hub(或阿里雲Hub)

命令:

docker push zhang0908/fudan-eureka:V1

備注:docker需要先登錄:docker login

 
 

docker hub上查看上傳的fudan-eureka鏡像:

 
 

4. K8S集群啟動注冊中心

創建集群部署文件vi fudan-eureka.yaml

備注:此處此處為簡單起見,pod副本數量設為1。但在商用中,為保證注冊中心的高可靠性,一般部署多個eureka注冊中心,並相互注冊。

對外訪問類型為NodePort,端口為31071.

集群端口為9999

 
fudan-eureka.yaml

啟動注冊中心:

命令:kubectl apply -f fudan-eureka.yaml

 
 

查看pod副本和service

命令:

kubectl get pods -o wide

kubectl get svc -o wide

 
 

注意:K8S集群內部是使用clusterIp+port進行通訊,如上圖所示,使用kubectl get svc命令查詢到fudan-eureka-service服務的cluster-ip:10.96.99.188,端口port:9999,在微服務fudan-service1和fudan-consumer1工程的application.properties需要配置此IP和Port,用於微服務向注冊中心注冊通訊。

5. 測試和驗證

如fudan-eureka.yaml部署文件所示,該服務注冊中心對外訪問方式為NortPort,端口為31071。

此處可以使用nginx ingress多反向代理,通過域名訪問注冊中心,此處不做詳述。

 
服務注冊中心

No instances,暫無微服務注冊實例。

2、編寫微服務fudan-service1並部署到K8S

2.1 創建微服務fudan-service1工程

使用Eclipse+Maven+Springboot編寫微服務fudan-service1工程實現:main方法類上增加EnableDiscoveryClient注解,啟動后根據application.properties中配置的eureka注冊中心地址進行服務注冊。

 
 

在Configuration中創建RestTemplate的Bean,並增加@LoadBalanced注解,標注啟用Ribbon負載均衡。

 
 

增加sayHello接口方法:

 
 

配置文件application.properties:

 
 

Dockerfile文件:

 

 
 

pom.xml文件:

 
 

 

2.2 部署微服務fudan-service1到K8S集群

 

1. 將fudan-service1項目完整上傳到CentOS機器上

2. 編譯打包鏡像;

首先到fudan-service1項目文件夾下,依次執行命令:

mvn package docker:build

 
 
 
 

查看images鏡像:

 
 

3. 鏡像上傳到Docker Hub(或阿里雲Hub)

命令:docker push zhang0908/fudan-service1:V1

備注:docker需要先登錄:docker login

 
 

docker hub中查看上傳的fudan-service1鏡像:

 
 

4. K8S集群啟動微服務fudan-service1

創建集群部署文件,命令:

vi fudan-service.yaml

pod副本數量為2(K8S集群會實時監控並確保有2個實例副本可用),NodePort端口為31072,若該端口不指定,k8s會自動分配。

 
 

啟動注微服務fudan-service1:

命令:kubectl apply -f fudan-service1.yaml

 
 

查看pod副本和service

命令:

kubectl get pods -o wide

kubectl get svc -o wide

 
 

5. 測試和驗證

查看eureka微服務注冊中心,確認2個fudan-service微服務實例已注冊到eureka中:

 
 

如fudan-service1.yaml部署文件所示,該微服務對外訪問方式為NodePort,端口為31072,測試驗證sayHello接口方法:

 
 

3、編寫微服務fudan-consumer1並部署到K8S

3.1 創建微服務fudan-consumer1工程

使用Eclipse+Maven+Springboot編寫微服務fudan-consumer1工程實現:

main方法類上增加EnableDiscoveryClient注解,啟動后根據application.properties中配置的eureka注冊中心地址進行服務注冊。

 
 

在Configuration中創建RestTemplate的Bean,並增加@LoadBalanced注解,標注啟用Ribbon負載均衡器。

 
 

增加getUser和test接口方法:

 
 

配置文件application.properties:

 
 

配置文件Dockerfile:

 
 

pom.xml文件:

 
 

3.2 部署微服務fudan-consumer1到K8S集群

1. 將fudan-consumer1項目完整上傳到CentOS機器上

2. 編譯打包鏡像;

首先到fudan-consumer1項目文件夾下,執行命令:

命令:

mvn package docker:build

 
 
 
 

查看images鏡像:

docker images

 
 

3. 鏡像上傳到Docker Hub(或阿里雲Hub)

命令:docker push zhang0908/fudan-consumer1:v1

備注:docker需要先登錄:docker login

 
 
 
 

 

4. K8S集群啟動注冊中心

創建集群部署文件

命令:vi fudan-consumer1.yaml

pod副本數量為3(K8S集群會實時監控並確保有3個實例副本可用),NodePort端口為31073,若該端口不指定,k8s會自動分配。

 
 

啟動微服務fudan-consumer1:

命令:kubectl apply -f fudan-consumer1.yaml

 
 

查看pod副本和service

命令:

kubectl get pods -o wide

kubectl get svc -o wide

 
 

5. 測試和驗證

查看eureka微服務注冊中心,確認3個fudan-consumer1微服務實例已注冊到eureka中:

 
 

如fudan-consumer1.yaml部署文件所示,該微服務對外訪問方式為NodePort,端口為31073,測試驗證getUser接口方法:

getUser接口方法會調用微服務fudan-service1中的sayHello方法。

 
 

 

至此,在k8s集群中部署微服務系統樣例完畢。



作者:飛魚007
鏈接:https://www.jianshu.com/p/9f36d3fe783b
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM