本文是在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:
Dockerfile文件,用於mvn docker打包鏡像:
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
啟動注冊中心:
命令: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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
