容器化實踐指南 邁出容器化的第一步:集群管理

原標題:容器化實踐指南邁出容器化的第一步:集群管理

隨著容器技術(shù)日漸成熟以及Kubernetes風(fēng)靡一時,IT架構(gòu)容器化已經(jīng)從前沿技術(shù)公司的探索逐漸成為大部分企業(yè)IT的發(fā)展方向。

最近CNCF(云原生計算基金會)云原生調(diào)查反映:在亞洲市場,幾乎所有容器管理工具的使用率都有所增長,現(xiàn)成商業(yè)解決方案總體增長58%,本土解決方案增長690%,Kubernetes增長11%。Kubernetes集群在生產(chǎn)中的規(guī)模也在擴大,運行1-5個生產(chǎn)集群的組織減少37%,而運行11-50個集群的受訪者增加 154%。

百度云作為CNCF的金牌會員,同時也是國內(nèi)容器技術(shù)的最早踐行者之一,在過去7年的內(nèi)部容器化實踐中積累了大量的經(jīng)驗。本系列文章將從企業(yè)容器化場景出發(fā),從不同角度呈現(xiàn)容器化過程中需要理解的概念和常見問題的解決方案,幫助百度云用戶更好地使用容器技術(shù),利用云原生的IT架構(gòu)為業(yè)務(wù)的高速發(fā)展保駕護航。

容器引擎與容器集群技術(shù)

容器技術(shù)的雛形其實最早在1979年就已經(jīng)誕生,其初衷是在同一個操作系統(tǒng)中,為不同進程提供相互隔離的運行環(huán)境。隨著技術(shù)發(fā)展,容器現(xiàn)在已經(jīng)成為了一種典型的輕量級虛擬化技術(shù),它依托于操作系統(tǒng)的基礎(chǔ)架構(gòu)之上,為應(yīng)用程序提供獨立的運行環(huán)境。由于應(yīng)用程序的運行只需要與容器交互,因此開發(fā)者無需關(guān)心底層操作系統(tǒng)的差異,使得容器化應(yīng)用的部署和遷移變得極為方便,再加上容器本身輕量級的特點,其啟停速度遠快于傳統(tǒng)的虛擬機,讓應(yīng)用程序在分布式架構(gòu)中的彈性擴展變得更加簡單。

談到容器,我們往往都會直接與Docker關(guān)聯(lián)起來。實際上Docker只是容器引擎技術(shù)的一種,由于Docker將容器技術(shù)推向了巔峰,因此它已經(jīng)成為了容器引擎技術(shù)的事實標準。作為一項容器引擎技術(shù),Docker解決的問題就是如何在操作系統(tǒng)中生成和運行容器。無論是在物理機、虛擬機或者任何一個廠商的云服務(wù)器中,開發(fā)者都可以通過Docker快速定義和啟動容器環(huán)境,并將自身業(yè)務(wù)運行在其中。

Docker基本架構(gòu)(圖片來源網(wǎng)絡(luò))

但是由于容器輕量級的特性,大部分業(yè)務(wù)系統(tǒng)都無法單獨運行在一個容器當中,而是需要多個容器環(huán)境協(xié)同工作。容器引擎僅僅解決了單個容器如何在操作系統(tǒng)中運行的問題,而無法幫助用戶完成大量容器的協(xié)同管理和編排,因此容器編排和管理系統(tǒng)也就應(yīng)運而生。

當用戶需要通過容器來運行一個大型應(yīng)用或者復(fù)雜系統(tǒng)時,往往需要啟動在多個服務(wù)器上的大量容器。容器管理系統(tǒng)可以幫助用戶執(zhí)行大量的復(fù)雜任務(wù),包括:定義不同容器的角色和關(guān)系、安排容器的資源分配和部署、對容器的健康狀況進行檢查、當容器出現(xiàn)故障時進行容錯處理、在業(yè)務(wù)量變化時對容器進行彈性伸縮等。

容器管理系統(tǒng)在容器的生產(chǎn)化應(yīng)用中是必不可少的,在容器技術(shù)的探索階段,許多前沿企業(yè)都研發(fā)了各自的管理系統(tǒng),其中也包括百度自研的Matrix。而近幾年來,隨著開源的容器管理系統(tǒng)Kubernetes(簡稱K8S)的飛速發(fā)展,它已經(jīng)基本成為容器管理系統(tǒng)的事實標準。百度也在Kubernetes的早期即參與了開源社區(qū)的多項工作,并且于2017年在百度云上推出了基于Kubernetes的云容器引擎產(chǎn)品CCE。

百度云CCE產(chǎn)品架構(gòu)圖(圖片來源網(wǎng)絡(luò))

由于Kubernetes是一個分布式的容器管理系統(tǒng),因此其往往部署在一個多節(jié)點的服務(wù)器集群中,Kubernetes本身的各個組件以及用戶業(yè)務(wù)的容器都將部署在該集群的各個節(jié)點中。Kubernetes提供了一套用于管理集群節(jié)點以及節(jié)點間協(xié)作的模型,使用者需要遵循這個模型搭建集群的節(jié)點、網(wǎng)絡(luò)和存儲架構(gòu),同時對集群容量和運行狀態(tài)進行監(jiān)控和管理。因此對于企業(yè)而言,理解如何創(chuàng)建和管理一個Kubernetes集群就成為了實現(xiàn)容器化架構(gòu)的第一個挑戰(zhàn)。

容器集群的搭建和節(jié)點管理

