Kubernetes 是一個開源容器編排平台,最初由 Google 進行開發。它提供了一個框架,用於自動化容器化應用程式的部署、擴充和管理。Kubernetes 可讓使用者跨機器叢集管理和協調容器,為執行分散式應用程式提供了高度可擴充且具彈性復原力的基礎架構。
它由 Google 工程師開發供內部使用,並於 2014 年作為開源系統對外提供。從那時起,它獲得了廣泛的採用,並成為了雲端原生生態系統的重要組成部分。Kubernetes 與容器兩者普遍被認為是當代雲端應用程式和基礎架構的基本構建塊。
Kubernetes 可在多種基礎架構上執行,包括混合雲端環境、公用雲端、私人雲端、虛擬機和裸機伺服器,為 IT 團隊提供了極佳的靈活性。
Kubernetes 如何運作?
Kubernetes 架構由幾個主要元件組成,包括:
叢集和節點
作為 Kubernetes 的構建塊,叢集由稱為節點的實體或虛擬運算機器所組成。單一主節點會作為叢集的控制面板來運作,例如,它會管理在任何特定時間執行哪些應用程式,以及使用哪些容器映像檔。它會透過執行排程器服務來實現這一點,該服務會根據開發人員定義的需求和其他因素來自動執行容器部署。
多個工作節點負責執行、部署和管理工作負載和容器化應用程式。工作節點包括組織所選擇的容器管理工具,例如 Docker,以及 Kubelet,這是一種軟體代理程式,可從主節點接收命令並執行它們。
叢集可以包含跨越組織整個架構的節點,從本地端到公用雲端和私人雲端,以及混合雲端環境。這就是 Kubernetes 之所以能成為雲端原生架構中不可或缺元件的原因之一。該系統非常適合託管需要快速擴充的雲端原生應用程式。
容器
容器是一種輕量級且可攜式的軟體封裝技術,用於在不同的運算環境中一致地部署和執行應用程式。容器是一個獨立的可執行單元,它封裝了應用程式及其所有相依性,包括程式庫、框架和執行環境。
容器提供一種將應用程式與底層基礎架構隔離的方法,確保不論主機系統為何,它們都能一致地執行。這種隔離透過像 Docker 這樣的容器化技術實現,該技術使用作業系統級虛擬化來建立稱為容器的隔離環境。
Pod
Pod 是 Kubernetes 中最小的可擴充性單元。它們是共用相同網路和運算資源的容器群組。將容器分組在一起是有好處的,因為如果特定容器接收過多的流量,Kubernetes 會自動在叢集中的其他節點上建立該 Pod 的複本,以分散工作負載。
這一切如何協同運作
Kubernetes 平台會在系統的 OS(通常是 Linux)之上運行,並與在節點上運作的 Pod 進行通訊。使用名為 kubectl 的命令行介面,管理員或 DevOps 使用者可輸入所需的叢集狀態,其中可包含應執行哪些應用程式、使用哪些映像和資源,以及其他詳細資訊。
叢集的主節點會接收這些命令,並將它們傳送到工作節點。此平台能夠自動確定叢集中的哪個節點是執行命令的最佳選擇。然後,平台會在節點中分配資源和特定的 Pod,以完成所請求的作業。
Kubernetes 並不會改變管理容器的基本流程,它只是將它們自動化並接管了部分工作,這樣管理員和 DevOps 團隊就可以實現高層次的控管,而無需單獨管理每個節點或容器。人工團隊只需配置 Kubernetes 系統,並定義其中的元素即可。Kubernetes 承擔了所有實際的容器編排工作。
Kubernetes 的特性和功能
Kubernetes 擁有一系列良好的特性和功能,可以簡化跨多個節點的容器編排,實現叢集管理的自動化,並最佳化資源利用率。這些特性和功能包括:
- 自動擴充 – 根據使用情況按需擴充或縮減容器及其資源
- 生命週期管理 – 讓管理員能暫停和繼續部署,以及還原到以前的版本
- 期望狀態宣告 – 管理員定義他們需要的東西,Kubernetes 讓其成為現實
- 自我修復和彈性復原力 – 包括自動重新啟動、放置、複寫和擴充
- 可擴充的儲存 – 管理員可根據需要動態新增儲存
- 負載平衡 – 該系統會使用多種工具來平衡內部和外部的負載
- 支援 DevSecOps – 幫助簡化整個容器生命週期和雲端中的容器作業安全,並使團隊能更快地將安全應用程式推向市場
Kubernetes 有哪些用途?
Kubernetes 幫助組織更好地管理他們最複雜的應用程式,並充分利用現有資源。它還有助於確保應用程式的可用性,並大幅減少停機時間。透過容器編排,平台可自動執行許多任務,包括應用程式部署、推出、服務發現、儲存佈建、負載平衡、自動擴充和自行復原。這會減輕 IT 或 DevOps 團隊背負的大量管理負擔。
讓我們舉個例子:假設有個容器發生了故障。為了將停機時間降至最低(或完全消除),Kubernetes 可以檢測容器故障,並透過再啟動、替換和/或刪除失效的容器來自動執行切換。此系統還會監視所有叢集,並根據資源的使用位置和方式,來決定執行容器的最佳位置。所有這些工作都是在幾毫秒內自動完成——沒有任何的人類團隊可以相匹敵。
什麼是 Kubernetes 即服務?
Kubernetes 即服務(KaaS)是一種基於雲端的產品,可為使用者提供受管理的 Kubernetes 叢集。它讓組織能夠利用 Kubernetes 的強大功能,而無需對底層基礎架構進行大量的設定和維護作業。藉由 KAAS,使用者可以更專注於部署和管理他們的應用程式,而不是處理 Kubernetes 叢集管理的複雜性。
KaaS 供應商會處理叢集佈建、擴充、升級和監控等任務,從而減輕使用者的營運負擔。他們提供易於操作的介面或 API,來與 Kubernetes 叢集進行交互,並且通常會提供額外的功能,例如負載平衡、自動擴充,以及整合式記錄和監視。
透過提供 Kubernetes 即服務,雲端供應商和託管服務供應商可讓開發人員和組織快速、輕鬆地大規模部署和管理容器化應用程式,充分利用 Kubernetes 的優勢,而無需廣泛的 Kubernetes 專業知識或基礎架構管理技能。
什麼是 Docker?
和 Kubernetes 一樣,Docker 也是一種開源解決方案,可讓使用者自動化應用程式部署。與 Kubernetes 不同的是,它還是一種容器檔案格式,並且已成為 Linux 容器事實上的檔案格式。使用 Docker 引擎,你可以在開發環境中建置和執行容器。容器儲存庫(如 Docker Hub)讓你可以共享和儲存容器映像檔。Docker 解決方案套件非常適合幫助你部署和執行單個容器。
Kubernetes 和 Docker 兩者差異
Kubernetes 和 Docker 是兩種截然不同但可互補的技術,通常在基於容器的現代應用程式部署中一起使用。以下是 Kubernetes 和 Docker 之間的差異:
Docker:
Docker 是用於建構和執行容器的平台和工具集。它提供了將應用程式及其相依性封裝到輕量級獨立容器的能力。
藉由 Docker,開發人員可以建立容器映像檔,其中包含了執行應用程式所需的一切,例如程式碼、程式庫和執行環境。
Docker 能夠在不同環境中實現一致的應用程式部署,確保了不論使用何種主機系統,都能可靠地執行應用程式。
Docker 提供了一個易於使用的命令行介面(CLI),以及強大的工具和服務生態系統來管理容器。
Kubernetes:
Kubernetes 通常被稱為 K8s,是一個開源容器編排平台,可自動化容器化應用程式的部署、擴充和管理。
Kubernetes 提供了一個用於跨機器叢集執行和協調容器的框架。
它提供了自動擴充、負載平衡、服務發現和自行復原功能等特性。
Kubernetes 允許宣告式設定和擴充,讓你更輕鬆地管理複雜的應用程式部署。
它透過確保應用程式始終正常運作且可用(即使在發生故障時),來提供高水準的容錯能力和彈性復原力。
總的來說,Docker 主要專注於建構和封裝容器,而 Kubernetes 則專注於大規模調度和管理容器。Docker 提供了建立和執行容器的工具,而 Kubernetes 則提供了在分散式環境中部署和管理容器化應用程式的基礎架構。通常使用 Docker 來建置容器映像,然後使用 Kubernetes 在機器叢集中管理和編排這些容器。
Kubernetes 的優點
Kubernetes 提供了廣泛的好處,尤其是對那些專注於雲端原生應用程式的組織。以下優點只是 Kubernetes 成為當今最受歡迎的容器管理系統的部分原因:
- 將工作負載遷移到運作最佳的地方 — 平台能夠在本地端和雲端運行,讓遷移變得簡單自如。
- 簡化監視、管理、部署和設定任何大小或規模的容器化應用程式。
- 透過 Kubernetes 的高可延展性,輕鬆將其整合到現有架構中。
- 透過 Kubernetes 內建的資源最佳化功能、在任何地方執行工作負載的能力,以及根據需要自動擴充的能力,來控制 IT支出。
- 為 IT 和 DevOps 團隊騰出時間,來專注於更重要的任務,而不是管理和編排容器化應用程式。
- 最佳化硬體資源使用,包括網路頻寬、記憶體和儲存 I/O,並能夠定義使用限制。
- 透過 Kubernetes 的自行復原功能,提高應用程式效率和正常運行時間。
- 排定軟體更新,且無需停機。
- Kubernetes 可運行在分離式架構上,並處理快速且大規模的增長,讓你的基礎架構能輕鬆面對未來挑戰。
Kubernetes 安全性最佳實務
安全性是當今每個組織的首要考量,無論他們在何處執行工作負載和應用程式。以下是一些推薦的最佳實務,用於保護 Kubernetes 系統和其中的應用程式與資料:
安全的叢集存取 - 透過使用像 RBAC(角色型的存取控制)這樣強大的身分驗證和授權機制,來限制對 Kubernetes API 的存取。此外,不僅使用強大且獨特的密碼,或實施更安全的身分驗證方法(例如基於憑證的驗證),還有啟用稽核,並監測任何未經授權或可疑活動的 API 存取。
定期更新 Kubernetes 元件 - 讓 Kubernetes 元件(控制面板、工作節點、etcd)與最新的穩定版本保持同步,以便受益於安全修補程式和錯誤修正。
套用網路政策 - 實施網路政策來控制叢集內的流量,並限制 Pod 之間的通訊。使用網路政策來實施安全的通訊通道,並限制對敏感服務或資料的存取。
安全的容器映像 - 僅使用來自可靠來源的可信賴容器映像檔。定期掃描容器映像以查找漏洞,並確保它們得到修補和更新。使用映像簽章和驗證來確保映像完整性。
使用 RBAC 和最少特權 - 實施角色型的存取控制(RBAC),為使用者和服務分配適當的權限和角色。遵循最少特權原則,僅授予每個使用者或服務所需的必要權限。
啟用 Pod 安全政策 - 利用 Pod 安全政策(PSP)對 Pod 的建立實施安全限制,例如防止對特權容器和主機的存取。
監視和記錄活動 - 啟用 Kubernetes 叢集的記錄和監視功能,以便及時偵測並回應安全事件。監視 API 伺服器日誌、容器日誌和叢集級事件,以識別任何的可疑活動或未經授權的存取嘗試。
安全的 etcd 資料儲存 - 透過啟用靜態和傳輸中的加密功能來保護 etcd 資料儲存。限制對 etcd 的存取,確保只有經授權的實體才能存取和修改叢集的組態資料。
定期備份和測試災難復原 - 為關鍵的 Kubernetes 元件、組態和資料建立定期備份,以便在發生任何問題或攻擊時進行災難復原。定期測試災難復原流程,以確保其運作效力。
隨時掌握最新資訊並遵循最佳實務 - 隨時瞭解 Kubernetes 社群和安全專家提供的最新安全性最佳實務和建議。
Kubernetes 使用案例
如今,組織正在將 Kubernetes 用於極其廣泛的用例。這些特性和功能包括:
- 大規模的應用程式部署
- 微服務管理
- 持續整合/持續部署(CI/CD)軟體的開發
- 實現無伺服器運算
- 混合和多雲端部署
- 大數據分析
- 大型或複雜的計算專案
- 機器學習專案
- 將資料從本地端伺服器遷移到雲端
Kubernetes 如何與應用程式部署共同運作?
Kubernetes 透過為部署、管理和擴充容器化應用程式提供一個可擴充且具彈性的平台,在應用程式開發中發揮著重要作用。以下就 Kubernetes 如何與應用程式開發共同運作加以說明:
容器化 - 開發人員使用 Docker 等技術,將其應用程式和相依性封裝到容器映像中。容器可確保應用程式一致地在不同環境中執行,而且可以輕鬆進行部署。
宣告式設定 - 開發人員使用 Kubernetes 設定檔(通常以 YAML 或 JSON 格式撰寫)來定義他們的應用程式及其元件的所需狀態。這些設定檔會指定應該如何部署應用程式,包括複本數目、網路需求和資源限制等。
部署 - 開發人員使用 Kubernetes 來部署他們的容器化應用程式。他們會在 Kubernetes 中建立部署物件,並指定所需複本和容器映像的數量。Kubernetes 負責將容器調度到叢集中的可用節點上。
擴充和負載平衡 - Kubernetes 提供了用於擴充應用程式的內建機制。開發人員可以根據 CPU 利用率或其他指標定義自動擴充政策,以自動擴充或縮減應用程式規模。Kubernetes 還會處理負載平衡,將傳入流量分配到應用程式的複本之間,以確保高可用性和最佳的資源利用率。
服務發現和網路連結 - Kubernetes 提供了一種服務提取功能,可讓應用程式在叢集中發現彼此並進行通訊。開發人員會定義為其應用程式公開端點的服務,Kubernetes 會自動為每個服務指定唯一的 DNS 名稱和 IP 位址。這實現了應用程式不同部分之間的無縫通訊。
滾動更新和還原 - Kubernetes 支援滾動更新,可讓開發人員在不停機的情況下更新應用程式。他們可以指定一個新的容器映像版本,Kubernetes 會逐漸用新容器替換現有容器,以確保平穩過渡。如果發生問題或錯誤,Kubernetes 支援還原至先前的工作版本。
可觀察性和監視 - Kubernetes 提供了監視和可觀察性的功能。開發人員可以將其應用程式與記錄和監視系統整合起來,Kubernetes 會提供有關應用程式及其元件的指標、日誌和事件。這使開發人員能夠深入瞭解應用程式的效能、排除問題,以及最佳化資源利用率。
Kubernetes 透過提供一個用於管理容器化應用程式的生命週期、可擴充性和網路方面的平台,從而簡化了應用程式開發。它使開發人員能夠專注於撰寫程式碼並定義應用程式的所需狀態,同時 Kubernetes 負責部署、擴充和維護高可用性。
使用 Nutanix 來管理 Kubernetes
Kubernetes 提供了多種優勢,從簡化和自動化容器編排和管理,到活躍的開源社群和靈活的可擴充性。它在雲端原生策略中扮演著至關重要的角色,並能適應混合雲端和多雲端運算模型,對於尋求加速開發、輕鬆部署應用程式以及最佳化應用程式和服務營運的組織而言,它已成為這些組織的一種策略選擇。
藉助 Nutanix Kubernetes Engine(NKE),Nutanix 進一步幫助簡化了 Kubernetes 的維運和管理。透過 NKE,你能夠:
部署和配置生產就緒型 Kubernetes 叢集只需幾分鐘,無需耗費幾天或幾週的時間
輕鬆整合 K8s 儲存、監控、日誌記錄和警示,以獲得完整的雲端原生堆疊
透過開放 API 提供原生 Kubernetes 使用者體驗