Home >> Blog >> 什麼是k8s Kubernetes?

什麼是k8s Kubernetes?

Kubernetes 是一個可移植、可擴展的開源平台,用於管理容器化工作負載和服務,有助於聲明式配置和自動化。它擁有龐大且快速發展的生態系統。Kubernetes 服務、支持和工具廣泛可用。

Kubernetes 這個名字來源於希臘語,意思是舵手或飛行員。K8s 作為一個縮寫,是通過計算“K”和“s”之間的八個字母得出的。Google 於 2014 年開源了 Kubernetes 項目。Kubernetes 結合了 Google 超過 15 年大規模運行生產工作負載的經驗以及來自社區的最佳創意和實踐。

時光倒流

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

什麼是 Kubernetes?

傳統部署時代: 早期,組織在實體伺服器上運行應用程式。無法為實體伺服器中的應用程式定義資源邊界,這會導致資源分配問題。例如,如果多個應用程式在實體伺服器上運行,則可能會出現一個應用程式佔用大部分資源的情況,結果其他應用程式的性能就會不佳。一個解決方案是在不同的實體伺服器上運行每個應用程式。但這並沒有擴展,因為資源沒有得到充分利用,而且組織維護許多實體伺服器的成本很高。

虛擬化部署時代:作為解決方案,引入了虛擬化。它允許您在單個實體伺服器的 CPU 上運行多個虛擬機 (VM)。虛擬化允許應用程式在 VM 之間隔離,並提供一定程度的安全性,因為一個應用程式的信息不能被另一個應用程式自由訪問。

虛擬化允許更好地利用實體伺服器中的資源並允許更好的可擴展性,因為可以輕鬆添加或更新應用程式,降低硬體成本等等。通過虛擬化,您可以將一組實體資源呈現為一次性虛擬機集群。

每個 VM 都是在虛擬化硬體之上運行所有組件的完整機器,包括它自己的操作系統。

容器部署時代:容器類似於虛擬機,但它們具有放鬆的隔離屬性,可以在應用程式之間共享操作系統(OS)。因此,容器被認為是輕量級的。與 VM 類似,容器有自己的文件系統、CPU 份額、內存、進程空間等。由於它們與底層基礎架構分離,因此它們可以跨雲和操作系統分佈移植。

容器之所以流行,是因為它們提供了額外的好處,例如:

  • 敏捷的應用程式創建和部署:與使用 VM 映像相比,容器映像創建的簡便性和效率更高,許多SEO優化的周邊應用程式都是可以運用容器來部屬。
  • 持續開發、集成和部署:提供可靠且頻繁的容器映像構建和部署以及快速高效的回滾(由於映像不變性)。
  • Dev 和 Ops 的關注點分離:在構建/發佈時而不是部署時創建應用程式容器映像,從而將應用程式與基礎架構解耦。
  • 可觀察性:不僅可以顯示操作系統級別的信息和指標,還可以顯示應用程式運行狀況和其他信號。
  • 開發、測試和生產之間的環境一致性:在筆記本電腦上運行與在雲中運行相同。
  • 雲和操作系統分發可移植性:在 Ubuntu、RHEL、CoreOS、本地、主要公共雲和其他任何地方運行。
  • 以應用程式為中心的管理:將抽象級別從在虛擬硬體上運行操作系統提高到使用邏輯資源在操作系統上運行應用程式。
  • 鬆散耦合、分佈式、彈性、自由的微服務:應用程式被分解成更小的、獨立的部分,並且可以動態部署和管理——而不是在一台大型單一用途機器上運行的單一堆棧。
  • 資源隔離:可預測的應用程式性能。
  • 資源利用:高效率、高密度。

為什麼需要 Kubernetes 以及它可以做什麼

容器是捆綁和運行應用程式的好方法。在生產環境中,您需要管理運行應用程式的容器並確保沒有停機。例如,如果一個容器出現故障,則需要啟動另一個容器。如果這種行為由系統處理,會不會更容易?

