微服務交付至kubernetes流程


1、微服務簡介

微服務優點

  • 服務組件化
    每個服務獨立開發、部署,有效避免一個服務的修改引起整個系統重新部署
  • 技術棧靈活
    約定通信方式,是得服務本身功能實現對技術要求不再那么銘感
  • 獨立部署
    每個微服務獨立部署,加快部署速度,方便擴展
  • 擴展性強
    每個微服務可以部署多個,並且有負載均衡能力
  • 獨立數據
    每個微服務有獨立的基本組件,例如數據庫、緩存等

微服務缺點

  • 溝通成本
  • 數據一致性
  • 運維成本
  • 內部架構復雜性

微服務和單體應用
單體應用,易於部署、測試,但是會使得代碼膨脹,難以維護,構建和部署成本大,新人上手難

適用於微服務的框架:Spring Boots、Spring Cloud、Dubbo、Go-micro .....

2、K8s部署微服務考慮的問題

微服務架構圖

微服務流程圖

微服務間如何通信?
REST API、RPC、MQ(后兩者主流)。

微服務如何發現彼此?
通過注冊中心進行服務的注冊與發現。

組件之間怎么個調用關系?
微服務內部處理邏輯。

那個服務作為整個網站入口?
網關,即gateway(也是單獨的一個微服務)。

那些微服務需要對外訪問?
只需要網關gateway入口對外即可,
一般都是先為gateway創建svc,然后由Ingress指定到該svc。

微服務怎么部署?更新?擴容?
基於Kubernetes就可以輕易實現,
Kubernetes生來就是為了這些。

如何區分有狀態應用和無狀態應用?
無狀態應用:不考慮存儲,不維護有狀態信息,也不考慮和其它服務副本是否有關系。
有狀態應用:有固定存儲,維護集群狀態信息,例如:mysql、mongodb,有狀態應用不建議部署到kubernetes。

為什么要用注冊中心?
微服務太多面臨的問題:

  • 怎么記錄一個微服務多個副本接口地址?
  • 怎么實現一個微服務多個副本負載均衡?
  • 怎么判斷一個微服務副本是否可用?
    主流注冊中心:Eureka,Nacos,Etcd;
    注冊中心可基於statefulset部署到k8s集群中,也可以部署在集群外。

不同環境如何區分配置文件?

  • configmap:通過不同的環境去掛載不同的配置文件
  • entrypoint.sh:通過啟動腳本區分
  • java -jar --spring.profiles.active=dev xxx.jar:基於啟動命令區分
  • 統一配置中心,例如:Apollo,Disconf

3、項目遷移到k8s流程

  1. 制作鏡像(應用程序、運行環境、文件系統)
    基礎鏡像:Debian 或 應用程序的運行環境鏡像
    應用程序:Go,Java,Python ....
    運行環境:不同的語言都需要有特定的運行環境(例如java需要jdk)
    文件系統:忽略

  2. 控制器管理Pod
    Deployment:無狀態部署
    StatefulSet:有狀態部署(MySQL、Mongodb、Redis ...)
    DaemonSet:守護進程部署
    Job & CronJob:批處理

  3. 暴露應用
    Service定義了Pod的邏輯集合和訪問這個集合的策略,
    Service引入為了解決Pod的動態變化,提供服務發現和負載均衡,
    支持Cluster IP,NodePort以及LocalBalancer三種類型,
    Service的底層實現主要實現有iptables和ipvs兩種網絡模式,推薦ipvs,
    使用CoreDNS解析Service名稱,
    通過Label關聯Pod。

  4. 對外發布應用(ingress)
    通過Service關聯Pod,
    基於域名訪問,
    通過Ingress Controller實現Pod的負載均衡(支持TCP/UDP 4層和HTTP 7層)。
    最后在Ingress前面部署外網用戶統一入口實現七層代理/四層轉發(Nginx、HaProxy...)

  5. 日志采集
    Pod在運行的時候會產生應用日志,需要將其日志文件信息采集到統一的數據庫中存儲,然后從一個平台中展示
    易給開發查閱日志信息和錯誤日志信息,易於排查問題
    主流方案:FileBeat + ELK(高性能和解耦:+kafka)

  6. 監控
    不管是k8s集群Master還是Node,以及Pod,我們需要知道它們運行的具體狀況,
    占用多少資源,剩余多少資源,就得通過監控的方式去實現。
    主流方案:Prometheus + Grafana + ...Export


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM