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