kubernetes部署spring cloud微服務項目

微服務架構是一項在雲中部署應用和服務的新技術。大部分圍繞微服務的爭論都集中在容器或其餘技術是否能很好的實施微服務,而紅帽說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的項目名稱
kubernetes部署spring cloud微服務項目
kubernetes部署spring cloud微服務項目

打個標籤,安裝上面的格式,把咱們的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倉庫已經上傳成功

kubernetes部署spring cloud微服務項目
接下來就是部署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 也部署好了
kubernetes部署spring cloud微服務項目
這裏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刷新就能夠切換不一樣的節點上
kubernetes部署spring cloud微服務項目
而後說一下用雲服務器或者服務器來怎麼設置域名訪問
這裏也是同樣,注意的是寫外網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

kubernetes部署spring cloud微服務項目

[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註冊進來了
kubernetes部署spring cloud微服務項目
部署微服務業務程序與前端
對咱們的腳本的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也部署成功了

kubernetes部署spring cloud微服務項目

[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
kubernetes部署spring cloud微服務項目

相關文章
相關標籤/搜索