Kubernetes – 核心組件

透過 Minikube 官網的實踐教學,往往不足夠有基礎對於 Kubernetes 操作,還是需要把 K8s 的內功學好,把底打穩才有辦法操作後續的高難度應用。

Minikuber 基礎操作 連結1, 連結2

本文組件介紹 – 圖片參考來自 連結

Kubernetes – 核心組件介紹

了解 Kubernetes 的基本概念是學習和掌握其操作的第一步。

Node

  • 一個節點就是一個虛擬機 or 實體機
定義
  • Node 是 Kubernetes 集群中的 工作機器(物理機或虛擬機),負責運行 Pod 和容器。
  • 分為兩種類型:
    • Master Node:管理集群控制平面(如 API Server、Scheduler、Controller Manager)。
    • Worker Node:實際運行應用負載(Pod)。
核心組件

每個 Worker Node 包含以下關鍵組件:

組件功能
kubelet與 Master 通信,管理 Pod 的生命週期
kube-proxy處理節點上的網路規則(如 Service 流量轉發)
容器運行時(如 Docker、containerd)執行容器
Node 的職責
  • 提供計算資源(CPU、記憶體、儲存)供 Pod 使用。
  • 接收來自 Master 的調度指令,創建/刪除 Pod。
  • 報告自身狀態和資源使用情況給 Master。

Pod

  • 一個 Pod 就是一個or 多個應用程式的組合
  • 用來幫助創建一個 Container 的運行環境
  • 運行環境中可以共享資源如: 網路、資料運行配置等等
  • 建議: 一個 Pod 一個應用容器, 這樣更好管控應用程式的擴展與維護

Kubernetes 的工作原理

  • 如果要放在一起 建議是一些高耦合的功能
  • IP 是串建 Pod 自動分配的 ( 這個是私有IP, 內部的Node 的 IP, 在 Node 外部無法存取)
  • Pod 不是穩定的實體, 非常容易被創建予銷毀
    • 發生故障 K8s 會自動銷毀並重新創建
    • IP 這時候就會變化

Service

  • 將一組 Pod 封裝成一個服務
  • 用來解決 Pod 發生故障的問題
  • APP Pod 撈取 DB 從 SVC 的 IP 去撈, 再由 Service Pod 去找出健康的 Pod 進行資料的撈取
  • 解決 IP 地址不穩定問題
  • 服務分為內部服務與外部服務
  • 內部服務為不想暴露給外部的如: 資料庫
  • 外部服務反之如: 前端介面 、API 接口
  • Kubernetes 使得應用部署更加自動化,並提升了資源的利用效率。
  • Node:port

    • 在 node 上開放一個 port 號, 將這個 port 號 mapping 到 service 的 IP 與對應的 port 號

    Ingress

    • 基於路徑或主機的路由:將不同的URL路徑或網域名稱路由到不同的服務
    • TLS/SSL 附加:處理 HTTPS 加密通訊
    • 負載平衡:在多個Pod間流量分配
    • 基於名稱的虛擬主機:支援多個共享相同IP

    Config Map

    ConfigMap 是 Kubernetes 中用於儲存非機密配置資料的 API 對象,它允許您將配置資訊與容器鏡像分離,實現配置的靈活管理和動態更新。

    • 儲存鍵值對:儲存配置數據,可以是單一屬性或整個設定文件
    • 與 Pod 解耦:配置與應用程式容器分離
    • 多種使用方式:可作為環境變數、命令列參數或設定檔掛載
    • 非加密儲存:不適用於儲存敏感資訊(敏感資訊應使用 Secret)

    Secret

    Secret 是 Kubernetes 中用於儲存和管理敏感資訊的對象,它提供了一種比 ConfigMap 更安全的方式來處理密碼、OAuth 令牌、SSH 金鑰等機密資料。

    • 專為敏感資料設計:如密碼、令牌、金鑰等
    • 多種儲存類型:支援 Docker 註冊表憑證、TLS 憑證、通用金鑰等
    • 加密儲存(可選):支援靜態加密(etcd 中加密儲存)
    • 細粒度存取控制:透過 RBAC 限制存取權限

    Volumes

    Volumes(儲存磁碟區)是 Kubernetes 中用於持久化儲存和資料共享的核心概念,它解決了容器檔案系統臨時性的問題,允許資料在容器重新啟動、遷移時得以保留。 ( 存到 local , 備份用)

    Deployment

    Deployment 是 Kubernetes 中用於管理無狀態應用的核心工作負載對象,它提供了宣告式的更新機制,簡化了 Pod 和 ReplicaSet 的部署與管理流程。

    核心功能

    • Pod 部署管理:確保指定數量的 Pod 副本運行
    • 滾動更新:支援無停機部署新版本
    • 版本回滾:可快速回退至歷史版本
    • 自動修復:自動替換不健康的 Pod
    • 擴縮容:輕鬆調整 Pod 副本數量

    StatefulSet

    StatefulSet 是 Kubernetes 中用於管理有狀態應用的工作負載 API 對象,它為 Pod 提供持久化儲存和穩定的網路標識,適用於需要穩定持久化儲存、穩定網路標識和有序部署/擴展/刪除的應用。

    特性StatefulSetDeployment
    網路標識穩定的主機名稱和DNS名稱隨機Pod名稱
    儲存持久化Volume(每個Pod獨立)通常使用共享儲存或無持久化
    啟動順序有序(從0到N-1)無序
    刪除順序逆序(從N-1到0)無序
    更新策略支援滾動更新和分區更新支援滾動更新和藍綠部署
    典型應用場景資料庫、叢集應用無狀態網路應用