一個Kubernetes集群通常由一組網(wǎng)絡(luò)上互通的節(jié)點組成,節(jié)點可以是虛擬機或者物理機器,為Kubernetes組件和用戶容器提供了運行所需的資源。用戶需要部署一組Master組件對節(jié)點進行管理,同時每個節(jié)點上需要部署一些必要的服務(wù),用于管理節(jié)點上的容器并與Master組件通信。因此搭建一個Kubernetes集群通常分為3個步驟:部署Master組件、創(chuàng)建節(jié)點并部署節(jié)點服務(wù)、將節(jié)點注冊到Master。

(圖片來源網(wǎng)絡(luò))

Master組件理論上可以在集群中的任何節(jié)點運行,但是為了更方便維護和提供更高的穩(wěn)定性,通常會使用獨立的1個或者多個節(jié)點部署所有Master組件,這些節(jié)點上不再運行任何用戶的容器。最基本的Master組件包括:

kube-apiserver、etcd、kube-controller-manager、cloud-controller-manager、kube-scheduler、addons、Cluster DNS、dashboard 、資源監(jiān)控組件、集群日志組件等。(對于每個組件具體的工作內(nèi)容和運行機制,我們未來將會進行詳細闡述)

在這些Master組件中,kube-apiserver負責對外暴露Kubernetes API,用于接收用戶指令,并且與所有的工作節(jié)點進行通訊。kube-apiserver具備水平擴展的能力,因此可以通過部署在多個虛擬或者物理服務(wù)器上來提供高可用的架構(gòu),此時就需要為kube-apiserver搭建一個單獨的負載均衡,用于與外部進行通訊。

在百度云上,用戶創(chuàng)建CCE集群時,系統(tǒng)會在用戶所購買的工作節(jié)點以外,提供額外且免費的多個節(jié)點用于搭建高可用的Master,這些Master節(jié)點本身對用戶不可見(無法直接通過SSH訪問),但是系統(tǒng)會提供免費的負載均衡和公網(wǎng)IP地址,讓用戶可以在本地或者云服務(wù)器上通過kubeclt(一個用于執(zhí)行Kubernetes命令的本地工具)直接與kube-apiserver進行交互,從而控制和管理整個容器集群。

Master組件就緒以后,用戶需要對每個集群節(jié)點進行部署,必要的節(jié)點服務(wù)包括:kubelet、kube-proxy、Docker等。其中kubelet用于執(zhí)行Master對容器的調(diào)度,監(jiān)控和管理節(jié)點上所有容器的生命周期,kube-proxy用于維護節(jié)點上的網(wǎng)絡(luò)轉(zhuǎn)發(fā)規(guī)則,讓流量可以訪問到正確的容器上,Docker則起到容器引擎的作用,用于啟動和運行容器。

除此以外,還有一些采集節(jié)點日志和監(jiān)控信息的組件,也可以運行在節(jié)點當中。搭建工作節(jié)點除了在每個節(jié)點上部署以上服務(wù)以外,還需要確保節(jié)點組件與Master組件可以互相通訊,通常需要保障工作節(jié)點可以訪問到Master中的kube-apiserver,并且kube-apiserver也可以訪問每個節(jié)點中的kubelet組件。

在完成工作節(jié)點上的部署且網(wǎng)絡(luò)連通的情況下,節(jié)點將會自動向kube-apiserver注冊自己,注冊的信息包括節(jié)點的IP地址、節(jié)點的標簽、節(jié)點的容量以及一些用于描述節(jié)點的元數(shù)據(jù)等。用戶也可以通過在kubelet中設(shè)置--register-node=false來關(guān)閉自動注冊,然后手動提交注冊信息。節(jié)點被注冊到Master之后,會由Master組件中的Node Controller進行管理,該組件將會監(jiān)控每個工作節(jié)點的完整生命周期,對節(jié)點的狀態(tài)進行標記,從而輔助容器調(diào)度策略的執(zhí)行。

工作節(jié)點的部署和注冊決定了用戶容器運行的環(huán)境和可使用的資源容量,因此是IT部門維護容器集群的工作重點。

在百度云上,用戶可以隨時向CCE集群中添加新的節(jié)點,只需要選擇所需節(jié)點的容量大小和操作系統(tǒng),系統(tǒng)將會自動幫助用戶完成節(jié)點組件的部署,并且將節(jié)點注冊到Master,大大降低了節(jié)點管理的工作復(fù)雜度。同時,在用戶業(yè)務(wù)運行的過程中,CCE也提供了便利的自動擴縮容能力,可以在節(jié)點資源不足或者過剩時,自動完成節(jié)點的添加或者釋放,從而幫助用戶最大化利用云上資源。

下期內(nèi)容預(yù)告

在完成容器集群Master和工作節(jié)點的搭建后,集群就已經(jīng)具備啟動和調(diào)度容器的基本條件了。但是要真正承載企業(yè)級業(yè)務(wù)的穩(wěn)定和可用性,還需要對集群的網(wǎng)絡(luò)、存儲架構(gòu)以及如何監(jiān)控集群進行更加全面的規(guī)劃。下一期內(nèi)容我們將繼續(xù)聚焦在容器集群管理上,介紹如何在云端規(guī)劃和管理容器集群的網(wǎng)絡(luò)、存儲和監(jiān)控,幫助您更好地理解和管理自己的容器集群。

關(guān)注百度云微信公眾號,體驗、使用百度云容器引擎CCE。

免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-02-18
容器化實踐指南 邁出容器化的第一步:集群管理
由于Kubernetes是一個分布式的容器管理系統(tǒng),因此其往往部署在一個多節(jié)點的服務(wù)器集群中,Kubernetes本身的各個組件以及用戶業(yè)務(wù)的容器都將部署在該集群的各個節(jié)點中。

長按掃碼 閱讀全文