摘要:Kubernetes(簡稱K8S)已經成為容器云管理的事實標準,如何構建K8S容器云平臺具有很大的市場空間和現實意義。本文通過分析容器云的軟硬件設施,K8S的核心部件構成,結合比較成熟的開源解決方案,給出了建設K8S容器云平臺的基本架構,對于中小企業搭建容器云平臺,具有現實的參考意義。關鍵詞:Kubernetes;容器云;鏡像倉庫;日志管理;監控告警
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2019)36-0047-02
在云計算時代,企業在線購買云廠商的云主機,在數分鐘之內,就可以創建出所需的多臺虛擬機,部署企業自己的應用。與購買硬件設備自己搭建的傳統方法相比,響應速度有了很大的改進,實施效率有了很大的提高。
但是在云主機的操作系統上構建自己的應用,還涉及應用軟件運行環境的準備,采用云主機方式仍然需要一個較長時間的部署過程。
容器技術的出現為云計算增添了新的活力,通過對應用和運行環境的整體打包,生成單一的鏡像,在任何Docker平臺上部署一個Web應用,只需要一條命令,在幾秒之內就可以完成應用部署,極大地提升了應用部署的效率。
在單機上運行容器非常方便,對于多臺機器上的容器之間,如何進行協同工作,容器編排管理成為競爭熱點。經過了這幾年容器技術的高速迭代和發展,K8S打敗了Swarm和Me-sos,成為容器編排的企業標準。國外的主要云服務廠商亞馬孫、谷歌,國內的阿里云、騰訊云和華為云等等,均已推出K8S容器云服務,為企業提供正式的商業服務。
Kubernetes具有很多優點:屏蔽了底層硬件的差異;支持上千臺的大規模計算機集群;支持高可用部署;具有彈性伸縮能力,可以擴展或收縮容器的規模,應對突發訪問請求;容器部署與復制白動完成;將容器組成服務,提供容器級的負載均衡;集群內機器宕機、容器失效,集群自動修復,具有容錯能力、白愈能力;開源社區活躍,各大IT廠商紛紛支持;非常適合互聯網應用。正因K8S具有這么多的優點,掌握K8S容器云技術,建設K8S容器云平臺勢在必行。
1容器云的硬件基礎設施
云平臺是運行在硬件設備上的,建設容器云平臺,服務器、存儲、交換機、防火墻等設備同樣不可缺少。服務器可以直接使用裸機部署以減少性能損失,也可以通過KVM或VMWare,先虛擬化,獲得更多的虛機,繼而在虛機的基礎之上,再進行架構設計。好處是虛擬機多,平臺架構設計更加靈活,可以根據業務需要,創建多個K8S平臺。缺點是多了一層虛擬化,硬件性能會有所損耗。
K8S需要存放應用的持久化數據,存儲設備也是必不可少的,直接購買存儲廠商的存儲,性能和售后均有保障。如果企業有自己的研發力量,為降低成本,也可以自行構建Ceph、GlusterFS等分布式存儲,提供文件系統和塊存儲設備以及對象存儲設備。
運行K8S平臺的主機節點,需要有網絡層支撐。網絡架構設計上劃分管理網、數據網、外部網等也是必要的,可有效隔離網絡管理流量和數據業務流量。服務器多個網卡,盡可能使用萬兆設備解決網絡帶寬的瓶頸問題。在網絡出口處,對外發布的應用,還需要相應的網絡安全、負載均衡設備來保證應用的安全和性能。
2容器云的軟件運行環境
K8S容器云是運行在Linux系統及Docker容器環境之上的,Linux系統有很多發行版本,Ubuntu Server LTS版本是推薦的操作系統,更適合運行K8S容器云平臺。整個K8S平臺的架構,都是以Docker容器技術為基礎的,K8S的所有組件以及用戶的應用軟件,都是運行在Docker容器環境之上。
3 K8S核心組件的部署
K8S的核心組件分為兩類,一類安裝在管理節點上,另一類安裝在工作節點上。
在管理節點上主要運行Etcd、APIServer、Scheduler、Control-ler-Manager等核心組件。APIServer為K8S集群提供統一的訪問接口,實現身份認證、授權和準入控制、API注冊和發現等功能,對于整個K8S集群的操作,都是通過API進行的,管理員使用Kubectl命令行工具通過APIServer實現對K8S集群的管理。Etcd數據庫存儲整個K8S集群的重要信息,只有APIServer能夠訪問Etcd數據庫。Scheduler根據各種調度策略,負責將Pod調度到相應Node節點上運行。K8S中的各種資源有對應的控制器(Controller),Controller-Manager組件負責K8S中各種控制器的管理,監控并維護整個集群達到期望的狀態。
工作節點上主要運行Kubelet和Kube-proxy等核心組件。Kubelet主要負責容器的創建刪除等生命周期管理,以及容器的存儲、網絡管理、健康檢查、監控等。Kube-proxy監聽APIServer中Service和Endpoint的變化,通過IPtables或IPVS模式,創建路由規則,實現Service和Pod之間的服務負載均衡。
K8S架構復雜,核心組件也較多,技術人員學習掌握比較困難。使用K8S二進制軟件包方法安裝、使用官方Kubeadmin工具安裝K8S,許多鏡像因為網絡訪問的問題無法下載,K8S部署經常出現問題。為解決K8S學習難操作難的問題,出現了Rancher和Kubesphere等比較優秀的開源K8S管理解決方案,大大降低了學習和操作的難度,K8S易用性有了很大提高,更適合企業云平臺部署。
4私有鏡像倉庫管理
企業內部的應用往往包含敏感數據,不適合運行在公有云上,企業也希望這些應用的Docker容器鏡像能保存在內部網絡中。另外,與從公共鏡像倉庫下載容器鏡像相比,內部網絡帶寬更大,K8S部署容器更快捷穩定。企業有必要在內部搭建一套私有鏡像倉庫。Harbor就是一款很好的私有鏡像倉庫產品。
Harbor是VMWare公司開源的容器鏡像管理產品,它在Docker官方的簡易倉庫Registry基礎上,加入多個組件,實現了項目管理、用戶權限管理、鏡像管理、Web圖形界面等基本功能,成為一款企業級的開源鏡像管理產品。由于它采用容器化的安裝方式,部署非常方便,使用圖形化的管理界面,用戶操作方便,功能夠用,很快得到了普及。
企業內的開發人員將應用的鏡像通過Docker push命令上傳到私有鏡像倉庫中。運維人員在K8S平臺上部署應用時,直接到私有倉庫中快速下載應用鏡像,部署到K8S平臺中。私有倉庫是建設容器云必不可少的功能。
5容器云的集中日志管理系統
K8S可以管理上千個節點的集群,如果集群出現問題,需要通過日志進行排查,要想發現故障在哪一個環節,只靠命令行的方式去操作,簡直無法想象。構建一套集群的日志收集、存儲、查詢和圖形化展示的集中式日志管理系統對于系統運維非常必要。
EFK組合是常用的一種日志管理方案,主要有三個組件構成(ElasticSearch、Fluentd、Kibana)。Fluentd安裝到所有的K8S節點上,充當日志代理角色,負責將各節點上的各種日志收集、過濾、發送到后端的ElastieSearch;ElastieSearch負責日志的存儲和索引,通過HTTP API方式提供全文檢索功能;最終在Kibana面板上對采集來的各種日志數據進行查詢分析,用圖形、表格形式進行集群日志展示。
6容器云的監控告警系統
Prometheus是開源的監控告警和時序數據庫系統,是云原生計算基金會CNCF的產品之一,Prometheus項目非?;钴S,社區提供了很好的支持,包括數據庫、硬件設備、持續集成工具、存儲軟件、Web服務器軟件、日志和監控軟件等上百種應用都提供了專門的Exporter配合使用,一些應用直接內置Pro-metheus數據格式支持,比如Etcd、Kubernetes、SkyDNS等。
Prometheus也是時序數據庫,它通過Pull方式到各應用的Exporter上拉去度量數據,存儲到自身的時序數據庫中,內置PromQL查詢語言。Alertmanager組件是獨立的告警管理器,可以根據事先設定的告警策略,向郵件系統、企業微信、釘釘、Slaek等即時通信工具發送告警數據,及時提醒管理人員。Grafana組件是一款常用的數據顯示面板,可以將Prometheus數據庫中的指標數據以圖形化的方式直觀地展示在面板中。
在K8S集群中的各節點上部署node-exporter組件,可以獲取各節點上CPU、內存等資源的度量數據;通過部署kube-state-metries組件,可以獲取K8S集群中Service、Deployment或者Daemonset等各種資源的數據;K8S已經內置Prometheus接口,Prometheus可以直接從集群獲取K8S核心組件的度量數據;而對于很多第三方的容器應用,社區都已推出相應的exporter來支持Prometheus,根據需要將這些Exporter部署到集群中,由Prometheus向這些專用的exporter抓取度量數據。
有了監控告警系統,K8S容器云平臺的整個運行狀態可以用直觀的圖形化的方式在Grafana面板中集中展示,無論是資源占用、系統性能、告警事件、健康狀態等,都能夠一目了然。有利于運維人員及時了解集群狀態,并在第一時間獲取告警信息。
7容器云的圖形化管理
Kubemetes官方提供Dashboard面板,能夠查看K8S集群的節點狀態、K8ST作負載、部署、服務、容器等各種資源的基本情況,在Web管理界面上完成集群的應用部署、日志查看等各項基本操作,功能比較簡單。
Kubesphere、Rancher是另兩款比較優秀的開源圖形化K8S管理T具,除了可以實現對集群機器以及K8S的接管以外,還各自增加了特有的功能,集成了項目管理、多租戶管理、應用商店、監控告警、持續集成和部署、服務網格等增強功能,極大降低了用戶使用K8S的難度,雖是開源軟件,但已達到了企業級應用的水平。
8結束語
Kubemetes功能非常強大,可以輕松管理和調度上千臺計算機協同運作,提供強大的集群處理能力,已經成為容器云管理的事實標準。但由于其概念眾多,操作復雜,非常不容易學習掌握和推廣應用,完整的K8S平臺高效運行所需的各個功能模塊較多,本文通過對K8S容器云的硬件基礎設施、軟件運行環境、Kubernetes核心組件、私有鏡像倉庫以及事件日志、監控告警、圖形化管理等運行容器云平臺必備工具進行逐一介紹,像搭積木一樣,將各個基本功能模塊都搭建好,構建一套比較完整實用的容器云平臺,對于容器云推廣普及具有指導作用。
參考文獻:
[1]龔正,吳治輝,崔秀龍,等.Kubernetes權威指南[M].電子工業出版社,2019.
[2]浙江大學SEL實驗室.Docker容器與容器云[M].人民郵電出版社,2016.
[3]鄭冰.基于Kubernetes的企業級容器云平臺設計[J].數字技術與應用,2019(6).
[4]王駿翔,郭磊.基于Kubernetes和Docker技術的企業級容器云平臺解決方案[J].上海船舶運輸科學研究所學報,2018(3).
【通聯編輯:梁書】
收稿日期:2019 -10 -10
作者簡介:王偉軍,男,江蘇阜寧人,工程碩士,南京報業傳媒集團技術部工程師,中級職稱,研究方向為計算機網絡、云計算、容器
技術。