概述#

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