【雲原生】快速瞭解Kubernetes

語言: CN / TW / HK

在雲原生技術發展的浪潮之中,Kubernetes伴隨著容器技術的發展,成為了目前雲時代的“作業系統”。Kubernetes作為容器叢集管理系統和雲原生領域的關鍵專案,已經是雲原生時代最需要理解與實踐的核心技術。但技術的發展從來都不是一蹴而就,Kubernetes的誕生也有其對應的技術歷史背景。

 

目錄

一、 Kubernetes 是什麼?

1.雲計算髮展歷程

2.Kubernetes 是什麼?

3. 容器與虛擬機器 (VM)有什麼不同?

4. 傳統部署與虛擬部署及容器部署的區別

二、 為什麼需要 Kubernetes?

1. Kubernetes 為你提供:

2. 整體架構(參考)


 

一、 Kubernetes 是什麼?

1.雲計算髮展歷程

 

使用者使用資源的形態由早期的物理機過渡到虛擬機器,再進化到目前更輕量的Docker容器。本質上雲端計算實現的關鍵突破就在於資源使用方式的改變,其最初解決的核心的問題就是解決應用的託管(部署與管理)的問題。

雲計算髮展歷程,其從物理機到傳統的IaaS階段,進而發展為早期的PaaS,直至發展到如今的基於Kubernetes架構的新興PaaS平臺。如下圖所示:

 

2.Kubernetes 是什麼?

Kubernetes 是一個容器叢集管理系統是一個可移植、可擴充套件的開源平臺,用於管理容器化的工作負載和服務,可以實現容器叢集的自動化部署、自動擴縮容、維護等功能。 Kubernetes 擁有一個龐大且快速增長的生態,其服務、支援和工具的使用範圍相當廣泛。

我們通過Kubernetes可以:

  • 快速部署應用
  • 快速擴充套件應用
  • 無縫對接新的應用功能
  • 節省資源,優化硬體資源的使用

Kubernetes 的特點

  • 可移植: 支援公有云,私有云,混合雲,多重雲(multi-cloud)
  • 可擴充套件: 模組化, 外掛化, 可掛載, 可組合
  • 自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴充套件

3. 容器與虛擬機器 (VM)有什麼不同?

容器是一種作業系統虛擬化形式。可以使用一個容器來執行從小型微服務或軟體程序到大型應用程式的所有內容。容器包含所有必要的可執行檔案、二進位制程式碼、庫和配置檔案。但是,與伺服器或計算機虛擬化方法不同,容器不包含作業系統映像。因此,它們更輕便且可移植,其開銷很小。在大型應用程式部署中,可以將多個容器部署為一個或多個容器叢集。此類叢集可由 Kubernetes 等容器編排程式管理。

 

什麼是虛擬機器 (VM)?從歷史上看,隨著伺服器處理能力和容量的增加,裸機應用程式無法利用新的豐富資源。因此,虛擬機器誕生了,它通過在物理伺服器上執行軟體來模擬特定的硬體系統而設計。管理程式或虛擬機器監視器是建立和執行 VM 的軟體、韌體或硬體。它位於硬體和虛擬機器之間,是虛擬化伺服器所必需的。
在每個虛擬機器中執行一個獨特的客戶作業系統。具有不同作業系統的虛擬機器可以在同一物理伺服器上執行——UNIX虛擬機器可以與 Linux 虛擬機器並排執行,等等。每個 VM 都有自己的二進位制檔案、庫和它所服務的應用程式。

 簡而言之,容器比 VM 更輕、更便攜。他提供了一種邏輯打包機制,以這種機制打包的應用可以脫離其實際執行的環境。利用這種脫離,不管目標環境是私有資料中心、公有云,還是開發者的個人膝上型電腦,都可以輕鬆、一致地部署基於容器的應用。容器化使開發者和 IT 運營團隊的關注點涇渭分明——開發者專注於應用邏輯和依賴項,而IT運營團隊則可以專注於部署和管理,不必為具體的軟體版本和應用特有的配置等應用細節分心。

 

 

結論:虛擬機器和容器在幾個方面有所不同,但主要區別在於容器提供了一種虛擬化作業系統的方法,以便多個工作負載可以在單個作業系統例項上執行。容器的速度、敏捷性和可移植性使其成為幫助簡化軟體開發的又一工具。

 

4. 傳統部署虛擬部署及容器部署的區別

 

 

傳統部署時代:

早期,都是在物理伺服器上執行應用程式。由於無法限制在物理伺服器中執行的應用程式的資源使用,因此會導致資源分配問題。例如,如果在物理伺服器上執行多個應用程式, 則可能會出現一個應用程式佔用大部分資源的情況,而導致其他應用程式的效能下降。一種解決方案是將每個應用程式都執行在不同的物理伺服器上,但是當某個應用程式資源利用率不高時,剩餘資源無法被分配給其他應用程式,而且維護許多物理伺服器的成本很高。

虛擬化部署時代:

因此,虛擬化技術被引入了。虛擬化技術允許你在單個物理伺服器的 CPU 上執行多臺虛擬機器(VM)。 虛擬化能使應用程式在不同 VM 之間被彼此隔離,且能提供一定程度的安全性, 因為一個應用程式的資訊不能被另一應用程式隨意訪問。

虛擬化技術能夠更好地利用物理伺服器的資源,並且因為可輕鬆地新增或更新應用程式, 而因此可以具有更高的可伸縮性,以及降低硬體成本等等的好處。

每個 VM 是一臺完整的計算機,在虛擬化硬體之上執行所有元件,包括其自己的作業系統(OS)。

