k8s簡介

wongchaofan發表於2024-06-04

Kubernetes 的架構

Kubernetes 遵循客戶端-伺服器架構,其中主伺服器安裝在一臺機器上,節點安裝在單獨的 Linux 機器上。它遵循主從模型,使用主伺服器管理跨多個 Kubernetes 節點的 Docker 容器。主伺服器及其控制的節點(工作節點)構成“Kubernetes 叢集”。開發人員可以在 Kubernetes 主伺服器的幫助下在 Docker 容器中部署應用程式。

Kubernetes 的關鍵元件

1. Kubernetes-主節點元件

Kubernetes Master 負責管理整個叢集,協調叢集內的所有活動,並與工作節點通訊以保持 Kubernetes 和應用程式執行。這是所有管理任務的入口點。當我們在系統上安裝 Kubernetes 時,我們將安裝 Kubernetes Master 的四個主要元件。Kubernetes Master 節點的元件包括:

API 伺服器

API 伺服器是用於控制叢集的所有 REST 命令的入口點。所有管理任務均由主節點內的 API 伺服器完成。如果我們想在 Kubernetes 中建立、刪除、更新或顯示物件,則必須透過此 API 伺服器。API 伺服器驗證和配置 API 物件(例如埠、服務、複製、控制器和部署),並負責為每個操作公開 API。我們可以使用名為kubectl的工具與這些 API 進行互動。'kubectl ' 是一個非常小的 go 語言二進位制檔案,它基本上與 API 伺服器對話以執行我們從命令列發出的任何操作。它是一個用於針對 Kubernetes 叢集執行命令的命令列介面

Scheduler

它是主節點中負責分配工作負載的服務。它負責跟蹤每個工作節點的工作負載利用率,然後將工作負載放在可用資源上並可以接受工作負載。排程程式負責根據您在配置檔案中提到的約束在可用節點之間排程 pod,並相應地排程這些 pod。排程程式負責工作負載利用率並將 pod 分配給新節點。

Controller Manager

也稱為控制器。它是一個在非終止迴圈中執行的守護程序,負責收集資訊並將其傳送到 API 伺服器。它透過執行生活方式功能(例如名稱空間建立和生命週期事件垃圾收集、終止 pod 垃圾收集、級聯刪除垃圾收集、節點垃圾收集等)來管理 Kubernetes 叢集。基本上,控制器監視叢集的期望狀態,如果叢集的當前狀態不符合期望狀態,則控制迴圈採取糾正步驟以確保當前狀態與期望狀態相同。關鍵控制器是複製控制器、端點控制器、名稱空間控制器和服務帳戶控制器。因此,透過這種方式,控制器負責整個叢集的整體執行狀況,確保節點始終處於啟動和執行狀態,並且正確的 pod 正在執行,如規範檔案中所述。

ETC

它是一個分散式鍵值輕量級資料庫。在 Kubernetes 中,它是一箇中央資料庫,用於儲存任何時間點的當前叢集狀態,還用於儲存配置詳細資訊,例如子網、配置對映等。它是用 Go 程式語言編寫的。

2. Kubernetes-工作節點元件

Kubernetes Worker 節點包含管理容器之間的網路、與主節點通訊以及為計劃的容器分配資源所需的所有服務。Kubernetes Worker 節點的元件包括:

Kubelet

它是一個主節點代理,與主節點通訊並在叢集內的每個工作節點上執行。它透過 API 伺服器獲取 pod 規範並執行與 pod 關聯的容器,並確保 pod 中描述的容器正在執行且健康。如果 kubelet 注意到在工作節點上執行的 pod 存在任何問題,它會嘗試在同一節點上重新啟動 pod。如果問題出在工作節點本身,則 Kubernetes 主節點會檢測到節點故障並決定在另一個健康節點上重新建立 pod。

Kube-Proxy

它是 Kubernetes 叢集中的核心網路元件。它負責維護整個網路配置。Kube-Proxy 維護所有節點、pod 和容器的分散式網路,並將服務暴露給外界。它充當單個工作節點上服務的網路代理和負載均衡器,並管理 TCP 和 UDP 資料包的網路路由。它會監聽 API 伺服器以瞭解每個服務端點的建立和刪除,因此它會為每個服務端點設定路由,以便您可以訪問它。

Pods

pod 是一組部署在同一主機上的容器。藉助 pod,我們可以將多個依賴容器部署在一起,這樣它就可以充當這些容器的包裝器,這樣我們就可以透過 pod 來互動和管理這些容器。

Docker

Docker 是一個容器化平臺,用於將您的應用程式及其所有依賴項以容器的形式打包在一起,以確保您的應用程式在任何環境中都能無縫執行,無論是開發、測試還是生產。Docker 是一種旨在使使用容器建立、部署和執行應用程式變得更加容易的工具。Docker 是世界領先的軟體容器平臺。它由一家名為 Dot cloud 的公司於 2013 年推出。它是用 Go 語言編寫的。Docker 推出僅六年,但社群已經從虛擬機器轉向它。Docker 旨在使開發人員和系統管理員都受益,使其成為許多 DevOps 工具鏈的一部分。開發人員可以編寫程式碼而不必擔心測試和生產環境。系統管理員不必擔心基礎設施,因為 Docker 可以輕鬆擴充套件和縮減系統數量。Docker 在軟體開發週期的部署階段發揮作用。

Kubernetes 的應用

  • 微服務架構:Kubernetes 非常適合管理微服務架構,它將複雜的應用程式分解為可以獨立部署和管理的更小的模組化元件。
  • 雲原生開發:Kubernetes 是雲原生開發的關鍵元件,它涉及構建旨在在雲基礎設施上執行的應用程式並利用雲的可擴充套件性、靈活性和彈性。
  • 持續整合和交付:Kubernetes 與 CI/CD 管道很好地整合,從而更容易自動化部署過程並以最少的停機時間推出應用程式的新版本。
  • 混合和多雲部署:Kubernetes 在不同的雲提供商、內部資料中心甚至開發人員膝上型電腦之間提供一致的部署和管理體驗,從而更容易構建和管理混合和多雲部署。
  • 高效能運算:Kubernetes 可用於管理高效能運算工作負載,例如科學模擬、機器學習和大資料處理。
  • 邊緣計算:Kubernetes 也用於邊緣計算應用程式,可用於管理在邊緣裝置(如物聯網裝置或網路裝置)上執行的容器化應用程式。