節點映像檔


本頁面說明適用於 Google Kubernetes Engine (GKE) 節點的節點映像檔。

GKE Autopilot 節點一律會使用 Container-Optimized OS (含 containerd) (cos_containerd),這是建議使用的節點作業系統。如果您使用 GKE Standard,可以在建立叢集或節點集區時,選擇要在每個節點上執行的作業系統映像檔。您也可以升級現有的標準叢集,以使用不同的節點映像檔。如需設定節點映像檔的操作說明,請參閱指定節點映像檔

可用的節點映像檔

GKE 為叢集提供下列節點映像檔選項 (依作業系統區分):

作業系統 節點映像檔
Container-Optimized OS
Ubuntu
Windows Server

Container-Optimized OS

Google 的 Container-Optimized OS 節點映像檔以最新版本的 Linux 核心為基礎,並經過最佳化處理來提高節點安全性。Container-Optimized OS 映像檔由 Google 團隊支援,可快速修補映像檔以確保安全性,相關功能日後也會不斷更新。Container-Optimized OS 映像檔提供的支援、安全性和穩定性都優於其他映像檔。

如要瞭解映像檔專案和系列,請參閱節點映像檔來源專案

Container-Optimized OS 變種版本

Container-Optimized OS 提供兩種容器執行階段。除了容器執行階段的選擇外,這些映像檔都相同。

  • Container-Optimized OS with containerd (cos_containerd)cos_containerd 映像檔使用 containerd 做為直接與 Kubernetes 整合的容器執行階段。GKE Autopilot 叢集一律會使用這個映像檔。詳情請參閱「Containerd 節點映像檔」。
  • 含有 Docker 的 Container-Optimized OS (cos)cos 映像檔使用 Docker 容器執行階段。

Ubuntu

Ubuntu 節點映像檔已經過驗證,符合 GKE 節點映像檔的條件。如果節點需要 XFS、CephFS 或 Debian 套件的支援,請使用 Ubuntu 節點映像檔。

如要瞭解映像檔專案和系列,請參閱「作業系統支援的功能」。

Ubuntu 衍生版本

Ubuntu 提供兩種容器執行階段。除了容器執行階段的選擇外,這些映像檔完全相同。

  • 擁有 Containerd 的 Ubuntu (ubuntu_containerd)ubuntu_containerd 映像檔會將 Containerd 做為容器執行階段。詳情請參閱「Containerd 節點映像檔」。

  • 含有 Docker 的 Ubuntu (ubuntu)ubuntu 映像檔會使用 Docker 做為容器執行階段。

Windows Server

使用 Windows Server 節點集區建立叢集時,您可以選擇 Windows Server 半年通道 (SAC) 或 Windows Server 長期維護通道 (LTSC) 節點映像檔。所有 Windows 節點映像檔都是 Windows Server Datacenter Core 映像檔。單一叢集可以有多個使用不同 Windows Server 版本的 Windows Server 節點集區,但每個節點集區只能使用一個 Windows Server 版本。詳情請參閱「選擇 Windows 節點映像檔」。

Windows Server LTSC 和 SAC 節點映像檔提供兩種容器執行階段:Docker 和 containerd。除了容器執行階段的選擇外,映像檔都相同。

  • Containerd 執行階段映像檔 (適用於 GKE 1.21 以上版本):

    • 採用 Containerd 的 Windows Server LTSC (windows_ltsc_containerd)windows_ltsc_containerd 映像檔使用 Containerd 做為容器執行階段。目前,這個映像檔類型會對應至兩個節點映像檔:Windows Server 2022 和 Windows Server 2019。您可以使用 CLI 指令搭配 windows-os-version 標記,建立 Windows LTSC2022 節點集區。

      如要進一步瞭解如何建立 Windows Server 2022 節點集區,請參閱「建立 Windows 節點集區

      如要進一步瞭解 containerd 節點映像檔,請參閱「Containerd 節點映像檔」。

    • 採用 containerd 的 Windows Server SAC (windows_sac_containerd)windows_sac_containerd 映像檔使用 containerd 做為容器執行階段。

      詳情請參閱「Containerd 節點映像檔」。

  • Docker 執行階段映像檔 (適用於 GKE 1.16 以上版本):

    • 搭載 Docker 的 Windows Server LTSC (windows_ltsc)windows_ltsc 映像檔使用 Docker 做為容器執行階段。
    • 採用 Docker 的 Windows Server SAC (windows_sac)windows_sac 映像檔使用 Docker 做為容器執行階段。

如要瞭解映像檔專案和系列,請參閱「作業系統支援的功能」。

Linux 節點映像檔比較

