We couldn't find a match for given <KEYWORD>, please try again.

什麼是 Kubernetes 架構?

Kubernetes 是一種架構,可提供鬆散耦合的機制,以便在叢集內進行服務探索。Kubernetes 叢集會包含一個或多個控制平台,以及一個或多個運算節點。整體而言,控制平台會負責管理整個叢集、公開應用程式介面 (API),並根據所需的設定排程運算節點的初始化和關機。每個運算節點都會執行一個容器執行階段 (例如 Docker),以搭配一個可與控制平台通訊的代理程式 (kubelet)。每個節點都可以是裸機伺服器,或為地端或雲端式虛擬機 (VM)。

vSphere with Tanzu 入門 - 適用於 vSphere 管理員的簡介

為何應選用 VMware 虛擬化技術來進行 Kubernetes 和容器應用

Kubernetes 架構包含哪些元件?

Kubernetes 叢集的主要元件包括:

節點:節點為代管容器化應用程式的虛擬機或實體伺服器。叢集中的每個節點都可執行一個或多個應用程式執行實例。雖然最少可包含一個節點,但一般的 Kubernetes 叢集往往涵蓋多個節點 (超過數百個節點的部署也相當常見)。

倉管中心:容器映像會保存在倉管中心內,並由控制平台傳輸至節點,以便在容器 Pod 中執行。

Pod:容器化應用程式會在 Pod 中執行。Pod 可包含一個或多個容器,對 Kubernetes 叢集中的應用程式而言,Pod 為最小部署單位。

什麼是 Kubernetes 控制平台架構?

Kubernetes 控制平台為 Kubernetes 叢集的控制平台,當中的元件會包括:

  • kube-apiserver:如同其名稱所示,這個 API 伺服器會公開做為通訊中心使用的 Kubernetes API。透過指令行介面 (CLI) 或其他使用者介面 (UI) 進行的外部通訊會傳遞至 kube-apiserver,而所有控制平台至節點的通訊,也會經由 API 伺服器傳遞。
  • etcd:這個索引鍵值用來儲存與叢集相關的所有資料。etcd 會保持高度可用且一致,原因在於,對 etcd 進行的所有存取,都會透過 API 伺服器進行。etcd 中的資訊通常會格式化為可人工判讀的 YAML (代表「YAML Ain’t Markup Language」遞迴)。
  • kube-scheduler:新的 Pod 建立完成後,這個元件會將其指派至節點,以依據資源需求、原則,以及「相似性」規格 (攸關地理區域以及對其他工作負載造成的干擾) 來執行。
  • kube-controller-manager:雖然 Kubernetes 叢集具有多項控制器功能,這些功能全都會編譯成名為「kube-controller-manager」的單一二進位檔。

這道流程會包含以下控制器功能:

  • 複寫控制器:確保在叢集中執行的每個複寫 Pod,皆存在著數量正確的 Pod
  • 節點控制器:監控每個節點的運作狀況,並在節點上線或沒有回應時,向叢集發出通知
  • 端點控制器:連接 Pod 和服務,以填入端點物件
  • 服務帳戶和權杖控制器:為叢集中的新命名空間配置 API 存取權杖和預設帳戶
  • cloud-controller-manager:如果叢集為部分雲端或全雲端式,雲端控制器管理工具就會將叢集連結至雲端供應商的 API。屆時,只會執行這些雲端供應商專屬的控制器。全地端式叢集上,將不會存在雲端控制器管理工具。叢集內可執行一個以上的雲端控制器管理工具,以做為容錯之用,或用來改善整體雲端效能。

雲端控制器管理工具會包含下列項目:

  • 節點控制器:判斷停止回應的雲端式節點狀態,例如是否已遭到刪除
  • 路由控制器:在雲端供應商基礎架構中建立路由
  • 服務控制器:管理雲端供應商的負載平衡器

什麼是 Kubernetes 節點架構?

節點為虛擬機或實體伺服器等機器,Kubernetes 會將要執行的 Pod 置放於其中。節點會包含下列元件:

kubelet:每個節點都具備名為「kubelet」的代理程式,可用來確保 PodSpecs 中描述的容器能適當運作。

kube-proxy:這是每個節點上的網路 Proxy,會負責維護網路節點,以使用作業系統 (OS) 封包篩選 (若有),進行 Pod 至網路工作階段的通訊,無論於叢集內部或外部。

