微服務架構是一項在雲中部署應用和服務的新技術。大部分圍繞微服務的爭論都集中在容器或其餘技術是否能很好的實施微服務,而紅帽說API應該是重點。前端
微服務能夠在"本身的程序"中運行,並經過"輕量級設備與HTTP型API進行溝通"。關鍵在於該服務能夠在本身的程序中運行。經過這一點咱們就能夠將服務公開與微服務架構(在現有系統中分佈一個API)區分開來。在服務公開中,許多服務均可以被內部獨立進程所限制。若是其中任何一個服務須要增長某種功能,那麼就必須縮小進程範圍。在微服務架構中,只須要在特定的某種服務中增長所需功能,而不影響總體進程的架構。
微服務是什麼?java
微服務是一種軟件設計風格,開發人員在開發項目時,是一種微服務這種標準去設計的,這種的設計風格是一種將單體的應用,拆分爲多個小的組件去開發,那每一個組件是獨立的部署,獨立的測試,服務之間採用輕量級的通訊node
微服務的特色mysql
服務的組件化nginx
每一個服務獨立開發、部署、有效避免一個服務的修改引發整個系統從新部署。git
技術棧靈活github
約定通訊方式,使得服務自己功能實現對技術要求再也不那麼敏感,能夠根據不停語言進行開發spring
獨立部署sql
每一個微服務獨立部署,加快部署速度,方便擴展,比起單體應用來說要小,輕量級的,方便快速部署,擴展docker
擴展性強
每一個微服務能夠部署多個,沒有多少依賴,而且有負載均衡能力,好比一個服務部署一個副本或5個副本,經過k8s能夠更好的去擴展咱們的應用
獨立數據
每一個微服務有獨立的基本組件,例如數據庫、緩存等,可能有不一樣的開放人員,不依賴
微服務不足
溝通成本:因爲組件都是分開來開發的,不一樣的項目組,溝通起來不方便,單體應用就是集中起來開發的
數據一致性:保證這個數據,獨立的組件數據是一致性。
運維成本:虛擬機部署,須要考慮組件性,調用關係,監控,配置
內部架構複雜性:分佈式的,須要輕量級的通訊,rbac,MQ,還有不少的數據庫。
單體應用 vs 微服務
單體架構優點 單體架構不足
易於部署 代碼膨脹,難以維護
易於測試 構建、部署成本大、新人上手難
單體應用適合於輕量級的應用,不提供複雜的應用
微服務適合比較大的應用,複雜一些的
java微服務框架
spring Boot 是獨立的
spring cloud ,基於spring boot的
Dubbo 阿里巴巴的開源微服務框架,經過rbc實現組件之間的通訊
爲何要用註冊中心
須要記錄一個或者多個微服務多個副本接口地址
須要實現一個或者多個微服務多個副本負載均衡
須要判斷一個或者多個微服務的副本是否可用
主流注冊中心,Eureka,Nacos
不一樣環境如何區分配置文件
第一種:java-jar --spring.profile.active=dev xxx.jar
第二種:統一的配置中心,例如攜程的Apollo,百度的Disconf,動態根據不一樣的環境進行配置,頁面進行管理,須要二次開發,
項目遷移到k8s平臺是怎樣的流程
咱們先舉個例子瞭解一下大概的一個怎樣的流程
1製做鏡像--->2控制管理pod--->3暴露應用--->4對外發布應用--->5日誌/監控
製做鏡像{ 應用程序
{ 運行環境
{ 文件系統
控制器
deployment :無狀態部署
statefulset :有狀態部署
Daemonset :守護進程部署
job & cronjob:批處理
暴露應用
service定義pod的邏輯集合,提供服務發現,只要加進這組就能發現
提供負載均衡
支持cluster ip nodeport loadbalancer三種類型
底層實現iptables/ipvs兩種網絡模式
經過label關聯pod
使用Coredns解析service名稱
對外發布應用
ingress
經過service關聯pod
基於域名訪問
經過ingress controller實現pod的負載均衡
支持tcp、udp 4層和http7層
pod數據持久化
容器部署過程當中通常有如下三種數據
啓動時須要的初始數據,能夠是配置文件
啓動過程當中產生的臨時數據,該數據須要多個容器間共享
啓動過程當中產生的持久化數據
這裏只作演示,以及在k8s中如何部署微服務,以及實現步驟和思路,但願對你有所幫助
主機使用ip:
192.168.30.21 k8s-master 192.168.30.22 k8s-node1 192.168.30.23 k8s-node2 192.168.30.24 harbor-mysql
Dev1 交付代碼
Dev2 編寫Dockerfile構建鏡像
Dev3 k8s資源編排
Dev4 微服務鏈路監控
Dev5 新功能測試
Master 最終上線
1、代碼編譯構建(Maven)
拉取項目代碼
代碼分支:[root@k8s-master ~]# git clone -b dev https://github.com/xxxxx/simple-microservice
聲明:交付的分支
simple-microservice-dev1
[root@k8s-master ~]# ls anaconda-ks.cfg simple-microservice-dev2 simple-microservice-master 模板 文檔 桌面 initial-setup-ks.cfg simple-microservice-dev3 yum.sh 視頻 下載 simple-microservice-dev1 simple-microservice-dev4 公共 圖片 音樂 編譯須要安裝jdk , jdk版本要看開發那邊使用什麼,注意一下。我這裏用的1.8.0
用maven去編譯項目
Centos7默認有openjdk的包
[root@k8s-master ~]# yum install java-1.8.0-openjdk maven -y 軟件包 1:java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64 已安裝
而且是最新版本
軟件包 maven-3.0.5-17.el7.noarch 已安裝而且是最新版本
查看安裝的jdk版本
[root@k8s-master ~]# java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
查看maven啓動文件
[root@k8s-master ~]# mvn mvn mvnDebug mvnyjp
進行編譯:
進入源代碼裏,咱們先進入交付的分支,開發工程師原封不動的把源代碼交給咱們,而後咱們運維工程師進行編譯構建,把源代碼打成jar包
[root@k8s-master ~]# cd simple-microservice-dev1 [root@k8s-master simple-microservice-dev1]# ls basic-common eureka-service LICENSE order-service portal-service README.md db gateway-service lombok.config pom.xml product-service stock-service
Maven項目對象模型(POM),能夠經過一小段描述信息來觀念裏項目的構建,報告和文檔的項目管理工具軟件
mvn clean package -D maven.test.skip=true -P prod mvn clean package:清除目錄中生成的結果,作一個清除,從新打新的包。 -D maven.test.skip: 跳過單元測試,寫的測試用例,若是寫的有問題,是編譯不過去的 -P prod: 使用哪一套配置文件 [root@k8s-master simple-microservice-dev1]# mvn clean package -D maven.test.skip=true
若是代碼沒問題就會如下面的呈現,有問題就能夠去找研發那邊
運行不少的輸出,構建中會在網上拉取須要的依賴包,
[INFO]
[INFO] --- spring-boot-maven-plugin:2.0.9.RELEASE:repackage (default) @ portal-service ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] simple-microservice ............................... SUCCESS [13.208s]
[INFO] basic-common ...................................... SUCCESS [0.002s]
[INFO] basic-common-core ................................. SUCCESS [6:34.870s]
[INFO] gateway-service ................................... SUCCESS [5:15.194s]
[INFO] eureka-service .................................... SUCCESS [30.681s]
[INFO] product-service ................................... SUCCESS [0.014s]
[INFO] product-service-api ............................... SUCCESS [0.677s]
[INFO] stock-service ..................................... SUCCESS [0.001s]
[INFO] stock-service-api ................................. SUCCESS [0.545s]
[INFO] product-service-biz ............................... SUCCESS [10.321s]
[INFO] stock-service-biz ................................. SUCCESS [1.787s]
[INFO] order-service ..................................... SUCCESS [0.002s]
[INFO] order-service-api ................................. SUCCESS [0.697s]
[INFO] order-service-biz ................................. SUCCESS [2.029s]
[INFO] basic-common-bom .................................. SUCCESS [0.001s]
[INFO] portal-service .................................... SUCCESS [2.454s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13:16.229s
[INFO] Finished at: Fri Aug 02 09:35:01 CST 2019
[INFO] Final Memory: 78M/392M
[INFO] ------------------------------------------------------------------------
構建完成會多出一個target,在源碼中是沒有這個target
[root@k8s-master simple-microservice-dev1]# ls basic-common eureka-service LICENSE order-service portal-service README.md db gateway-service lombok.config pom.xml product-service stock-service [root@k8s-master simple-microservice-dev1]# ls gateway-service/ pom.xml src target
order-service-api:是相關調用; order-service-biz:具體是咱們部署的
這幾個裏面都有
[root@k8s-master simple-microservice-dev1]# ls order-service/ order-service-api order-service-biz pom.xml [root@k8s-master simple-microservice-dev1]# ls product-service/ pom.xml product-service-api product-service-biz [root@k8s-master simple-microservice-dev1]# ls stock-service/ pom.xml stock-service-api stock-service-biz
查看order-service/order-service-biz/裏面有這個target;
[root@k8s-master simple-microservice-dev1]# ls pom.xml src target
target裏面有一個jar包,這個就是咱們部署的包,打包到鏡像中部署到k8s中,其餘目錄頁同樣都這個jar包,傳統項目也會生成target,目錄下有可部署的jar包
[root@k8s-master simple-microservice-dev1]# ls order-service/order-service-biz/target/ classes maven-archiver order-service-biz.jar generated-sources maven-status order-service-biz.jar.original
2、構建項目鏡像並推送到鏡像倉庫
構建鏡像使用Docker和結合Dockerfile
鏡像三類:
一、基礎鏡像,基本操做系統
二、運行環境,java就會有tomcat
三、項目鏡像,應用程序和應用程序環境,最終的鏡像,部署到任何docker上或者K8s中
將咱們構建完的jar包,打包到鏡像中
將咱們的Dockerfile放入dev1分支中,這個我沒放Dockerfile,如今把dev2分支的拿過來
[root@k8s-master ~]# cd simple-microservice-dev1 [root@k8s-master simple-microservice-dev1]# cd gateway-service/ [root@k8s-master gateway-service]# cp /root/simple-microservice-dev2/gateway-service/Dockerfile ./ [root@k8s-master gateway-service]# ls Dockerfile pom.xml src target
Dockerfile聲明:
java:8-jdk-alpine:這裏使用的是一個alpine的小Linux命令操做系統的鏡像,大約300條命令,以便測試構建用
apk add -U tzdata:這是一個時區,默認jdk中沒有時區,而後經過軟鏈接,放到系統裏面
./target/gateway-service.jar ./:拷貝dev1咱們分支下target/gateway-service.jar包放到根目錄下
EXPOSE 9999:暴露端口:9999
CMD java -jar /gateway-service.jar:啓動鏡像
[root@k8s-master gateway-service]# vim Dockerfile FROM java:8-jdk-alpine LABEL maintainer xxx/www.ctnrs.com RUN apk add -U tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime COPY ./target/gateway-service.jar ./ EXPOSE 9999 CMD java -jar /gateway-service.jar
使用docker命令構建鏡像:安裝docker,這裏不作演示了[root@k8s-master gateway-service]# docker build -t gateway .
查看咱們構建的鏡像
[root@k8s-master gateway-service]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gateway latest c9429e09fe42 34 seconds ago 191MB java 8-jdk-alpine 3fd9dd82815c 2 years ago 145MB
而後開始將咱們構建好的鏡像推送到咱們的鏡像倉庫,這裏我用的是Harbor,安裝步驟這裏不演示了
建立一個microservice的項目名稱
打個標籤,安裝上面的格式,把咱們的gateway打個標籤[root@k8s-master gateway-service]# docker tag gateway 192.168.30.24/microservice/gateway:latest
若是不是https的Harbor須要在docker裏面添加信任才能訪問到鏡像
[root@k8s-master ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries": ["192.168.30.24"] }
測試登陸,由於我在頁面上登陸了,全部顯示已經登陸了
[root@k8s-master ~]# docker login 192.168.30.24 Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
推送鏡像到Harbor倉庫中
[root@k8s-master ~]# docker push 192.168.30.24/microservice/gateway:latest The push refers to repository [192.168.30.24/microservice/gateway] 6912928d45d8: Pushed e7917d042778: Pushed a1e7033f082e: Pushed 78075328e0da: Pushed 9f8566ee5135: Pushed latest: digest:
查看咱們的Harbor倉庫已經上傳成功
接下來就是部署k8s,而後將spring cloud放入咱們k8s中
這裏須要注意的是,用二進制或者kubeadm均可以
K8s平臺環境的要求以下:
跨主機網絡:使用flannel或者Calico ,須要網絡來打通主機之間資源的通訊
CoreDNS: k8s內部的DNS ,用於對pod對service作記錄的,好讓其餘的pod作訪問
Harbor鏡像倉庫:這個咱們已經準備好了,並將項目鏡像推送上去了
Ingress Controller:同一暴露咱們的應用,寫yaml文件實現
K8s部署這裏不作演示了,flannel也已經部署好了,k8s-master節點部署coredns和ingress-nginx 也部署好了
這裏portal門戶網站,前端,用戶訪問www.baidu.com的頁面,經過域名訪問以後,進行的一個頁面展現,咱們咱們經過pod來進行實現,拿ingress來定義咱們的域名,域名定義哪一個service,來定義到某個pod上,來影響靜態頁面,下訂單請求交給網關api,採用異步調用,
暴露網關,進行來用戶訪問,ingress也來調用,來service來實現pod副本
gateway網關,經過一些前端頁面的頁面功能,同gateway來調用實現,用戶點擊某個功能gateway拿到這個請求以後,經過路由轉發規則,到後端的業務程序,好比商品信息(product)
庫存,訂單,他會根據不一樣的業務須要來處理,庫存服務會根據訂單的使用來和內部的調用接口來實現,pod直接調用,須要跨主機網絡,怎麼找到這個服務,就須要這個註冊中心,誰找誰就須要這個註冊中心,全部的服務都會放在這裏,來進行消息通訊,如今比較流行的就是erueka,訂單服務都會放入到咱們的mysql數據庫中的,mysql是部署在外部的,有狀態的,這個部署在k8s中是比較麻煩大的,erueka是部署在k8s集羣內的,只須要保證他的id是惟一性就能夠了,不須要考慮他的存儲。
3、spring cloud部署到k8s集羣中
一、服務編排
二、在k8s平臺部署Erueka
三、導入數據庫文件到Mysql
四、部署網關gateway
五、部署業務程序(product、stock、order)
六、部署前端(portal)
編譯打成jar包,在dev3分支
建立命名空間
kubectl create ns ms [root@k8s-master simple-microservice-dev3]# mvn clean package -D maven.test.skip=true
[INFO] --- spring-boot-maven-plugin:2.0.9.RELEASE:repackage (default) @ portal-service ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] simple-microservice ............................... SUCCESS [0.732s]
[INFO] basic-common ...................................... SUCCESS [0.002s]
[INFO] basic-common-core ................................. SUCCESS [41.516s]
[INFO] gateway-service ................................... SUCCESS [34.127s]
[INFO] eureka-service .................................... SUCCESS [8.062s]
[INFO] product-service ................................... SUCCESS [0.001s]
[INFO] product-service-api ............................... SUCCESS [3.029s]
[INFO] stock-service ..................................... SUCCESS [0.001s]
[INFO] stock-service-api ................................. SUCCESS [0.371s]
[INFO] product-service-biz ............................... SUCCESS [6.170s]
[INFO] stock-service-biz ................................. SUCCESS [10.095s]
[INFO] order-service ..................................... SUCCESS [0.002s]
[INFO] order-service-api ................................. SUCCESS [0.372s]
[INFO] order-service-biz ................................. SUCCESS [4.396s]
[INFO] basic-common-bom .................................. SUCCESS [0.001s]
[INFO] portal-service .................................... SUCCESS [4.379s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:05.137s
[INFO] Finished at: Wed Aug 07 13:38:55 CST 2019
[INFO] Final Memory: 70M/391M
[INFO] ------------------------------------------------------------------------
查看生成的jar包
[root@k8s-master simple-microservice-dev3]# cd eureka-service/ [root@k8s-master eureka-service]# ls Dockerfile pom.xml src target [root@k8s-master eureka-service]# cd target/ [root@k8s-master target]# ls classes eureka-service.jar.original maven-archiver eureka-service.jar generated-sources maven-status [root@k8s-master eureka-service]# ls Dockerfile pom.xml src target
查看dockerfile
[root@k8s-master eureka-service]# cat Dockerfile FROM java:8-jdk-alpine LABEL maintainer lizhenliang/www.ctnrs.com RUN apk add -U tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime COPY ./target/eureka-service.jar ./ EXPOSE 8888 CMD java -jar -Deureka.instance.hostname=${MY_POD_NAME}.eureka.ms /eureka-service.jar
構建鏡像
[root@k8s-master eureka-service]# docker build -t eureka . [root@k8s-master eureka-service]# docker tag eureka 192.168.30.24/microservice/eureka:latest 上傳到咱們的harbor上 [root@k8s-master eureka-service]# docker push 192.168.30.24/microservice/eureka:latest The push refers to repository [192.168.30.24/microservice/eureka] d0a47606affb: Layer already exists d37aee246f9e: Layer already exists a1e7033f082e: Layer already exists 78075328e0da: Layer already exists 9f8566ee5135: Layer already exists
修改咱們的euerka的yaml,這樣他就能調用咱們的eureka.yaml的標籤了
[root@k8s-master ~]# vim simple-microservice-dev3/k8s/eureka.yaml spec: imagePullSecrets: - name: registry-pull-secret containers: - name: eureka image: 192.168.30.24/microservice/eureka:latest ports: [root@k8s-master ~]# cd simple-microservice-dev3 [root@k8s-master simple-microservice-dev3]# cd k8s/
建立k8s登陸harbor信息認證[root@k8s-master k8s]# kubectl create secret docker-registry registry-pull-secret --docker-server=192.168.30.24 --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@ctnrs.com -n ms
修改register-with-eureka: true爲true
[root@k8s-master resources]# vim application-fat.yml register-with-eureka: true serviceUrl: defaultZone: http://eureka-0.eureka.ms:${server.port}/eureka/,http://eureka-1.eureka.ms:${server.port}/eureka/,http://eureka-2.eureka.ms:${server.port}/eureka/ fetch-registry: true
建立eurekayaml
[root@k8s-master k8s]# kubectl create -f eureka.yaml ingress.extensions/eureka created service/eureka created statefulset.apps/eureka created
查看詳細信息,這裏有可能會報錯,kubelet node節點登陸harbor須要認證這裏在daemon.json裏面寫進去就能夠了
查看日誌信息
[root@k8s-master k8s]# kubectl describe pod eureka-0 -n ms
查看狀態
[root@k8s-master k8s]# kubectl get pod eureka-0 -n ms NAME READY STATUS RESTARTS AGE eureka-0 1/1 Running 1 4m18s [root@k8s-master ~]# kubectl get pod,svc,ing -n ms NAME READY STATUS RESTARTS AGE pod/eureka-0 1/1 Running 1 16h pod/eureka-1 1/1 Running 0 16h pod/eureka-2 1/1 Running 1 16h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eureka ClusterIP None <none> 8888/TCP 16h NAME HOSTS ADDRESS PORTS AGE ingress.extensions/eureka eureka.ctnrs.com 80 16h
將域名寫入本機windows的hosts文件裏面進行ingress的訪問
一、打開路徑C:\Windows\System32\drivers\etc。
二、將hosts文件拖拽到桌面上。
三、以筆記本程序打開,完成修改後保存。
四、修改完成後從新拖回etc目錄下完成修改。
192.168.30.23 eureka.ctnrs.com portal.ctnrs.com gateway.ctnrs.com
這裏確保ingress和coredns集羣狀態正常,當咱們去訪問eureka.ctnrs.com的時候就能夠正常訪問的咱們的頁面,按F5刷新就能夠切換不一樣的節點上
而後說一下用雲服務器或者服務器來怎麼設置域名訪問
這裏也是同樣,注意的是寫外網ip,這是訪問外部的
導入數據庫到Mysql
[root@k8s-master1 ~]# cd simple-microservice-dev3 [root@k8s-master1 simple-microservice-dev3]# ls basic-common gateway-service lombok.config portal-service stock-service db k8s order-service product-service eureka-service LICENSE pom.xml README.md [root@k8s-master1 simple-microservice-dev3]# cd db/ [root@k8s-master1 db]# ls order.sql product.sql stock.sql [root@k8s-master1 db]# scp * root@192.168.30.24:~
這裏我安裝了一個mariadb的實例進行測試
[root@harbor-mysql ~]# yum install mariadb mariadb-server mariadb-devel [root@harbor-mysql ~]# systemctl start mariadb [root@harbor-mysql ~]# netstat -anpt |grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6226/mysqld
修改mariadb的密碼,默認沒有密碼
[root@harbor-mysql ~]# mysql -u root -p MariaDB [(none)]> set password for root@localhost = password('666666'); MariaDB [(none)]> flush privileges;
建立數據庫
MariaDB [(none)]> create database tb_order; MariaDB [(none)]> create database tb_product; MariaDB [(none)]> create database tb_stock;
進入order數據庫,把咱們根目錄下的sql語句導入咱們的數據庫中
MariaDB [(none)]> use tb_order; MariaDB [tb_order]> source /root/order.sql;
進入product數據庫,把咱們根目錄下的sql語句導入咱們的數據庫中
MariaDB [tb_order]> use tb_product ; MariaDB [tb_product]> source /root/product.sql
進入stock數據庫,把咱們根目錄下的sql語句導入咱們的數據庫中
MariaDB [tb_product]> use tb_stock ; Database changed MariaDB [tb_stock]> source /root/stock.sql; MariaDB [tb_stock]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | tb_order | | tb_product | | tb_stock | | test | +--------------------+ 7 rows in set (0.00 sec)
部署網關gateway
[root@k8s-master1 ~]# cd simple-microservice-dev3 [root@k8s-master1 simple-microservice-dev3]# cd k8s/ [root@k8s-master1 k8s]# ls docker_build.sh eureka.yaml gateway.yaml order.yaml portal.yaml product.yaml stock.yaml [root@k8s-master1 k8s]# vim docker_build.sh #!/bin/bash docker_registry=192.168.30.24 kubectl create secret docker-registry registry-pull-secret --docker-server=$docker_registry --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@ctnrs.com -n ms service_list="eureka-service gateway-service order-service product-service stock-service portal-service" service_list=${1:-${service_list}} work_dir=$(dirname $PWD) current_dir=$PWD cd $work_dir mvn clean package -Dmaven.test.skip=true for service in $service_list; do cd $work_dir/$service if ls |grep biz &>/dev/null; then cd ${service}-biz fi service=${service%-*} image_name=$docker_registry/microservice/${service}:$(date +%F-%H-%M-%S) docker build -t ${image_name} . docker push ${image_name} sed -i -r "s#(image: )(.*)#\1$image_name#" ${current_dir}/${service}.yaml kubectl apply -f ${current_dir}/${service}.yaml Done
[root@k8s-master1 k8s]# ./docker_build.sh gateway-service [root@k8s-master1 k8s]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.30.24/microservice/gateway 2019-08-10-14-54-28 395e59fcaf17 4 minutes ago 191MB 192.168.30.24/microservice/eureka latest 72d2811b9d61 3 hours ago 194MB eureka latest 72d2811b9d61 3 hours ago 194MB 192.168.30.24/microservice/gateway latest e7af6a3ae487 27 hours ago 191MB gateway latest e7af6a3ae487 27 hours ago 191MB java 8-jdk-alpine 3fd9dd82815c 2 years ago
[root@k8s-master1 ~]# kubectl get pod -n ms NAME READY STATUS RESTARTS AGE eureka-0 1/1 Running 1 114m eureka-1 1/1 Running 1 113m eureka-2 1/1 Running 1 112m gateway-59f86bfffb-7lglm 1/1 Running 0 5m50s gateway-59f86bfffb-s4qzl 1/1 Running 0 5m50s [root@k8s-master1 ~]# kubectl get pod,svc,ing -n ms NAME READY STATUS RESTARTS AGE pod/eureka-0 1/1 Running 1 115m pod/eureka-1 1/1 Running 1 114m pod/eureka-2 1/1 Running 1 113m pod/gateway-59f86bfffb-7lglm 1/1 Running 0 6m19s pod/gateway-59f86bfffb-s4qzl 1/1 Running 0 6m19s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eureka ClusterIP None <none> 8888/TCP 115m service/gateway ClusterIP 10.0.0.3 <none> 9999/TCP 6m20s NAME HOSTS ADDRESS PORTS AGE ingress.extensions/eureka eureka.ctnrs.com 80 115m ingress.extensions/gateway gateway.ctnrs.com 80 6m20s
查看咱們的eureka的註冊中心,已經把gateway註冊進來了
部署微服務業務程序與前端
對咱們的腳本的mvn註釋,咱們這裏不須要構建了
後端的服務咱們只須要部署deployment就能夠
[root@k8s-master1 k8s]# ./docker_build.sh product-service [root@k8s-master1 k8s]# kubectl get pods -n ms NAME READY STATUS RESTARTS AGE eureka-0 1/1 Running 1 137m eureka-1 1/1 Running 1 136m eureka-2 1/1 Running 1 135m gateway-59f86bfffb-7lglm 1/1 Running 0 28m gateway-59f86bfffb-s4qzl 1/1 Running 0 28m product-7fcd7646d-kpfxm 1/1 Running 0 87s product-7fcd7646d-lgfzq 1/1 Running 0 87s product也部署成功了
[root@k8s-master1 k8s]# ./docker_build.sh stock-service [root@k8s-master1 k8s]# ./docker_build.sh order-service [root@k8s-master k8s]# ./docker_build.sh portal-service
查看咱們的微服務正常運行,這個根據本身的業務量啓動副本數
[root@k8s-master k8s]# kubectl get pod,svc,ing -n ms NAME READY STATUS RESTARTS AGE pod/eureka-0 1/1 Running 7 56m pod/eureka-1 1/1 Running 5 55m pod/eureka-2 1/1 Running 7 54m pod/gateway-8b67dc9d4-8g2s9 1/1 Running 1 38m pod/gateway-8b67dc9d4-d6996 1/1 Running 1 38m pod/order-89f7bd55b-6t7wf 1/1 Running 1 12m pod/order-89f7bd55b-n74cv 1/1 Running 0 12m pod/portal-5f6d96ffdd-2smtj 1/1 Running 0 3m33s pod/portal-5f6d96ffdd-s7wf9 1/1 Running 0 3m33s pod/product-65d9bb865-9h7z7 1/1 Running 1 20m pod/product-65d9bb865-khvjp 1/1 Running 0 20m pod/stock-cb7fd87b5-6bqfp 1/1 Running 1 14m pod/stock-cb7fd87b5-7mbg9 1/1 Running 2 14m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eureka ClusterIP None <none> 8888/TCP 56m service/gateway ClusterIP 10.0.0.74 <none> 9999/TCP 38m service/portal ClusterIP 10.0.0.62 <none> 8080/TCP 3m33s NAME HOSTS ADDRESS PORTS AGE ingress.extensions/eureka eureka.ctnrs.com 80 56m ingress.extensions/gateway gateway.ctnrs.com 80 38m ingress.extensions/portal portal.ctnrs.com 80 3m33s
訪問portal.ctnrs.com