部分圖片顯示問題,特附上有道雲筆記中的連接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4828390005C5458DAB0838EA1B775D28node
K8s生產架構
Kubernetes的生產架構,如圖所示:nginx
- 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使用。docker
在該架構中,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調度在同一個節點上。服務器