Kubernetes 簡介

2022-04-28 09:36 更新

簡介

Kubernetes 是一個可移植的、可擴展的開源平臺,用于管理容器化的工作負載和服務(wù),可促進聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態(tài)系統(tǒng)。Kubernetes 的服務(wù)、支持和工具廣泛可用。

Kubernetes 這個名字源于希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字符的關(guān)系。 Google 在 2014 年開源了 Kubernetes 項目。Kubernetes 建立在 Google 在大規(guī)模運行生產(chǎn)工作負載方面擁有十幾年的經(jīng)驗 的基礎(chǔ)上,結(jié)合了社區(qū)中最好的想法和實踐。

時光回溯

讓我們回顧一下為什么 Kubernetes 如此有用。

container_evolution

傳統(tǒng)部署時代:

早期,各個組織機構(gòu)在物理服務(wù)器上運行應(yīng)用程序。無法為物理服務(wù)器中的應(yīng)用程序定義資源邊界,這會導(dǎo)致資源分配問題。 例如,如果在物理服務(wù)器上運行多個應(yīng)用程序,則可能會出現(xiàn)一個應(yīng)用程序占用大部分資源的情況, 結(jié)果可能導(dǎo)致其他應(yīng)用程序的性能下降。 一種解決方案是在不同的物理服務(wù)器上運行每個應(yīng)用程序,但是由于資源利用不足而無法擴展, 并且維護許多物理服務(wù)器的成本很高。

虛擬化部署時代:

作為解決方案,引入了虛擬化。虛擬化技術(shù)允許你在單個物理服務(wù)器的 CPU 上運行多個虛擬機(VM)。 虛擬化允許應(yīng)用程序在 VM 之間隔離,并提供一定程度的安全,因為一個應(yīng)用程序的信息 不能被另一應(yīng)用程序隨意訪問。

虛擬化技術(shù)能夠更好地利用物理服務(wù)器上的資源,并且因為可輕松地添加或更新應(yīng)用程序 而可以實現(xiàn)更好的可伸縮性,降低硬件成本等等。

每個 VM 是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統(tǒng)。

容器部署時代:

容器類似于 VM,但是它們具有被放寬的隔離屬性,可以在應(yīng)用程序之間共享操作系統(tǒng)(OS)。 因此,容器被認為是輕量級的。容器與 VM 類似,具有自己的文件系統(tǒng)、CPU、內(nèi)存、進程空間等。 由于它們與基礎(chǔ)架構(gòu)分離,因此可以跨云和 OS 發(fā)行版本進行移植。

容器因具有許多優(yōu)勢而變得流行起來。下面列出的是容器的一些好處:

  • 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡便性和效率。
  • 持續(xù)開發(fā)、集成和部署:通過快速簡單的回滾(由于鏡像不可變性),支持可靠且頻繁的 容器鏡像構(gòu)建和部署。
  • 關(guān)注開發(fā)與運維的分離:在構(gòu)建/發(fā)布時而不是在部署時創(chuàng)建應(yīng)用程序容器鏡像, 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
  • 可觀察性:不僅可以顯示操作系統(tǒng)級別的信息和指標(biāo),還可以顯示應(yīng)用程序的運行狀況和其他指標(biāo)信號。
  • 跨開發(fā)、測試和生產(chǎn)的環(huán)境一致性:在便攜式計算機上與在云中相同地運行。
  • 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運行。
  • 以應(yīng)用程序為中心的管理:提高抽象級別,從在虛擬硬件上運行 OS 到使用邏輯資源在 OS 上運行應(yīng)用程序。
  • 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨立部分, 并且可以動態(tài)部署和管理 - 而不是在一臺大型單機上整體運行。
  • 資源隔離:可預(yù)測的應(yīng)用程序性能。
  • 資源利用:高效率和高密度。

為什么需要 Kubernetes,它能做什么?

容器是打包和運行應(yīng)用程序的好方式。在生產(chǎn)環(huán)境中,你需要管理運行應(yīng)用程序的容器,并確保不會停機。 例如,如果一個容器發(fā)生故障,則需要啟動另一個容器。如果系統(tǒng)處理此行為,會不會更容易?

