本文是在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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。