容器部署時代:

容器類似於 VM,但是更寬鬆的隔離特性,使容器之間可以共享作業系統(OS)。 因此,容器比起 VM 被認為是更輕量級的。且與 VM 類似,每個容器都具有自己的檔案系統、CPU、記憶體、程序空間等。 由於它們與基礎架構分離,因此可以跨雲和 OS 發行版本進行移植。

容器因具有許多優勢而變得流行起來 

  • 敏捷應用程式的建立和部署:與使用 VM 映象相比,提高了容器映象建立的簡便性和效率。
  • 持續開發、整合和部署:通過快速簡單的回滾(由於映象不可變性), 提供可靠且頻繁的容器映象構建和部署。
  • 關注開發與運維的分離:在構建、釋出時建立應用程式容器映象,而不是在部署時, 從而將應用程式與基礎架構分離。
  • 可觀察性:不僅可以顯示 OS 級別的資訊和指標,還可以顯示應用程式的執行狀況和其他指標訊號。
  • 跨開發、測試和生產的環境一致性:在筆記本計算機上也可以和在雲中執行一樣的應用程式。
  • 跨雲和作業系統發行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方執行。
  • 以應用程式為中心的管理:提高抽象級別,從在虛擬硬體上執行 OS 到使用邏輯資源在 OS 上執行應用程式。
  • 鬆散耦合、分散式、彈性、解放的微服務:應用程式被分解成較小的獨立部分, 並且可以動態部署和管理 - 而不是在一臺大型單機上整體執行。
  • 資源隔離:可預測的應用程式效能。
  • 資源利用:高效率和高密度。

二、 為什麼需要 Kubernetes?

Kubernetes 這個名字源於希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有8個字元的關係。 Google 在 2014 年開源了 Kubernetes 專案。Kubernetes 建立在Google 大規模執行生產工作負載十幾年經驗的基礎上, 結合了社群中最優秀的想法和實踐。

容器是打包和執行應用程式的好方式。在生產環境中, 你需要管理執行著應用程式的容器,並確保服務不會下線。 例如,如果一個容器發生故障,則你需要啟動另一個容器。 如果此行為交由給系統處理,是不是會更容易一些?

這就是 Kubernetes 要來做的事情! Kubernetes 為你提供了一個可彈性執行分散式系統的框架。 Kubernetes 會滿足你的擴充套件要求、故障轉移、部署模式等。 例如,Kubernetes 可以輕鬆管理系統的 Canary 部署canary 部署是通過更新單個節點或一部分節點啟動的部署

 

1. Kubernetes 為你提供:

  • 服務發現和負載均衡

Kubernetes可以使用DNS名稱或自己的IP地址來曝露容器。如果進入容器的流量很大,Kubernetes可以負載均衡並分配網路流量從而使部署穩定。

  • 儲存編排

Kubernetes允許你自動掛載你選擇的儲存系統,例如本地儲存、公共雲提供商等。

  • 自動部署和回滾

你可以使用Kubernetes描述已部署容器的所需狀態,它可以以受控的速率將實際狀態更改為期望狀態。例如你可以自動化Kubernetes來為你的部署建立新容器,刪除現有容器並將它們的所有資源用於新容器。

  • 自動完成裝箱計算

Kubernetes允許你指定每個容器所需 CPU 和記憶體(RAM)。當容器指定了資源請求時,Kubernetes可以做出更好的決策來為容器分配資源。

  • 自我修復

Kubernetes將重新啟動失敗的容器、替換容器、殺死不響應使用者定義的執行狀況檢查的容器,並且在準備好服務之前不將其通告給客戶端。

  • 金鑰與配置管理

Kubernetes 允許你儲存和管理敏感資訊,例如密碼、OAuth 令牌和 ssh 金鑰。 你可以在不重建容器映象的情況下部署和更新金鑰和應用程式配置,也無需在堆疊配置中暴露金鑰。

2. 整體架構(參考)

Kubernets整體架構,如下所示:

 整個系統由控制面(Master)與資料面(Worker Node)組成。Master核心元件:

  1. API Server。叢集控制的唯一入口,它是各個元件通訊的中心樞紐。
  2. controller-mananger。負責編排,用於調節系統狀態。內建了多種控制器(DeploymentController、- ServiceController、NodeController、HPAController等)是Kubernetes維護業務和叢集狀態的最核心元件。
  3. scheduler。叢集的排程器,它負責在Kubernetes叢集中為Pod資源物件找到合適節點並使其在該節點上執行。
  4. etcd。用於儲存Kubernetes叢集的資料與狀態資訊。

Kubernetes架構具備高可用:一方面Master節點高可用;另一方面所部署的業務也是高可用的。系統高可用的核心在於冗餘部署,當某一個節點或程式出現異常時,其他節點或程式能分擔或替換工作。Master節點高可用,主要由以下幾個方面的設計實現:

  1. Master由多臺伺服器構成。
  2. API Server多例項同時工作,負載均衡。
  3. etcd多節點,一主多從。
  4. controller-manager與scheduler搶主實現。

Work Node節點由以下元件組成:

  1. kubelet:負責Pod對應容器的建立、啟停等任務,是部署在Node上的一個agent。
  2. kube-proxy:實現Service通訊與負載均衡機制。

容器執行時(如Docker):負責本機的容器建立和管理。

 

參考資料:

1.Kubernetes 文件

2.NetApp文件

🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果三連收藏支援就更好啦!謝謝各位大佬給予的鼓勵!