高可靠設計,Etcd 集群,Kubernetes 三主節點,保證集群的高可用性。
基於 GlusterFS /nfs集群,在生產環境和非生產環境下提供存儲卷服務。
Flannel+VXLAN,提供可靠的網絡服務。
提供分布式監控和統一日志中心,全方位的應用監管能力。
支持 Redis/ZooKeeper 等常用中間件的集群編排方案。
通用組件服務,提供快速構建企業級應用的能力。
在該架構中,我們可以將其分為四層,如下:
用戶層:即普通用戶。
服務訪問層:基於gorouter和haproxy服務發現、負載均衡和路由分發等。
應用中間件層:提供基於redis/zk等常見中間件給業務使用。
業務應用層:即基於Kubernetes平台構建和運行企業業務應用,如CI/CD持續集成、微服務項目、監控告警和日志管理、私有鏡像倉庫等服務。
基礎設施層:即laas層支撐的由Kubernetes容器管理平台和GlusterFS數據持久化存儲等系統組成的基礎平台。
基礎設施層
Kubernetes平台
部署管理:Kubernetes平台都是在阿里雲雲、和各自私有雲之上自己建設維護的。
網絡通信:在容器和容器之間、容器和主機網絡方面,可以使用Calico或Flannel等方案,我們使用的Flannel。
HA高可用:Kubernetes節點分為Master和Node兩種類型節點,前者負責運行集群相關的控制管理服務,而后者負責運行Pod容器。在多Node節點模式下,由於Kubernetes Pod具有天然的容災冗余HA高可用實現,因此,我們並不需要關心Node節點的HA高可用,而只需關心Master節點的HA即可,Master節點的HA高可用,通過多Master節點+nginx方案實現。從Kubernetes 1.12版本起,kube-proxy服務默認使用ipvs實現,取消了之前的iptables。這有助於提升K8s大規模集群環境下的性能和穩定性。
Docker和操作系統優化:在生產環境中,Docker和操作系統版本應當使用較新的release版本。並且,主機操作系統應當做一定程度的優化配置。
GlusterFS/NFS數據存儲
Kubernetes平台的數據持久化存儲,可以使用GlusterFS、NFS等存儲方案。其中,GlusterFS適用於有其技術背景或大容量存儲需求的公司;而NFS適用於存儲容量需求相對較小,無專業存儲技術背景的公司。
業務應用層
鏡像管理:使用Harbor私有鏡像倉庫服務。
日志管理:使用Elasticsearch、Filebeat + 自研界面。
監控告警管理:使用open-falcon +自研、也使用了Prometheus + 自研等技術棧。
微服務架構:使用Service Mesh服務網格中的Istio方案,主要是灰度發布方面。
Devops:自研流水線集成pass平台;
應用類型:無狀態類服務使用deployment,有狀態類服務則使用Statefulset,pass使用helm。
規划好Namespace:根據項目-環境指定namespace,統一管理諸如監控告警和日志管理方面的pod、service、pvc等資源。這樣,可以較為方便的管理和區分K8s上的各種應用。
應用中間件層
對於有狀態應用,線上環境只上了redis,zk,mq等等常見中間件,由於數據庫需要較強的穩定性和可靠性,暫時未使用。
中間件上容器后,在pass上即可進行增刪,便於服務管理維護,也避免了應用交付周期變長。
服務訪問層
中間件上容器便於維護擴容管理。
整個數據流走向如下圖,負載均衡和路由規則、域名分發使用gorouter和haproxy實現,gorouter簡單說就是一個路由器,haproxy是負載均衡。此外,gorouter和haproxy實現HA高可用,可以想象在K8s集群中,大量的出入口流量都進過gorouter和haproxy,其負載是非常大的,其重要程度不言而喻,因此實現HA就非常重要。我們一般部署至少在2個節點以上。
