K8s生產架構


部分圖片顯示問題,特附上有道雲筆記中的鏈接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4828390005C5458DAB0838EA1B775D28

K8s生產架構

Kubernetes的生產架構,如圖所示:

  • client: Kubernetes集群外部用戶、客戶端等
  • 服務訪問層:Traefik ingress實現服務發現、負載均衡和路由規則定義等
  • 業務應用層:基於K8s平台構建和運行的企業業務應用,如CI/CD持續集成,微服務項目、日志管理、監控告警、私有鏡像倉庫等服務。
  • 基礎設置層:K8s容器管理平台和數據是持久化存儲等系統組成的基礎設施服務。

基礎設施層

K8s平台

  • 部署管理:Kubernetes平台除了直接使用公有雲如阿里雲、AWS等雲服務提供商的K8s服務外,我們還可以自己部署和管理等,如使用Kubespray工具。
  • 網絡通信:在容器和容器之間、容器和主機網絡方面,可以使用Calico或Flannel等方案。
  • HA高可用:Kubernetes節點分為Master和Node兩種類型節點,前者負責運行集群相關的控制管理服務,而后者負責運行Pod容器。在多Node節點模式下,由於Kubernetes Pod具有天然的容災冗余HA高可用實現,因此,我們並不需要關心Node節點的HA高可用,而只需關心Master節點的HA即可,Master節點的HA高可用,通過多Master節點+HAProxy方案實現即可。從Kubernetes 1.12版本起,kube-proxy服務默認使用ipvs實現,取消了之前的iptables。這有助於提升K8s大規模集群環境下的性能和穩定性。
  • Docker和操作系統優化:在生產環境中,Docker和操作系統版本應當使用較新的release版本。並且,主機操作系統應當做一定程度的優化配置,如關閉swap內存交換分區,預留一定的CPU核數和內存資源給宿主機使用等。

業務應用層

  • 鏡像管理:使用Harbor私有鏡像倉庫服務;
    • Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器。
    • 鏡像的存儲harbor使用的是官方的docker registry(v2命名是distribution)服務去完成。harbor在docker distribution的基礎上增加了一些安全、訪問控制、管理的功能以滿足企業對於鏡像倉庫的需求。
    • harbor以docker-compose的規范形式組織各個組件,並通過docker-compose工具進行啟停。
    • docker的registry是用本地存儲或者s3都是可以的,harbor是在docker的registry的功能之上提供用戶權限管理、鏡像復制等功能,提高使用的registry的效率。
  • 日志管理:使用Elasticsearch、Filebeat 和 Kibana技術棧;
    • Elasticsearch:是一個基於Lucene庫的搜索引擎。它提供了一個分布式、支持多租戶的全文搜索引擎。可以用於搜索各種文檔,提供可擴展的搜索,具有接近實時的搜索,並支持多租戶。
    • Filebeat:是一個日志文件托運工具,在你的服務器上安裝客戶端后,filebeat會監控日志目錄或者指定的日志文件,追蹤讀取這些文件(追蹤文件的變化,不停的讀),並且轉發這些信息到elasticsearch或者logstarsh中存放。
    • Kibana: 作為可視化的展示平台。
  • 監控告警管理:使用Cadvisor、Prometheus和Grafana技術棧;
  • 微服務架構:使用Service Mesh服務網格中的Istio方案;
    • Istio:是一個由 IBM、Google 以及 Lyft 聯合推出的開源軟件,以無痛方式為運行在 Kubernetes 上的微服務提供流量管理,訪問策略管理以及監控等功能。
  • Devops:使用Gitlab、Jenkins等持續集成工具;
  • 單體應用:無狀態類服務使用deployment,有狀態類服務則使用Statefulset,如果關聯的服務較多且復雜則使用Helm。
  • 規划好Namespace:應當做到每個namespace專屬用於某類型的應用,如monitor namespace統一管理諸如監控告警和日志管理方面的pod、service、pvc、ingress等資源。這樣,可以較為方便的管理和區分K8s上的各種應用。

服務訪問層

外部客戶端訪問K8s集群內的服務、負載均衡和路由規則定義使用Traefik Ingress實現。此外,應當實現Ingress服務HA高可用,可以想象在K8s集群中,大量的出入口流量都進過Ingress,其負載是非常大的,其重要程度不言而喻,因此實現HA就非常重要。ingress controller節點(無論是基於nginx還是traefik實現)應當至少為2個節點,並在這些節點上,部署Keepalived和HAproxy共同維護一個VIP地址,將其提供給ingress使用。

  • 在該架構中,Ingress節點一般使用獨立的服務器,即只做將集群外部流量接入到集群內部。除了使用external Ip來暴露ingress的Service到集群外部,還可以使用hostNetwork,如果是公有雲,還可以使用LoadBalance。這樣Ingress Controller將監聽節點的80和443端口,通過熱備的形式部署多個ingress節點,並在每個節點上部署Keepalived,多個節點共同維護一個VIP,實現Ingress服務的高可用。

  • 如上圖所示,部署兩個ingress節點172.16.10.11和172.16.10.12。公網ip映射或轉發到內網的VIP地址172.16.10.10上(如果VIP本身是公網IP則可以不用轉發)。ingress controller的副本數replicaCount為2,將被調度到node1和node2這兩個節點上。同時,使用pod反親和性禁止ingress pod調度在同一個節點上。


免責聲明!

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



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