下列各節會比較 Container-Optimized OS 和 Ubuntu 節點映像檔的作業部分,包括:

  • 軟體套件管理
  • 系統初始化
  • 記錄收集
  • 檔案系統版面配置
  • 儲存空間驅動程式支援

軟體套件管理員

coscos_containerd 節點映像檔使用內建 Docker (Containerd) 容器執行階段支援的最小根檔案系統,而該檔案系統也可做為在主機上安裝軟體的軟體套件管理工具。Ubuntu 映像檔使用 APT 套件管理工具

管理 Container-Optimized OS 上的軟體

Container-Optimized OS 映像檔並不提供套件管理軟體,例如 apt-get。您無法利用傳統的機制在節點上任意安裝軟體,而是要建立包含所需軟體的容器映像檔。

在 Standard 叢集上,Container-Optimized OS 包含僅供偵錯用途的 CoreOS 工具箱,讓您能安裝及執行常見的偵錯工具,例如 pingpsmiscpstree。如要進一步瞭解如何為 Container-Optimized OS 節點偵錯,請參閱 Container-Optimized OS 使用指南

管理 Ubuntu 上的軟體

Ubuntu 映像檔使用 APT 套件管理工具。您可以使用 apt-get 指令,在這些映像檔上安裝套件。舉例來說,如要安裝 ceph 套件:

sudo apt-get update
sudo apt-get install ceph

系統初始化

在系統初始化的過程中,Container-Optimized OS 和 Ubuntu 節點映像檔都使用 systemd 管理系統資源及服務。

這兩種節點映像檔都使用 systemd 服務檔案來定義節點上的 services,以及使用 systemd.targets 來藉由依附元件為啟動目標分組。

記錄收集

Container-Optimized OS 和 Ubuntu 節點映像檔都使用 systemd-journald 收集整個系統的記錄檔。

檢視 Container-Optimized OS 及 Ubuntu 上的記錄檔

如要檢視採用 Container-Optimized OS 或 Ubuntu 節點映像檔的節點上的記錄檔,您必須使用 journalctl 指令。舉例來說,如要查看 containerd Daemon 記錄檔:

sudo journalctl -u containerd

如要查看 kubelet 記錄:

sudo journalctl -u kubelet

檔案系統版面配置

Ubuntu 節點映像檔使用標準 Linux 檔案系統版面配置。

Container-Optimized OS 節點映像檔檔案系統版面配置經過最佳化,以強化節點安全性。開機磁碟空間分成三種分區類型:

  • 根分區,以唯獨模式掛接
  • 有狀態分區,可寫入且為有狀態
  • 無狀態分區,可寫入但內容在重新開機後即會遺失

使用 Container-Optimized OS 時,如果您執行的自用服務對於容器外部的檔案系統版面配置有特定要求,則請留意分區類型。

使用 Container-Optimized OS 檔案系統

以下是 Container-Optimized OS 節點映像檔檔案系統中的路徑清單,以及其屬性和建議用法:

路徑 屬性 用途
/
  • 唯讀
  • 可執行
根檔案系統會以唯讀模式掛接,以維護完整性。核心會在啟動期間驗證根檔案系統的完整性,並在發現錯誤時拒絕啟動。
/home
/var
  • 可寫入
  • 不可執行
  • 有狀態
這些路徑是用來儲存會在開機磁碟的生命週期內持續存在的資料。這些路徑均掛接自 /mnt/stateful_partition
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • 可寫入
  • 可執行
  • 有狀態
這些路徑分別是 Compute Engine 套件 (例如帳戶管理工具服務)、Docker 及工具箱的工作目錄。
/var/lib/cloud
  • 可寫入
  • 可執行
  • 無狀態
  • tmpfs
這個路徑是 cloud-init 套件的工作目錄。
/etc
  • 可寫入
  • 可執行
  • 無狀態
  • tmpfs
通常會保存您的設定 (例如透過 cloud-init 定義的 systemd 服務)。我們建議您將想要的執行個體狀態擷取到 cloud-init 中,因為執行個體在剛建立及剛重新啟動時會套用 cloud-init
/tmp
  • 可寫入
  • 不可執行
  • 無狀態
  • tmpfs
通常是做為臨時儲存空間,因此請勿用來存放永久性的資料。
/mnt/disks
  • 可寫入
  • 可執行
  • 無狀態
  • tmpfs
您可以在 /mnt/disks 底下的目錄中掛接永久磁碟。

儲存空間驅動程式支援

