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