這就是 Kubernetes 來解決這些問題的方法! Kubernetes 為你提供了一個可彈性運行分布式系統(tǒng)的框架。 Kubernetes 會滿足你的擴展要求、故障轉(zhuǎn)移、部署模式等。 例如,Kubernetes 可以輕松管理系統(tǒng)的 Canary 部署。

Kubernetes 為你提供:

  • 服務(wù)發(fā)現(xiàn)和負載均衡
  • Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡并分配網(wǎng)絡(luò)流量,從而使部署穩(wěn)定。
  • 存儲編排
  • Kubernetes 允許你自動掛載你選擇的存儲系統(tǒng),例如本地存儲、公共云提供商等。

  • 自動部署和回滾

  • 你可以使用 Kubernetes 描述已部署容器的所需狀態(tài),它可以以受控的速率將實際狀態(tài) 更改為期望狀態(tài)。例如,你可以自動化 Kubernetes 來為你的部署創(chuàng)建新容器, 刪除現(xiàn)有容器并將它們的所有資源用于新容器。

  • 自動完成裝箱計算

  • Kubernetes 允許你指定每個容器所需 CPU 和內(nèi)存(RAM)。 當(dāng)容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。

  • 自我修復(fù)

  • Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應(yīng)用戶定義的 運行狀況檢查的容器,并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端。

  • 密鑰與配置管理

  • Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置,也無需在堆棧配置中暴露密鑰。

Kubernetes 不是什么

Kubernetes 不是傳統(tǒng)的、包羅萬象的 PaaS(平臺即服務(wù))系統(tǒng)。 由于 Kubernetes 在容器級別而不是在硬件級別運行,它提供了 PaaS 產(chǎn)品共有的一些普遍適用的功能, 例如部署、擴展、負載均衡、日志記錄和監(jiān)視。 但是,Kubernetes 不是單體系統(tǒng),默認解決方案都是可選和可插拔的。 Kubernetes 提供了構(gòu)建開發(fā)人員平臺的基礎(chǔ),但是在重要的地方保留了用戶的選擇和靈活性。

Kubernetes:

  • 不限制支持的應(yīng)用程序類型。 Kubernetes 旨在支持極其多種多樣的工作負載,包括無狀態(tài)、有狀態(tài)和數(shù)據(jù)處理工作負載。 如果應(yīng)用程序可以在容器中運行,那么它應(yīng)該可以在 Kubernetes 上很好地運行。
  • 不部署源代碼,也不構(gòu)建你的應(yīng)用程序。 持續(xù)集成(CI)、交付和部署(CI/CD)工作流取決于組織的文化和偏好以及技術(shù)要求。
  • 不提供應(yīng)用程序級別的服務(wù)作為內(nèi)置服務(wù),例如中間件(例如,消息中間件)、 數(shù)據(jù)處理框架(例如,Spark)、數(shù)據(jù)庫(例如,mysql)、緩存、集群存儲系統(tǒng) (例如,Ceph)。這樣的組件可以在 Kubernetes 上運行,并且/或者可以由運行在 Kubernetes 上的應(yīng)用程序通過可移植機制(例如, 開放服務(wù)代理)來訪問。
  • 不要求日志記錄、監(jiān)視或警報解決方案。 它提供了一些集成作為概念證明,并提供了收集和導(dǎo)出指標(biāo)的機制。
  • 不提供或不要求配置語言/系統(tǒng)(例如 jsonnet),它提供了聲明性 API, 該聲明性 API 可以由任意形式的聲明性規(guī)范所構(gòu)成。
  • 不提供也不采用任何全面的機器配置、維護、管理或自我修復(fù)系統(tǒng)。
  • 此外,Kubernetes 不僅僅是一個編排系統(tǒng),實際上它消除了編排的需要。 編排的技術(shù)定義是執(zhí)行已定義的工作流程:首先執(zhí)行 A,然后執(zhí)行 B,再執(zhí)行 C。 相比之下,Kubernetes 包含一組獨立的、可組合的控制過程, 這些過程連續(xù)地將當(dāng)前狀態(tài)驅(qū)動到所提供的所需狀態(tài)。 如何從 A 到 C 的方式無關(guān)緊要,也不需要集中控制,這使得系統(tǒng)更易于使用 且功能更強大、系統(tǒng)更健壯、更為彈性和可擴展。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號