每個節點映像檔支援的儲存空間外掛程式種類都有所不同。下列詞彙可用來說明節點映像檔對特定儲存空間驅動程式的支援狀態:

  • 是 - 全面測試/支援:這個儲存空間外掛程式受到完整支援,且系統已使用指定節點映像檔進行全面測試。
  • 是 - 有限測試:這個儲存空間外掛程式可與指定節點映像檔搭配使用,但並未經過全面測試,且可能會發生意外行為。在 Container-Optimized OS 中,系統最終會為這些外掛程式進行全面測試並提供完整支援。
  • 不支援:這個儲存空間外掛程式未經過測試,也未曾與指定的節點映像檔搭配使用,且 GKE 無法提供任何功能保證。目前沒有任何有關這個儲存空間外掛程式的測試計劃。
  • :由於節點 OS 或 Google Cloud的固有限制,這個儲存空間外掛程式無法與指定的節點映像檔搭配使用。

下列矩陣說明每個 GKE 節點映像檔如何支援一些常用的儲存空間外掛程式。

磁碟區類型 是否可在 Container-Optimized OS (cos) 中運作? 是否可在 Ubuntu 中運作?
Compute Engine
永久磁碟 (EXT4 或 XFS)
是 - 全面測試/支援
(僅支援 cos-85 以上版本)。請參閱 GKE 版本資訊
是 - 全面測試/支援
NFSv3 是 - 全面測試/支援 是 - 全面測試/支援
NFSv4 是 - 全面測試/支援 是 - 全面測試/支援
CephFS 是 - 有限測試
(根據預設,系統不會安裝驅動程式,因此您必須安裝 ceph 用戶端,我們建議您透過 DaemonSet 來進行)。
Cinder
光纖通道
Flocker 不支援 不支援
iSCSI
RBD

修改節點 VM

重新建立節點後,對該節點 VM 開機磁碟所做的修改便會失效。系統會在手動升級自動升級自動修復自動調整資源配置的期間重新建立節點。此外,系統也會在您啟用需要重新建立節點的功能時重新建立節點,這些功能包括 GKE Sandbox節點內瀏覽權限,以及受防護的節點等等。

如要讓節點在重新建立之後沿用您之前所做的修改,請使用 DaemonSet

我們不建議您管理節點映像檔所提供的重要軟體,例如核心或容器執行階段 (無論是 containerd 還是 docker)。節點映像檔都已通過廣泛的測試,而修改節點映像檔所提供的重要軟體將會讓節點處於未知且不穩定的狀態。GKE Autopilot 節點不允許修改節點軟體。

將 Container-Optimized OS 節點映像檔版本對應至 GKE 修補程式版本

GKE 會發布 JSON 對應,將 GKE 修補程式版本對應至 Container-Optimized OS 節點映像檔版本:

您可以透過這項對應升級至特定 GKE 版本,取得特定映像檔版本。舉例來說,如果叢集需要某個映像檔版本提供的特定功能或修正,您可以找出對應項目,然後將叢集升級至特定 GKE 版本,取得含有變更的 Container-Optimized OS 映像檔版本。如要瞭解 Container-Optimized OS 映像檔版本,請參閱 Container-Optimized OS 版本資訊

這份清單大約每週更新一次。如要查看資訊的新鮮度,請參閱 JSON 檔案中的 creation_time 欄位。

節點映像檔版本資訊

Container-Optimized OS

Google 提供內容詳盡的 Container-Optimized OS 說明文件:

Ubuntu

Google 會定期更新適用於叢集節點的 Ubuntu 映像檔。請參閱版本資訊以取得這些更新的相關資訊,包括列出預設安裝套件的資訊清單連結。

已知問題

使用 Container-Optimized OS 和 Docker 執行階段的 GKE 節點隨機重設連線

如果 GKE 節點使用 Container-Optimized OS with Docker (cos),當同一節點上的兩個 Pod 使用 Kubernetes ClusterIP 服務通訊時,可能會隨機發生 TCP 連線重設。

下列 GKE 版本會受到影響:

  • 1.20.5-gke.100 以上版本

如要解決這個問題,請採取下列任一做法:

節點映像檔來源專案

GKE 叢集的可用節點映像檔位於下列來源專案中:

  • Container-Optimized OS 映像檔:gke-node-images
  • Ubuntu 映像檔:ubuntu-os-gke-cloud
  • Windows Server 映像檔:gke-windows-node-images

除了上述來源專案,GKE 也會使用下列來源專案,供 GKE 團隊專屬使用

  • ubuntu-os-gke-cloud-private (保留供 GKE 團隊專用)
  • ubuntu-os-gke-cloud-devel (保留供 GKE 團隊專用)

設定高安全性叢集時,您可能需要知道來源專案名稱。列出的來源專案可能會變更。

後續步驟