這就是 Kubernetes 來救援的方式!Kubernetes 為您提供了一個框架來彈性地運行分佈式系統。它負責您的應用程式的擴展和故障轉移,提供部署模式等等。例如,Kubernetes 可以輕鬆地為您的系統管理金絲雀部署。

Kubernetes 為您提供:

  • 服務發現和負載平衡 Kubernetes 可以使用 DNS 名稱或使用自己的 IP 地址公開容器。如果容器的流量很高,Kubernetes 能夠負載均衡和分配網絡流量,從而使部署穩定。
  • 存儲編排 Kubernetes 允許您自動掛載您選擇的存儲系統,例如本地存儲、公共雲提供商等。
  • 自動推出和回滾 您可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態更改為所需狀態。例如,您可以自動化 Kubernetes 為您的部署創建新容器、刪除現有容器並將其所有資源用於新容器。
  • 自動裝箱 你為 Kubernetes 提供了一個節點集群,它可以用來運行容器化的任務。你告訴 Kubernetes 每個容器需要多少 CPU 和內存 (RAM)。Kubernetes 可以將容器安裝到您的節點上,以充分利用您的資源。
  • 自我修復 Kubernetes 會重新啟動失敗的容器、替換容器、殺死不響應用戶定義的健康檢查的容器,並且在它們準備好服務之前不會將它們通告給客戶端。
  • 秘密和配置管理 Kubernetes 允許您存儲和管理敏感信息,例如密碼、OAuth 令牌和 SSH 密鑰。您可以部署和更新機密和應用程式配置,而無需重新構建容器映像,也無需在堆棧配置中公開機密。

Kubernetes 的幾項"不是"

Kubernetes 不是一個傳統的、包羅萬象的 PaaS(平台即服務)系統。由於 Kubernetes 在容器級別而不是硬體級別運行,因此它提供了一些常見於 PaaS 產品的普遍適用的功能,例如部署、擴展、負載平衡,並允許用戶集成他們的日誌記錄、監控和警報解決方案。然而,Kubernetes 並不是單一的,這些默認的解決方案是可選的和可插拔的。Kubernetes 為構建開發者平台提供了構建塊,但在重要的地方保留了用戶的選擇和靈活性。

Kubernetes:

  • 不限制支持的應用程式類型。Kubernetes 旨在支持極其多樣化的工作負載,包括無狀態、有狀態和數據處理工作負載。如果應用程式可以在容器中運行,它應該在 Kubernetes 上運行良好。
  • 不部署源代碼,也不構建您的應用程式。持續集成、交付和部署 (CI/CD) 工作流程由組織文化和偏好以及技術要求決定。
  • 不提供應用級服務,例如中間件(例如,消息總線)、數據處理框架(例如,Spark)、數據庫(例如,MySQL)、緩存,也不提供集群存儲系統(例如,Ceph)作為內置服務。此類組件可以在 Kubernetes 上運行,和/或可以由運行在 Kubernetes 上的應用程式通過可移植機制(例如Open Service Broker )訪問。
  • 不規定日誌記錄、監控或警報解決方案。它提供了一些集成作為概念證明,以及收集和導出指標的機制。
  • 不提供也不強制要求配置語言/系統(例如 Jsonnet)。它提供了一個聲明性 API,可以針對任意形式的聲明性規範。
  • 不提供也不採用任何全面的機器配置、維護、管理或自我修復系統。
  • 此外,Kubernetes 不僅僅是一個編排系統。事實上,它消除了編排的需要。編排的技術定義是執行已定義的工作流:首先執行 A,然後執行 B,然後執行 C。相比之下,Kubernetes 包含一組獨立的、可組合的控製過程,它們不斷地將當前狀態驅動到提供的所需狀態。從 A 到 C 的方式無關緊要。也不需要集中控制。這導致了一個更易於使用、更強大、更健壯、彈性和可擴展的系統。