本文是在CentOS7環(huán)境上焊唬,搭建微服務(wù)集群系統(tǒng)簡(jiǎn)單樣例豫缨。
架構(gòu)描述:
k8s集群:1臺(tái)master node,2臺(tái)slave node摔桦,均安裝maven炮车、docker、k8s環(huán)境酣溃;k8s集群系統(tǒng)用來(lái)保證單個(gè)服務(wù)指定數(shù)量的微服務(wù)實(shí)例副本Pod瘦穆。
微服務(wù)系統(tǒng):微服務(wù)注冊(cè)中心fudan-eureka部署1個(gè)副本Pod、微服務(wù)fudan-service部署2個(gè)副本Pod赊豌、微服務(wù)fudan-consumer1部署3個(gè)副本Pod扛或。其中微服務(wù)fudan-consumer1中的getUser接口方法會(huì)調(diào)用微服務(wù)fudan-service1中的sayHello接口方法。
1碘饼、編寫微服務(wù)注冊(cè)中心fudan-eureka并部署到K8S
1.1 創(chuàng)建微服務(wù)注冊(cè)中心工程
使用Eclipse+Maven+Springboot編寫注冊(cè)中心工程實(shí)現(xiàn):
使用Eclipse+Maven+Springboot編寫微服務(wù)fudan-service1工程實(shí)現(xiàn):main方法類上增加EnableEurekaServer注解熙兔,標(biāo)注加載微服務(wù)注冊(cè)中心。
工程截圖如下所示:
注冊(cè)中心無(wú)業(yè)務(wù)代碼艾恼,僅有啟動(dòng)類App.java
注意:在啟動(dòng)類上加入注解@EnableEurekaServer住涉,標(biāo)注加載微服務(wù)注冊(cè)中心。
配置文件application.properties:
Dockerfile文件钠绍,用于mvn docker打包鏡像:
Maven pom.xml文件:
1.2 部署微服務(wù)注冊(cè)中心eureka到K8S集群
1. 將fudan-eureka項(xiàng)目完整上傳到CentOS機(jī)器上
2. 編譯打包鏡像舆声;
首先到fudan-eureka項(xiàng)目文件夾下,依次執(zhí)行命令:
命令:mvn package docker:build
編譯打包鏡像成功:
查看images鏡像:
3. 鏡像上傳到Docker Hub(或阿里云Hub)
命令:
docker push zhang0908/fudan-eureka:V1
備注:docker需要先登錄:docker login
docker hub上查看上傳的fudan-eureka鏡像:
4. K8S集群?jiǎn)?dòng)注冊(cè)中心
創(chuàng)建集群部署文件vi fudan-eureka.yaml
備注:此處此處為簡(jiǎn)單起見(jiàn)柳爽,pod副本數(shù)量設(shè)為1媳握。但在商用中,為保證注冊(cè)中心的高可靠性磷脯,一般部署多個(gè)eureka注冊(cè)中心蛾找,并相互注冊(cè)。
對(duì)外訪問(wèn)類型為NodePort赵誓,端口為31071.
集群端口為9999
啟動(dòng)注冊(cè)中心:
命令:kubectl apply -f fudan-eureka.yaml
查看pod副本和service
命令:
kubectl get pods -o wide
kubectl get svc -o wide
注意:K8S集群內(nèi)部是使用clusterIp+port進(jìn)行通訊打毛,如上圖所示柿赊,使用kubectl get svc命令查詢到fudan-eureka-service服務(wù)的cluster-ip:10.96.99.188,端口port:9999幻枉,在微服務(wù)fudan-service1和fudan-consumer1工程的application.properties需要配置此IP和Port闹瞧,用于微服務(wù)向注冊(cè)中心注冊(cè)通訊。
5. 測(cè)試和驗(yàn)證
如fudan-eureka.yaml部署文件所示展辞,該服務(wù)注冊(cè)中心對(duì)外訪問(wèn)方式為NortPort,端口為31071万牺。
此處可以使用nginx ingress多反向代理罗珍,通過(guò)域名訪問(wèn)注冊(cè)中心,此處不做詳述脚粟。
No instances覆旱,暫無(wú)微服務(wù)注冊(cè)實(shí)例。
2核无、編寫微服務(wù)fudan-service1并部署到K8S
2.1 創(chuàng)建微服務(wù)fudan-service1工程
使用Eclipse+Maven+Springboot編寫微服務(wù)fudan-service1工程實(shí)現(xiàn):main方法類上增加EnableDiscoveryClient注解扣唱,啟動(dòng)后根據(jù)application.properties中配置的eureka注冊(cè)中心地址進(jìn)行服務(wù)注冊(cè)。
在Configuration中創(chuàng)建RestTemplate的Bean团南,并增加@LoadBalanced注解噪沙,標(biāo)注啟用Ribbon負(fù)載均衡。
增加sayHello接口方法:
配置文件application.properties:
Dockerfile文件:
pom.xml文件:
2.2 部署微服務(wù)fudan-service1到K8S集群
1. 將fudan-service1項(xiàng)目完整上傳到CentOS機(jī)器上
2. 編譯打包鏡像吐根;
首先到fudan-service1項(xiàng)目文件夾下正歼,依次執(zhí)行命令:
mvn package docker:build
查看images鏡像:
3. 鏡像上傳到Docker Hub(或阿里云Hub)
命令:docker push zhang0908/fudan-service1:V1
備注:docker需要先登錄:docker login
docker hub中查看上傳的fudan-service1鏡像:
4. K8S集群?jiǎn)?dòng)微服務(wù)fudan-service1
創(chuàng)建集群部署文件,命令:
vi fudan-service.yaml
pod副本數(shù)量為2(K8S集群會(huì)實(shí)時(shí)監(jiān)控并確保有2個(gè)實(shí)例副本可用)拷橘,NodePort端口為31072局义,若該端口不指定,k8s會(huì)自動(dòng)分配冗疮。
啟動(dòng)注微服務(wù)fudan-service1:
命令:kubectl apply -f fudan-service1.yaml
查看pod副本和service
命令:
kubectl get pods -o wide
kubectl get svc -o wide
5. 測(cè)試和驗(yàn)證
查看eureka微服務(wù)注冊(cè)中心萄唇,確認(rèn)2個(gè)fudan-service微服務(wù)實(shí)例已注冊(cè)到eureka中:
如fudan-service1.yaml部署文件所示,該微服務(wù)對(duì)外訪問(wèn)方式為NodePort术幔,端口為31072另萤,測(cè)試驗(yàn)證sayHello接口方法:
3、編寫微服務(wù)fudan-consumer1并部署到K8S
3.1 創(chuàng)建微服務(wù)fudan-consumer1工程
使用Eclipse+Maven+Springboot編寫微服務(wù)fudan-consumer1工程實(shí)現(xiàn):
main方法類上增加EnableDiscoveryClient注解诅挑,啟動(dòng)后根據(jù)application.properties中配置的eureka注冊(cè)中心地址進(jìn)行服務(wù)注冊(cè)仲墨。
在Configuration中創(chuàng)建RestTemplate的Bean,并增加@LoadBalanced注解揍障,標(biāo)注啟用Ribbon負(fù)載均衡器目养。
增加getUser和test接口方法:
配置文件application.properties:
配置文件Dockerfile:
pom.xml文件:
3.2 部署微服務(wù)fudan-consumer1到K8S集群
1. 將fudan-consumer1項(xiàng)目完整上傳到CentOS機(jī)器上
2. 編譯打包鏡像;
首先到fudan-consumer1項(xiàng)目文件夾下毒嫡,執(zhí)行命令:
命令:
mvn package docker:build
查看images鏡像:
docker images
3. 鏡像上傳到Docker Hub(或阿里云Hub)
命令:docker push zhang0908/fudan-consumer1:v1
備注:docker需要先登錄:docker login
4. K8S集群?jiǎn)?dòng)注冊(cè)中心
創(chuàng)建集群部署文件
命令:vi fudan-consumer1.yaml
pod副本數(shù)量為3(K8S集群會(huì)實(shí)時(shí)監(jiān)控并確保有3個(gè)實(shí)例副本可用)癌蚁,NodePort端口為31073幻梯,若該端口不指定,k8s會(huì)自動(dòng)分配努释。
啟動(dòng)微服務(wù)fudan-consumer1:
命令:kubectl apply -f fudan-consumer1.yaml
查看pod副本和service
命令:
kubectl get pods -o wide
kubectl get svc -o wide
5. 測(cè)試和驗(yàn)證
查看eureka微服務(wù)注冊(cè)中心碘梢,確認(rèn)3個(gè)fudan-consumer1微服務(wù)實(shí)例已注冊(cè)到eureka中:
如fudan-consumer1.yaml部署文件所示,該微服務(wù)對(duì)外訪問(wèn)方式為NodePort伐蒂,端口為31073煞躬,測(cè)試驗(yàn)證getUser接口方法:
getUser接口方法會(huì)調(diào)用微服務(wù)fudan-service1中的sayHello方法。
至此逸邦,在k8s集群中部署微服務(wù)系統(tǒng)樣例完畢恩沛。