本章介紹kubernetes是什么稿辙,為什么要用它,具備什么價值气忠。
kubernetes是容器的編排系統(tǒng)邻储,能夠方便地對容器進行管理,包括升級旧噪、擴縮容等等吨娜,并且還具備健康檢查自動治愈等實用功能√灾樱可以把kubernetes想象成一套容器管理系統(tǒng)宦赠,通過k8s(kubernetes的簡稱,k和s之間有8個字符)能夠方便的分配資源、管理容器勾扭。
軟件發(fā)展歷史
要理解kubernetes出現(xiàn)的原因毡琉,就要理解它解決的問題。這些問題要從服務端軟件發(fā)展的歷史說起妙色。
微服務興起
最近幾年服務架構從單體應用到微服務的轉變已經(jīng)成為不可扭轉的趨勢桅滋,對于比較復雜的系統(tǒng),拆分成多個微服務身辨,微服務直接通過rpc接口丐谋、消息接口通信,這樣高內(nèi)聚低耦合的設計煌珊,能夠降低維護成本笋鄙,各個微服務能夠快速發(fā)展,并且微服務拆分后也方便拆分給不同的團隊怪瓶、人員維護,減少共同維護同一個服務的沖突和開銷践美。拆分成小的服務后洗贰,每個服務可以根據(jù)各自的需求決定部署需要的資源。
微服務變多帶來的運維成本增加
但是微服務意味著部署復雜度的提升陨倡,每個微服務都需要單獨部署敛滋、升級,每個微服務的負載可能各不相同兴革,所以也需要單獨進行擴容縮容绎晃。服務部署升級擴容縮容,意味著我們需要給每個微服務分配機器資源杂曲,為了提高資源利用率庶艾,我們常常會在一個機器上部署多個微服務。但是在一個機器上部署多個微服務擎勘,可能出現(xiàn)CPU內(nèi)存網(wǎng)絡等資源爭搶問題咱揍,每個微服務所需要的環(huán)境可能也各不相同,例如依賴不同版本的軟件類庫棚饵。這些問題導致了微服務的部署管理難度持續(xù)增大煤裙。
容器和kubernetes來解決微服務的容器維護管理難題
為了解決這些問題,出現(xiàn)了虛擬機噪漾、容器等解決方案硼砰。虛擬機可以想象成一個機器上的多個子機器,每個虛擬機具有自己獨立的操作系統(tǒng)欣硼、文件题翰、CPU內(nèi)存網(wǎng)絡資源,解決了資源爭搶和環(huán)境沖突的問題。不過虛擬機的開銷比較大遍愿,每個虛擬機內(nèi)部都有一層操作系統(tǒng)存淫,導致執(zhí)行速度較慢、占用空間較大沼填。linux中的容器技術桅咆,提供了更為輕量的解決方案,linux中通過namespace實現(xiàn)了進程間的資源視圖隔離坞笙,通過cgroup實現(xiàn)了CPU內(nèi)存網(wǎng)絡等資源隔離能力岩饼,Docker在此基礎上增加了可移植性等優(yōu)化,通過Docker薛夜,我們可以方便的定位容器(鏡像)籍茧、共享分發(fā)鏡像、啟動容器梯澜。
而Docker并沒有提供完整的容器管理方案寞冯,比如資源調(diào)度、監(jiān)控檢查服務自動治愈晚伙、自動擴縮容等能力吮龄,最早由google開源的kubernetes就是為容器提供資源調(diào)度管理的工具,Docker是容器技術的一種實現(xiàn)咆疗。
通過kubernetes能夠把應用和底層的基礎設施進行解耦漓帚,對于應用來說,只需要關心需要什么樣的資源午磁、如何自動尝抖、有哪些依賴等,而不用關心底層是部署在云廠商還是物理機迅皇、虛擬機等各種情況昧辽。