原標(biāo)題:容器化實(shí)踐指南邁出容器化的第一步:集群管理
隨著容器技術(shù)日漸成熟以及Kubernetes風(fēng)靡一時(shí),IT架構(gòu)容器化已經(jīng)從前沿技術(shù)公司的探索逐漸成為大部分企業(yè)IT的發(fā)展方向。
最近CNCF(云原生計(jì)算基金會(huì))云原生調(diào)查反映:在亞洲市場(chǎng),幾乎所有容器管理工具的使用率都有所增長(zhǎng),現(xiàn)成商業(yè)解決方案總體增長(zhǎng)58%,本土解決方案增長(zhǎng)690%,Kubernetes增長(zhǎng)11%。Kubernetes集群在生產(chǎn)中的規(guī)模也在擴(kuò)大,運(yùn)行1-5個(gè)生產(chǎn)集群的組織減少37%,而運(yùn)行11-50個(gè)集群的受訪者增加 154%。
百度云作為CNCF的金牌會(huì)員,同時(shí)也是國(guó)內(nèi)容器技術(shù)的最早踐行者之一,在過(guò)去7年的內(nèi)部容器化實(shí)踐中積累了大量的經(jīng)驗(yàn)。本系列文章將從企業(yè)容器化場(chǎng)景出發(fā),從不同角度呈現(xiàn)容器化過(guò)程中需要理解的概念和常見(jiàn)問(wèn)題的解決方案,幫助百度云用戶更好地使用容器技術(shù),利用云原生的IT架構(gòu)為業(yè)務(wù)的高速發(fā)展保駕護(hù)航。
容器引擎與容器集群技術(shù)
容器技術(shù)的雛形其實(shí)最早在1979年就已經(jīng)誕生,其初衷是在同一個(gè)操作系統(tǒng)中,為不同進(jìn)程提供相互隔離的運(yùn)行環(huán)境。隨著技術(shù)發(fā)展,容器現(xiàn)在已經(jīng)成為了一種典型的輕量級(jí)虛擬化技術(shù),它依托于操作系統(tǒng)的基礎(chǔ)架構(gòu)之上,為應(yīng)用程序提供獨(dú)立的運(yùn)行環(huán)境。由于應(yīng)用程序的運(yùn)行只需要與容器交互,因此開(kāi)發(fā)者無(wú)需關(guān)心底層操作系統(tǒng)的差異,使得容器化應(yīng)用的部署和遷移變得極為方便,再加上容器本身輕量級(jí)的特點(diǎn),其啟停速度遠(yuǎn)快于傳統(tǒng)的虛擬機(jī),讓?xiě)?yīng)用程序在分布式架構(gòu)中的彈性擴(kuò)展變得更加簡(jiǎn)單。
談到容器,我們往往都會(huì)直接與Docker關(guān)聯(lián)起來(lái)。實(shí)際上Docker只是容器引擎技術(shù)的一種,由于Docker將容器技術(shù)推向了巔峰,因此它已經(jīng)成為了容器引擎技術(shù)的事實(shí)標(biāo)準(zhǔn)。作為一項(xiàng)容器引擎技術(shù),Docker解決的問(wèn)題就是如何在操作系統(tǒng)中生成和運(yùn)行容器。無(wú)論是在物理機(jī)、虛擬機(jī)或者任何一個(gè)廠商的云服務(wù)器中,開(kāi)發(fā)者都可以通過(guò)Docker快速定義和啟動(dòng)容器環(huán)境,并將自身業(yè)務(wù)運(yùn)行在其中。
Docker基本架構(gòu)(圖片來(lái)源網(wǎng)絡(luò))
但是由于容器輕量級(jí)的特性,大部分業(yè)務(wù)系統(tǒng)都無(wú)法單獨(dú)運(yùn)行在一個(gè)容器當(dāng)中,而是需要多個(gè)容器環(huán)境協(xié)同工作。容器引擎僅僅解決了單個(gè)容器如何在操作系統(tǒng)中運(yùn)行的問(wèn)題,而無(wú)法幫助用戶完成大量容器的協(xié)同管理和編排,因此容器編排和管理系統(tǒng)也就應(yīng)運(yùn)而生。
當(dāng)用戶需要通過(guò)容器來(lái)運(yùn)行一個(gè)大型應(yīng)用或者復(fù)雜系統(tǒng)時(shí),往往需要啟動(dòng)在多個(gè)服務(wù)器上的大量容器。容器管理系統(tǒng)可以幫助用戶執(zhí)行大量的復(fù)雜任務(wù),包括:定義不同容器的角色和關(guān)系、安排容器的資源分配和部署、對(duì)容器的健康狀況進(jìn)行檢查、當(dāng)容器出現(xiàn)故障時(shí)進(jìn)行容錯(cuò)處理、在業(yè)務(wù)量變化時(shí)對(duì)容器進(jìn)行彈性伸縮等。
容器管理系統(tǒng)在容器的生產(chǎn)化應(yīng)用中是必不可少的,在容器技術(shù)的探索階段,許多前沿企業(yè)都研發(fā)了各自的管理系統(tǒng),其中也包括百度自研的Matrix。而近幾年來(lái),隨著開(kāi)源的容器管理系統(tǒng)Kubernetes(簡(jiǎn)稱K8S)的飛速發(fā)展,它已經(jīng)基本成為容器管理系統(tǒng)的事實(shí)標(biāo)準(zhǔn)。百度也在Kubernetes的早期即參與了開(kāi)源社區(qū)的多項(xiàng)工作,并且于2017年在百度云上推出了基于Kubernetes的云容器引擎產(chǎn)品CCE。
百度云CCE產(chǎn)品架構(gòu)圖(圖片來(lái)源網(wǎng)絡(luò))
由于Kubernetes是一個(gè)分布式的容器管理系統(tǒng),因此其往往部署在一個(gè)多節(jié)點(diǎn)的服務(wù)器集群中,Kubernetes本身的各個(gè)組件以及用戶業(yè)務(wù)的容器都將部署在該集群的各個(gè)節(jié)點(diǎn)中。Kubernetes提供了一套用于管理集群節(jié)點(diǎn)以及節(jié)點(diǎn)間協(xié)作的模型,使用者需要遵循這個(gè)模型搭建集群的節(jié)點(diǎn)、網(wǎng)絡(luò)和存儲(chǔ)架構(gòu),同時(shí)對(duì)集群容量和運(yùn)行狀態(tài)進(jìn)行監(jiān)控和管理。因此對(duì)于企業(yè)而言,理解如何創(chuàng)建和管理一個(gè)Kubernetes集群就成為了實(shí)現(xiàn)容器化架構(gòu)的第一個(gè)挑戰(zhàn)。
容器集群的搭建和節(jié)點(diǎn)管理
一個(gè)Kubernetes集群通常由一組網(wǎng)絡(luò)上互通的節(jié)點(diǎn)組成,節(jié)點(diǎn)可以是虛擬機(jī)或者物理機(jī)器,為Kubernetes組件和用戶容器提供了運(yùn)行所需的資源。用戶需要部署一組Master組件對(duì)節(jié)點(diǎn)進(jìn)行管理,同時(shí)每個(gè)節(jié)點(diǎn)上需要部署一些必要的服務(wù),用于管理節(jié)點(diǎn)上的容器并與Master組件通信。因此搭建一個(gè)Kubernetes集群通常分為3個(gè)步驟:部署Master組件、創(chuàng)建節(jié)點(diǎn)并部署節(jié)點(diǎn)服務(wù)、將節(jié)點(diǎn)注冊(cè)到Master。
(圖片來(lái)源網(wǎng)絡(luò))
Master組件理論上可以在集群中的任何節(jié)點(diǎn)運(yùn)行,但是為了更方便維護(hù)和提供更高的穩(wěn)定性,通常會(huì)使用獨(dú)立的1個(gè)或者多個(gè)節(jié)點(diǎn)部署所有Master組件,這些節(jié)點(diǎn)上不再運(yùn)行任何用戶的容器。最基本的Master組件包括:
kube-apiserver、etcd、kube-controller-manager、cloud-controller-manager、kube-scheduler、addons、Cluster DNS、dashboard 、資源監(jiān)控組件、集群日志組件等。(對(duì)于每個(gè)組件具體的工作內(nèi)容和運(yùn)行機(jī)制,我們未來(lái)將會(huì)進(jìn)行詳細(xì)闡述)
在這些Master組件中,kube-apiserver負(fù)責(zé)對(duì)外暴露Kubernetes API,用于接收用戶指令,并且與所有的工作節(jié)點(diǎn)進(jìn)行通訊。kube-apiserver具備水平擴(kuò)展的能力,因此可以通過(guò)部署在多個(gè)虛擬或者物理服務(wù)器上來(lái)提供高可用的架構(gòu),此時(shí)就需要為kube-apiserver搭建一個(gè)單獨(dú)的負(fù)載均衡,用于與外部進(jìn)行通訊。
在百度云上,用戶創(chuàng)建CCE集群時(shí),系統(tǒng)會(huì)在用戶所購(gòu)買的工作節(jié)點(diǎn)以外,提供額外且免費(fèi)的多個(gè)節(jié)點(diǎn)用于搭建高可用的Master,這些Master節(jié)點(diǎn)本身對(duì)用戶不可見(jiàn)(無(wú)法直接通過(guò)SSH訪問(wèn)),但是系統(tǒng)會(huì)提供免費(fèi)的負(fù)載均衡和公網(wǎng)IP地址,讓用戶可以在本地或者云服務(wù)器上通過(guò)kubeclt(一個(gè)用于執(zhí)行Kubernetes命令的本地工具)直接與kube-apiserver進(jìn)行交互,從而控制和管理整個(gè)容器集群。
Master組件就緒以后,用戶需要對(duì)每個(gè)集群節(jié)點(diǎn)進(jìn)行部署,必要的節(jié)點(diǎn)服務(wù)包括:kubelet、kube-proxy、Docker等。其中kubelet用于執(zhí)行Master對(duì)容器的調(diào)度,監(jiān)控和管理節(jié)點(diǎn)上所有容器的生命周期,kube-proxy用于維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)轉(zhuǎn)發(fā)規(guī)則,讓流量可以訪問(wèn)到正確的容器上,Docker則起到容器引擎的作用,用于啟動(dòng)和運(yùn)行容器。
除此以外,還有一些采集節(jié)點(diǎn)日志和監(jiān)控信息的組件,也可以運(yùn)行在節(jié)點(diǎn)當(dāng)中。搭建工作節(jié)點(diǎn)除了在每個(gè)節(jié)點(diǎn)上部署以上服務(wù)以外,還需要確保節(jié)點(diǎn)組件與Master組件可以互相通訊,通常需要保障工作節(jié)點(diǎn)可以訪問(wèn)到Master中的kube-apiserver,并且kube-apiserver也可以訪問(wèn)每個(gè)節(jié)點(diǎn)中的kubelet組件。
在完成工作節(jié)點(diǎn)上的部署且網(wǎng)絡(luò)連通的情況下,節(jié)點(diǎn)將會(huì)自動(dòng)向kube-apiserver注冊(cè)自己,注冊(cè)的信息包括節(jié)點(diǎn)的IP地址、節(jié)點(diǎn)的標(biāo)簽、節(jié)點(diǎn)的容量以及一些用于描述節(jié)點(diǎn)的元數(shù)據(jù)等。用戶也可以通過(guò)在kubelet中設(shè)置--register-node=false來(lái)關(guān)閉自動(dòng)注冊(cè),然后手動(dòng)提交注冊(cè)信息。節(jié)點(diǎn)被注冊(cè)到Master之后,會(huì)由Master組件中的Node Controller進(jìn)行管理,該組件將會(huì)監(jiān)控每個(gè)工作節(jié)點(diǎn)的完整生命周期,對(duì)節(jié)點(diǎn)的狀態(tài)進(jìn)行標(biāo)記,從而輔助容器調(diào)度策略的執(zhí)行。
工作節(jié)點(diǎn)的部署和注冊(cè)決定了用戶容器運(yùn)行的環(huán)境和可使用的資源容量,因此是IT部門維護(hù)容器集群的工作重點(diǎn)。
在百度云上,用戶可以隨時(shí)向CCE集群中添加新的節(jié)點(diǎn),只需要選擇所需節(jié)點(diǎn)的容量大小和操作系統(tǒng),系統(tǒng)將會(huì)自動(dòng)幫助用戶完成節(jié)點(diǎn)組件的部署,并且將節(jié)點(diǎn)注冊(cè)到Master,大大降低了節(jié)點(diǎn)管理的工作復(fù)雜度。同時(shí),在用戶業(yè)務(wù)運(yùn)行的過(guò)程中,CCE也提供了便利的自動(dòng)擴(kuò)縮容能力,可以在節(jié)點(diǎn)資源不足或者過(guò)剩時(shí),自動(dòng)完成節(jié)點(diǎn)的添加或者釋放,從而幫助用戶最大化利用云上資源。
下期內(nèi)容預(yù)告
在完成容器集群Master和工作節(jié)點(diǎn)的搭建后,集群就已經(jīng)具備啟動(dòng)和調(diào)度容器的基本條件了。但是要真正承載企業(yè)級(jí)業(yè)務(wù)的穩(wěn)定和可用性,還需要對(duì)集群的網(wǎng)絡(luò)、存儲(chǔ)架構(gòu)以及如何監(jiān)控集群進(jìn)行更加全面的規(guī)劃。下一期內(nèi)容我們將繼續(xù)聚焦在容器集群管理上,介紹如何在云端規(guī)劃和管理容器集群的網(wǎng)絡(luò)、存儲(chǔ)和監(jiān)控,幫助您更好地理解和管理自己的容器集群。
關(guān)注百度云微信公眾號(hào),體驗(yàn)、使用百度云容器引擎CCE。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- 美媒聚焦比亞迪“副業(yè)”:電子代工助力蘋(píng)果,下個(gè)大計(jì)劃瞄準(zhǔn)AI機(jī)器人
- 微信零錢通新政策:銀行卡轉(zhuǎn)入資金提現(xiàn)免手續(xù)費(fèi)引熱議
- 消息稱塔塔集團(tuán)將收購(gòu)和碩印度iPhone代工廠60%股份 并接管日常運(yùn)營(yíng)
- 蘋(píng)果揭秘自研芯片成功之道:領(lǐng)先技術(shù)與深度整合是關(guān)鍵
- 英偉達(dá)新一代Blackwell GPU面臨過(guò)熱挑戰(zhàn),交付延期引發(fā)市場(chǎng)關(guān)注
- 馬斯克能否成為 AI 部部長(zhǎng)?硅谷與白宮的聯(lián)系日益緊密
- 余承東:Mate70將在26號(hào)發(fā)布,意外泄露引發(fā)關(guān)注
- 無(wú)人機(jī)“黑科技”亮相航展:全球首臺(tái)低空重力測(cè)量系統(tǒng)引關(guān)注
- 賽力斯發(fā)布聲明:未與任何伙伴聯(lián)合開(kāi)展人形機(jī)器人合作
- 賽力斯觸及漲停,汽車整車股盤(pán)初強(qiáng)勢(shì)拉升
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。