容器執行階段:負責執行容器化應用程式的軟體。雖然 Docker 最廣為使用,但 Kubernetes 可支援任何符合 Kubernetes 容器執行階段介面 (CRI) 的執行階段。

Kubernetes 基礎架構還有其他哪些元件?

Pod:Pod 可封裝一個 (或多個) 應用程式容器,為 Kubernetes 應用程式中最基本的執行單位。每個 Pod 都包含執行所必備的程式碼和儲存資源,且具有專屬的 IP 位址。Pod 也含有設定選項。通常,Pod 會涵蓋單一容器,或是耦合為單一應用程式或業務功能,且共用一組資源和資料的數個容器。

部署:用來部署容器化應用程式 Pod 的方法。部署中描述的目標狀態,將導致控制器變更叢集的實際狀態,進而循序漸進地達到該目標狀態。深入瞭解 Kubernetes 部署。

ReplicaSet:確保在任何指定的時間點,會執行指定數量的相同 Pod。

叢集 DNS:提供必要的網域名稱系統 (DNS) 記錄,以操作 Kubernetes 服務。

容器資源監控:在中央資料庫內擷取和記錄容器指標。

Kubernetes 架構的最佳實踐方式和設計原則為何?

根據 Gartner 公司《容器最佳實踐方式》(Container Best Practices) 的建議,平台策略應將安全性、治理、監控、儲存、網路、容器生命週期管理和 Kubernetes 等協調作業納入考量。

下方提供了幾項架構 Kubernetes 叢集的最佳實踐方式:

  • 請確認您已更新至最新的版本 Kubernetes (撰寫本文當下為 1.18 版)。
  • 為開發人員和營運團隊規劃前期教育訓練
  • 請建立涵蓋企業整體的治理。確保工具和廠商能配合並整合 Kubernetes 協調作業。
  • 請在 CI/CD 流程中整合映像掃描流程來強化安全性,藉此在建置和執行階段進行掃描。凡是從 Github 存放庫提取的開放原始碼,應一律是為可疑內容。
  • 請在叢集中採用角色型存取控制 (RBAC),並落實最小權限和零信任模式等標準。
  • 請透過僅使用非超級使用者以及將檔案系統設為唯讀等方式,進一步保護容器。
  • 請避免使用預設值,因為簡單的宣告不僅較不容易發生錯誤,也可更明確地展現意圖。
  • 請謹慎運用基本 Docker Hub 映像,因為當中可能包含惡意軟體,或充斥非必要的程式碼。請以精簡且簡潔的程式碼做為基礎,以著手建置套件。小型映像不僅可快速建置、佔用較少的磁碟空間,還能加快映像提取速度。
  • 請讓容器保持簡單。在每個容器中包含一道流程,有助於協調作業回報該流程是否運作狀況良好。
  • 請在發生問題時直接當機。Kubernetes 將重新啟動故障的容器,因此無需在故障時重新啟動。
  • 請盡可能詳細說明。採用描述性質的標籤,不僅能為目前的開發人員提供協助,還可讓開發人員追蹤自身的軌跡。
  • 請避免透過微服務來過度講求精密度。邏輯程式碼中的每項功能,不一定需要採用專屬的微服務形式。
  • 請在情況允許時進行自動化。只要將 CI/CD Pipeline 自動化,就可避免手動進行 Kubernetes 部署。
  • 請使用 livenessProbe 和 readinessProbe 來協助管理 Pod 生命週期,否則,Pod 可能會在初始化期間遭到終止,或在準備就緒前,開始接收使用者請求。

Kubernetes 架構不僅直截了當,也相當直覺化。控制平台與節點之間的鬆散耦合,可創造近乎無限的彈性,並讓應用程式以近乎即時的方式水平擴充,以滿足瞬息萬變的需求、將使用者移轉至新的組建,並支援從地端移轉至雲端式節點,或在多個雲端之間移轉,從而善加利用每個雲端供應商的首選功能。

相關解決方案與產品

運用 Kubernetes 推動應用程式現代化改造

協助您同時執行傳統和現代化應用程式。

VMware Tanzu Kubernetes Grid

簡化跨多雲環境的基礎架構作業。

Horizon Cloud on Microsoft Azure

雲原生虛擬桌面平台