概述#
Kubernetes(K8s)是現代後端不可或缺的容器化平台。對於已經接觸過容器(Container)的開發者來說,Kubernetes 並沒有想像中那麼遙不可及,反而能在熟悉之後大幅減輕生產環境管理的負擔。
本章從基本定義出發,先建立對 Kubernetes 的整體印象,再循序了解它與容器化技術的關係,以及它在生產環境中扮演的角色。
Kubernetes 的定義#
Kubernetes 是一個可移植、可擴展的開源平台,用來管理容器化的工作負載與服務,並支援宣告式 API(Declarative API)的設定方式以實現自動化。它擁有龐大的生態系,相關的服務、支援與工具都相當豐富。
幾個關於命名與歷史的小知識:
- 名稱源自希臘文,意思是「舵手」或「飛行員」。
- 最初由 Google 工程師設計,於 2014 年首次對外公開。
- v1.0 於 2015 年 7 月釋出,同時 Google 與 Linux Foundation 合作成立 Cloud Native Computing Foundation(CNCF)。
- 縮寫「K8s」來自於「K」與「s」之間恰好有 8 個字母。
部署模式的演進#
從早期的單機到現今的容器叢集,部署方式大致歷經三個時代。
1. 傳統部署時代#
應用程式直接執行在實體伺服器上,缺乏資源邊界,因此常見作法是讓每個應用獨佔一台機器。這帶來兩個明顯問題:
- 硬體成本高昂、擴充不易。
- 當某台伺服器負載偏低時,多餘的資源無法分配給其他應用,造成浪費。
2. 虛擬化部署時代#
虛擬機(Virtual Machine, VM)讓單台實體伺服器能同時執行多個彼此隔離的虛擬環境,提升資源利用率與可伸縮性,也降低硬體成本。然而,每個 VM 都包含完整的作業系統,啟動成本高,仍然存在資源使用率不夠精細的問題。
3. 容器部署時代#
容器(Container)的隔離方式更輕量,多個容器共用宿主機作業系統核心,但各自擁有獨立的檔案系統、CPU、記憶體與行程空間。容器化帶來了幾項實際好處:
- 啟動快速、部署敏捷:透過映像檔(Image)的不可變特性,回滾與重新部署都相當簡單。
- 一致的環境:開發、測試、生產環境之間能保持一致。
- 鬆散耦合的微服務:將應用拆分成更小的單位,便於動態調度。
- 資源隔離:效能可預測。
- 高密度的資源利用。
Kubernetes 解決什麼問題#
當容器成為主流部署單位之後,新的挑戰隨之而來:誰來管理這些容器、確保它們持續可用?這正是 Kubernetes 切入的場景。它在容器之上再抽象一層,讓使用者能以設定檔描述系統的期望狀態,平台則自動完成:
- 水平擴展與自動恢復。
- 故障轉移(Failover)。
- 滾動更新與回滾。
- 服務探索與負載均衡。
- 監控與健康檢查。
換言之,Kubernetes 把過去需要在雲端 Console 一個個手動設定的操作,全部移到設定檔之中,是落實 Infrastructure as Code 的重要基石。
容器化解決的是「如何打包與執行」,Kubernetes 解決的是「如何在多台機器上長期且可靠地執行成千上萬個容器」。兩者並非取代關係,而是上下層的協作。
小結#
Kubernetes 並不是要取代 Docker,而是把容器技術帶到生產環境真正會遇到的問題場景上:規模、可用性、可觀測性與自動化。後續章節會從組件、安裝、到實作三兄弟(Pod、Service、Deployment),循序揭開它的運作方式。
原文出處#
- GitHub:https://github.com/MikeHsu0618/2022-ithelp/tree/main/Day2
- iThome:https://ithelp.ithome.com.tw/articles/10287154