<div style="font-weight: 400;">
<p>本章介紹kubernetes是什么估脆,為什么要用它,具備什么價值座云。</p>
<p>kubernetes是容器的編排系統(tǒng)疙赠,能夠方便地對容器進行管理,包括升級朦拖、擴縮容等等圃阳,并且還具備健康檢查自動治愈等實用功能。
可以把kubernetes想象成一套容器管理系統(tǒng)贞谓,通過k8s(kubernetes的簡稱限佩,k和s之間有8個字符)能夠方便的分配資源、管理容器裸弦。</p>
<h2>軟件發(fā)展歷史</h2>
<p>要理解kubernetes出現(xiàn)的原因祟同,就要理解它解決的問題。這些問題要從服務端軟件發(fā)展的歷史說起理疙。</p>
<h3>微服務興起</h3>
<p>最近幾年服務架構從單體應用到微服務的轉變已經(jīng)成為不可扭轉的趨勢晕城,對于比較復雜的系統(tǒng),拆分成多個微服務窖贤,微服務直接通過rpc接口砖顷、消息接口通信,這樣高內聚低耦合的設計赃梧,能夠降低維護成本滤蝠,各個微服務能夠快速發(fā)展,并且微服務拆分后也方便拆分給不同的團隊授嘀、人員維護物咳,減少共同維護同一個服務的沖突和開銷。
拆分成小的服務后蹄皱,每個服務可以根據(jù)各自的需求決定部署需要的資源览闰。</p>
<h3>微服務變多帶來的運維成本增加</h3>
<p>但是微服務意味著部署復雜度的提升芯肤,每個微服務都需要單獨部署、升級压鉴,每個微服務的負載可能各不相同崖咨,所以也需要單獨進行擴容縮容。
服務部署升級擴容縮容油吭,意味著我們需要給每個微服務分配機器資源击蹲,為了提高資源利用率,我們常常會在一個機器上部署多個微服務上鞠。但是在一個機器上部署多個微服務际邻,可能出現(xiàn)CPU內存網(wǎng)絡等資源爭搶問題,每個微服務所需要的環(huán)境可能也各不相同芍阎,例如依賴不同版本的軟件類庫。這些問題導致了微服務的部署管理難度持續(xù)增大缨恒。</p>
<h3>容器和kubernetes來解決微服務的容器維護管理難題</h3>
<p>為了解決這些問題谴咸,出現(xiàn)了虛擬機、容器等解決方案骗露。虛擬機可以想象成一個機器上的多個子機器岭佳,每個虛擬機具有自己獨立的操作系統(tǒng)、文件萧锉、CPU內存網(wǎng)絡資源珊随,解決了資源爭搶和環(huán)境沖突的問題。不過虛擬機的開銷比較大柿隙,每個虛擬機內部都有一層操作系統(tǒng)叶洞,導致執(zhí)行速度較慢、占用空間較大禀崖。linux中的容器技術衩辟,提供了更為輕量的解決方案,linux中通過namespace實現(xiàn)了進程間的資源視圖隔離波附,通過cgroup實現(xiàn)了CPU內存網(wǎng)絡等資源隔離能力艺晴,Docker在此基礎上增加了可移植性等優(yōu)化,通過Docker掸屡,我們可以方便的定位容器(鏡像)封寞、共享分發(fā)鏡像、啟動容器仅财。</p>
<p>而Docker并沒有提供完整的容器管理方案狈究,比如資源調度、監(jiān)控檢查服務自動治愈满着、自動擴縮容等能力谦炒,最早由google開源的kubernetes就是為容器提供資源調度管理的工具贯莺,Docker是容器技術的一種實現(xiàn)。</p>
<p>通過kubernetes能夠把應用和底層的基礎設施進行解耦宁改,對于應用來說缕探,只需要關心需要什么樣的資源、如何自動还蹲、有哪些依賴等爹耗,而不用關心底層是部署在云廠商還是物理機、虛擬機等各種情況谜喊。</p>