自訂節點系統設定

本文將說明如何使用稱為「節點系統設定」的設定檔,自訂 Google Kubernetes Engine (GKE) 節點設定。

節點系統設定是設定檔,可調整一組有限的系統設定。在節點集區中,您可以使用節點系統設定,為 kubelet Kubernetes 節點代理程式和 sysctl 低階 Linux 核心設定指定自訂設定。

本文詳細說明節點系統設定的可用設定,以及如何將這些設定套用至 GKE Standard 節點集區。請注意,由於 GKE Autopilot 叢集的節點環境代管程度較高,因此與 GKE Standard 節點集區相比,直接節點系統設定選項有限。

使用節點系統設定的好處

節點系統設定有下列好處:

  • 效能調整:針對 AI 訓練/服務、資料庫、高流量網站伺服器或延遲時間敏感型服務等高負載應用程式,最佳化網路堆疊效能、記憶體管理、CPU 排程或 I/O 行為。
  • 安全性強化:套用特定核心層級安全設定或限制特定系統行為,以縮減攻擊面。
  • 資源管理:微調 kubelet 管理 PID、磁碟空間、映像檔垃圾回收,或 CPU 和記憶體資源的方式。
  • 工作負載相容性:確保節點環境符合特定先決條件,適用於需要特定核心設定的專業軟體或舊版應用程式。

自訂節點設定的其他選項

您也可以使用其他方法自訂節點設定:

  • 執行階段設定檔:如要在 GKE 節點上自訂 containerd 容器執行階段,可以使用名為「執行階段設定檔」的不同檔案。詳情請參閱「在 GKE 節點中自訂 containerd 設定」。
  • ComputeClass:您可以在 GKE ComputeClass 規格中指定節點屬性。在 GKE 1.32.1-gke.1729000 以上版本中,您可以在 GKE Autopilot 模式和標準模式下使用 ComputeClasses。詳情請參閱「自訂節點系統設定」。
  • DaemonSets:您也可以使用 DaemonSet 自訂節點。詳情請參閱「使用 DaemonSet 自動啟動 GKE 節點」。

Windows Server 節點不支援節點系統設定。

事前準備

開始前,請務必完成下列操作:

  • 安裝指令列工具:
    • 如果您使用本文中的 gcloud CLI 範例,請務必安裝及設定 Google Cloud CLI。
    • 如果您使用 Terraform 範例,請務必安裝及設定 Terraform。
  • 授予權限:您需要適當的 IAM 權限,才能建立及更新 GKE 叢集和節點集區,例如 container.clusterAdmin 或具有同等權限的其他角色。
  • 規劃潛在的工作負載中斷:自訂節點設定會在節點集區層級套用。變更通常會觸發集區中節點的滾動式更新,包括重新建立節點。規劃工作負載可能發生的中斷情形,並視情況使用 Pod 中斷預算 (PDB)。
  • 備份並測試所有變更:請務必先在預先發布或開發環境中測試設定變更,再套用至正式環境。設定錯誤可能會導致節點不穩定或工作負載失敗。
  • 查看 GKE 預設設定:GKE 節點映像檔已預先設定最佳化設定。請只在有明確需求時自訂參數,並瞭解變更帶來的影響。

新增節點系統設定

您可以透過 ComputeClass 或設定檔,自訂節點系統設定。

使用 ComputeClass 設定節點系統

您可以使用自訂 ComputeClass,自訂 kubelet 和 Linux 核心中的特定參數。這個方法適用於 GKE 1.32.1-gke.1729000 以上版本。

如要使用 ComputeClass 自訂節點系統設定,請按照下列步驟操作:

  1. 建立包含 spec.nodePoolAutoCreation.enabled: true 欄位值配對的 ComputeClass,並在 priorityDefaults 欄位中指定系統設定。
  2. 部署選取 ComputeClass 的工作負載。

建立 ComputeClass

以 YAML 格式編寫 ComputeClass 設定。在 priorityDefaults 規格中使用 nodeSystemConfig 欄位,設定所有優先順序的系統設定。

以下範例會ComputeClass設定靜態 CPU 管理器政策和自訂核心參數:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: custom-sysconfig
spec:
  nodePoolAutoCreation:
    enabled: true
  priorityDefaults:
    nodeSystemConfig:
      kubeletConfig:
        cpuManagerPolicy: static
      linuxNodeConfig:
        sysctls:
          net.core.somaxconn: 2048
  priorities:
  - machineFamily: n4

套用 ComputeClass:

kubectl apply -f custom-sysconfig.yaml

部署選取 ComputeClass 的工作負載

在 Pod 規格中,為 ComputeClass 名稱新增節點選取器:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      nodeSelector:
        cloud.google.com/compute-class: custom-sysconfig
      containers:
      - name: app-container
        image: nginx

套用工作負載:

kubectl apply -f my-app.yaml

詳情請參閱「自訂節點系統設定」。

使用設定檔進行節點系統設定

使用節點系統設定檔時,您會使用 YAML 檔案,其中包含 kubelet 和 Linux 核心的設定參數。雖然 GKE Autopilot 模式也提供節點系統設定,但本文中的步驟會說明如何為 GKE Standard 模式建立及使用設定檔。

如要在 GKE Standard 模式中使用節點系統設定檔,請按照下列步驟操作:

  1. 建立設定檔。這個檔案包含 kubelet 和 sysctl 設定。
  2. 建立叢集時,或建立/更新節點集區時,新增設定。

建立設定檔

以 YAML 格式編寫節點系統設定。以下範例會為 kubelet 和 sysctl 選項新增設定:

kubeletConfig:
  cpuManagerPolicy: static
  allowedUnsafeSysctls:
    - 'kernel.shm*'
    - 'kernel.msg*'
    - 'kernel.sem'
    - 'fs.mqueue.*'
    - 'net.*'
linuxConfig:
  sysctl:
    net.core.somaxconn: '2048'
    net.ipv4.tcp_rmem: '4096 87380 6291456'

在本範例中,適用下列情況:

  • cpuManagerPolicy: static 欄位會設定 kubelet,以使用靜態 CPU 管理政策。
  • net.core.somaxconn: '2048' 欄位會將 socket listen() 後備緩衝區限制為 2,048 個位元組。
  • net.ipv4.tcp_rmem: '4096 87380 6291456' 欄位會將 TCP 通訊端接收緩衝區的最小值、預設值和最大值,分別設為 4,096 個位元組、87,380 個位元組和 6,291,456 個位元組。

如要只為 kubelet 或 sysctl 新增設定,請只在節點系統設定中加入該部分。舉例來說,如要新增 kubelet 設定,請建立下列檔案:

kubeletConfig:
  cpuManagerPolicy: static

如需可新增至節點系統設定的完整欄位清單,請參閱「Kubelet 設定選項」和「Sysctl 設定選項」一節。

將設定新增至 Standard 節點集區

建立節點系統設定後,請使用 Google Cloud CLI 新增 --system-config-from-file 旗標。您可以在建立叢集,或建立/更新節點集區時新增這個標記。您無法使用 Google Cloud 控制台新增節點系統設定。

建立具有節點系統設定的叢集

使用 gcloud CLI 或 Terraform 建立叢集時,可以新增節點系統設定。下列操作說明會將節點系統設定套用至預設節點集區:

gcloud CLI

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

更改下列內容:

  • CLUSTER_NAME:叢集名稱
  • LOCATION:叢集的運算可用區或區域
  • SYSTEM_CONFIG_PATH:包含 kubelet 和 sysctl 設定的檔案路徑

套用節點系統設定後,叢集的預設節點集區會使用您定義的設定。

Terraform

如要使用 Terraform 建立區域叢集,並自訂節點系統設定,請參閱下列範例:

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-cluster"
  location = "us-central1"

  initial_node_count = 1

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

如要進一步瞭解如何使用 Terraform,請參閱「GKE 的 Terraform 支援」。

使用節點系統設定建立新的節點集區

使用 gcloud CLI 或 Terraform 建立新節點集區時,可以新增節點系統設定。

下列操作說明會將節點系統設定套用至新的節點集區:

gcloud CLI

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --location=LOCATION \
     --system-config-from-file=SYSTEM_CONFIG_PATH

更改下列內容:

  • POOL_NAME:節點集區名稱
  • CLUSTER_NAME:要新增節點集區的叢集名稱
  • LOCATION:叢集的運算可用區或區域
  • SYSTEM_CONFIG_PATH:包含 kubelet 和 sysctl 設定的檔案路徑

Terraform

如要使用 Terraform 建立節點集區,並自訂節點系統設定,請參閱下列範例:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

如要進一步瞭解如何使用 Terraform,請參閱「GKE 的 Terraform 支援」。

更新現有節點集區的節點系統設定

您可以為現有節點集區設定或更新節點系統設定。如要進一步瞭解如何更新現有設定,請參閱「透過更新現有節點集區進行編輯」。

執行下列指令,更新現有節點集區:

   gcloud container node-pools update POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --system-config-from-file=SYSTEM_CONFIG_PATH

更改下列內容:

  • POOL_NAME:要更新的節點集區名稱
  • CLUSTER_NAME:要更新的叢集名稱
  • LOCATION:叢集的運算可用區或區域
  • SYSTEM_CONFIG_PATH:包含 kubelet 和 sysctl 設定的檔案路徑

這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要進一步瞭解這項特定變更,請在「手動變更,使用節點升級策略重新建立節點,但不遵守維護政策」表格中找到對應的資料列。

如要進一步瞭解節點更新,請參閱「規劃節點更新中斷情形」。

編輯節點系統設定

您可以視使用 ComputeClasses 或設定檔而定,編輯節點系統設定。

適用於 ComputeClasses

使用 ComputeClasses 時,如要編輯節點系統設定,請選擇下列其中一種方法:

方法 1:更新現有的 ComputeClass

如果您更新現有 ComputeClass 中的 nodeSystemConfig,GKE 只會將更新後的設定套用至新建立的節點。現有節點不會自動更新。

如要將工作負載遷移至採用新設定的節點,請執行下列其中一項操作:

  • 在 ComputeClass 中設定即時遷移。
  • 如要觸發新節點的擴充作業,請手動重新啟動或重新建立工作負載。

如要更新 ComputeClass,請編輯 YAML 檔案並套用:

kubectl apply -f custom-sysconfig.yaml

方法 2:建立新的 ComputeClass

為確保工作負載遷移至使用更新設定的新節點,請按照下列步驟操作:

  1. 使用不同名稱和更新的設定建立新的 ComputeClass。
  2. 更新工作負載規格中的節點選取器,以參照新的 ComputeClass。
  3. 套用更新後的工作負載規格。叢集自動調度器會使用新設定佈建新節點,並最終縮減舊節點。
  4. 刪除舊的 ComputeClass 物件。

設定檔

如要使用設定檔編輯節點系統設定,您可以建立具有所需設定的新節點集區,或更新現有節點集區的節點系統設定。

建立節點集區以進行編輯

如要透過建立節點集區來編輯節點系統設定,請按照下列步驟操作:

  1. 建立設定檔,並加入所需設定。
  2. 將設定新增至新的節點集區。
  3. 將工作負載遷移至新的節點集區。
  4. 刪除舊節點集區。

透過更新現有節點集區進行編輯

如要編輯現有節點集區的現有節點系統設定,請按照「更新節點集區」分頁中的說明,將設定新增至節點集區。更新節點系統設定時,如果新設定會覆寫節點集區的現有系統設定,就必須重新建立節點。如果在更新期間省略任何參數,系統會將這些參數設為各自的預設值。

取得現有節點系統設定

如要擷取節點集區現有的節點系統設定 (例如,您已自訂設定並想新增設定),請使用 gcloud container node-pools describe 指令。指令輸出內容會列出 kubeletConfig 和 linuxNodeConfig 下的所有現有設定。

舉例來說,請參閱下列程式碼片段,瞭解 describe 指令的輸出格式:

  kubeletConfig:
    allowedUnsafeSysctls:
    - kernel.shm*
    - kernel.msg*
    - kernel.sem
    - fs.mqueue.*
    - net.*
    cpuManagerPolicy: static
    insecureKubeletReadonlyPortEnabled: false
    maxParallelImagePulls: 2
  linuxNodeConfig: # IMPORTANT: Use linuxConfig when updating these settings
    sysctl:
      net.core.somaxconn: '2048'
      net.ipv4.tcp_rmem: 4096 87380 6291456

如果尚未設定節點系統設定,輸出內容不會列出 kubeletConfig 或 linuxNodeConfig。

重設現有節點系統設定

如要將節點系統設定重設為預設值,請更新設定檔,將 kubelet 和 sysctl 欄位的值設為空白,例如:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

刪除節點系統設定

如要移除節點系統設定,請按照下列步驟操作,具體取決於您使用的是 ComputeClasses 還是設定檔。

適用於 ComputeClasses

如要移除自訂節點系統設定,請按照下列步驟操作:

  1. 從工作負載規格中移除 cloud.google.com/compute-class 節點選取器。
  2. 套用更新後的工作負載規格。GKE 會在預設節點上重新建立工作負載。叢集自動配置器最終會縮減規模,並刪除為 ComputeClass 佈建的節點。
  3. 從叢集刪除 ComputeClass 物件:

    kubectl delete computeclass CUSTOM_COMPUTE_CLASS_NAME
    

設定檔

如要移除透過設定檔套用的節點系統設定,請按照下列步驟操作:

  1. 建立新的節點集區,但不使用設定檔。
  2. 將工作負載遷移至新的節點集區。
  3. 刪除具有舊節點系統設定的節點集區。

「kubelet」的設定選項

本節中的表格說明可修改的 kubelet 選項。

CPU 管理

下表說明 kubelet 的 CPU 管理選項。

kubelet 設定 限制 預設設定 說明
cpuCFSQuota 必須為 true 或 false。 true 這項設定會強制執行 Pod 的 CPU 限制。將這個值設為 false,表示系統會忽略 Pod 的 CPU 限制。

在某些情況下,Pod 對 CPU 限制很敏感,忽略 CPU 限制可能會有好處。停用 cpuCFSQuota 的風險在於,惡意 Pod 可能會耗用超出預期的 CPU 資源。
cpuCFSQuotaPeriod 必須是時間長度。 "100ms" 這項設定會設定 CPU CFS 配額週期值 cpu.cfs_period_us,指定重新分配 cgroup CPU 資源存取權的週期。這個選項可讓您調整 CPU 節流行為。

記憶體管理和逐出機制

下表說明記憶體管理和清除作業的可修改選項。本節也包含另一個表格,說明 evictionSoft 旗標的可修改選項。

kubelet 設定 限制 預設設定 說明
evictionSoft 信號名稱對應。如需值限制,請參閱下表。 none 這項設定會將信號名稱對應至數量或百分比,定義軟性逐出門檻。軟性驅逐門檻必須有寬限期。kubelet 不會驅逐 Pod,直到超過寬限期為止。
evictionSoftGracePeriod 信號名稱對應。每個信號名稱的值都必須是小於 5m 的正數時間長度。有效時間單位為 ns、us (或 µs)、ms、s 或 m。 none 這項設定會將信號名稱對應至時間長度,定義軟性逐出門檻的寬限期。每個軟性驅逐門檻都必須有對應的寬限期。
evictionMinimumReclaim 信號名稱對應。每個信號名稱的值都必須是正百分比,且小於 10%。 none 這項設定會將信號名稱對應至百分比,定義 kubelet 執行 Pod 驅逐作業時,可回收的特定資源最低量。
evictionMaxPodGracePeriodSeconds 值必須是介於 0 和 300 之間的整數。 0 這項設定會定義 Pod 在驅逐期間終止的寬限期上限 (以秒為單位)。
singleProcessOOMKill 值必須為 true 或 false。 cgroupv1 節點為 true,cgroupv2 節點為 false。 這項設定會決定容器中的程序是個別 OOMkilled,還是以群組形式 OOMkilled。

適用於 GKE 1.32.4-gke.1132000、1.33.0-gke.1748000 以上版本。

下表列出 evictionSoft 旗標的可修改選項。 evictionSoftGracePeriod 和 evictionMinimumReclaim 旗標也適用相同選項,但限制不同。

kubelet 設定 限制 預設設定 說明
memoryAvailable 值必須大於節點記憶體的 100Mi,且小於 50%。 none 這項設定代表軟性逐出前可用的記憶體量。定義 kubelet 中的 memory.available 信號量。
nodefsAvailable 值必須介於 10% 至 50% 之間 none 這項設定代表軟性驅逐前可用的 nodefs。定義 kubelet 中的 nodefs.available 信號量。
nodefsInodesFree 值必須介於 5% 至 50% 之間 none 這項設定代表軟性逐出前可用的 nodefs inode。定義 kubelet 中的 nodefs.inodesFree 信號量。
imagefsAvailable 值必須介於 15% 至 50% 之間 none 這項設定代表軟性逐出前可用的 imagefs。定義 kubelet 中的 imagefs.available 信號量。
imagefsInodesFree 值必須介於 5% 至 50% 之間 none 這項設定代表軟性逐出前可用的 imagefs inode。定義 kubelet 中的 imagefs.inodesFree 訊號量。
pidAvailable 值必須介於 10% 至 50% 之間 none 這項設定代表軟性逐出前可用的 PID。定義 kubelet 中的 pid.available 訊號量。

PID 管理

下表說明可修改的 PID 管理選項。

kubelet 設定 限制 預設設定 說明
podPidsLimit 值必須介於 1024 至 4194304 之間 none 這項設定會為每個 Pod 設定可使用的程序 ID (PID) 數量上限。

記錄

下表說明可修改的記錄選項。

kubelet 設定 限制 預設設定 說明
containerLogMaxSize 值須為正數,且單位後置字元介於 10Mi 至 500Mi 之間 (含)。 10Mi 這項設定會控管容器記錄輪替政策的 containerLogMaxSize 設定,可讓您設定每個記錄檔的大小上限。預設值為 10Mi。有效單位為 Ki、Mi 和 Gi。
containerLogMaxFiles 值必須是介於 2 和 10 之間的整數 (含)。 5 這項設定會控管容器記錄檔輪替政策的 containerLogMaxFiles 設定,可讓您分別為每個容器設定允許的檔案數上限。預設值為 5。每個容器的記錄檔總大小 (container_log_max_size*container_log_max_files) 不得超過節點總儲存空間的 1%。

圖片垃圾回收

下表說明圖片垃圾收集作業的可修改選項。

kubelet 設定 限制 預設設定 說明
imageGcHighThresholdPercent 值必須是介於 10 和 85 之間的整數 (含 10 和 85),且大於 imageGcLowThresholdPercent。 85 這項設定會定義磁碟使用率百分比,超過這個值就會執行映像檔垃圾回收作業。這代表垃圾收集的最高磁碟用量。百分比的計算方式是將這個欄位的值除以 100。
imageGcLowThresholdPercent 值必須是介於 10 至 85 之間的整數 (含 10 和 85),且小於 imageGcHighThresholdPercent。 80 這項設定定義磁碟用量百分比,如果磁碟用量未達到這個百分比,系統就不會執行映像檔垃圾回收作業。這代表垃圾收集作業的最低磁碟用量。百分比的計算方式是將這個欄位的值除以 100。
imageMinimumGcAge 值必須是時間長度,且不得大於 2m。有效時間單位為 ns、us (或 µs)、ms、s、m 或 h。 2m 這項設定定義未使用的圖片在垃圾收集前,必須經過的最短時間。
imageMaximumGcAge 值必須是時間長度。 0s

這項設定定義圖片在垃圾收集前可未使用的最長時間。這個欄位的預設值為 0s,會停用這個欄位。因此,系統不會根據圖片是否未使用而進行垃圾收集。指定這個值時,必須大於 imageMinimumGcAge 欄位的值。

適用於 GKE 1.30.7-gke.1076000、1.31.3-gke.1023000 以上版本。

提取映像檔

下表說明可修改的映像檔提取選項。

kubelet 設定 限制 預設設定 說明
maxParallelImagePulls 值必須是介於 2 和 5 之間的整數 (含首尾)。 2 或 3,視磁碟類型而定。 這項設定會定義平行提取的映像檔數量上限。預設值取決於開機磁碟類型。

安全和不安全的作業

下表說明可修改的選項,用於設定安全性及處理不安全的操作。

kubelet 設定 限制 預設設定 說明
allowedUnsafeSysctls

sysctl名稱或群組清單。允許的 sysctl 群組如下:

  • kernel.shm*
  • kernel.msg*
  • kernel.sem
  • fs.mqueue.*
  • net.*。
none 這項設定會定義以半形逗號分隔的不安全 sysctl 名稱或 sysctl 群組許可清單,可在 Pod 上設定。
insecureKubeletReadonlyPortEnabled 這個值必須是布林值,可以是 true 或 false。 false 這項設定會停用叢集中每個新節點集區的不安全kubelet唯讀通訊埠10255。如果您在這個檔案中設定這項設定,就無法使用 GKE API 用戶端在叢集層級變更設定。

資源管理員

Kubernetes 提供一系列資源管理工具。您可以設定這些資源管理工具,協調及最佳化節點資源的對齊方式,以符合 Pod 的特定 CPU、裝置和記憶體 (巨頁) 資源需求。

下表說明資源管理員可修改的選項。

kubelet 設定 限制 預設設定 說明
cpuManagerPolicy 值必須為 none 或 static。 none 這項設定會控管 kubelet CPU 管理工具政策。預設值為 none,這是預設的 CPU 親和性配置,除了 OS 排程器自動執行的作業外,不會提供任何親和性。

將這個值設為 static,可讓屬於 Guaranteed QoS 類別且有整數 CPU 要求的 Pod 專用 CPU。
memoryManager.policy 值必須為 None 或 Static。 None

這項設定會控管 kubelet 的記憶體管理工具政策。如果使用預設值 None,Kubernetes 的行為會與沒有記憶體管理員時相同。

如果將這個值設為 Static,記憶體管理員政策會傳送取決於 Pod 類型的拓撲提示。詳情請參閱靜態政策。

這項設定適用於控制層執行 GKE 1.32.3-gke.1785000 以上版本的叢集。

topologyManager

值必須是各個欄位支援的設定之一。

使用 Terraform 指令將設定新增至標準節點集區時,無法設定 topologyManager 欄位。

  • policy:none
  • scope:container

這些設定會使用 policy 和 scope 子欄位,控制 kubelet Topology Manager 設定。拓撲管理工具會協調一組元件,負責與 CPU 隔離、記憶體和裝置位置相關的效能最佳化作業。

您可以分別設定政策和範圍設定。如要進一步瞭解這些設定,請參閱「拓撲管理工具範圍和政策」。

下列 GKE 資源支援這項設定:

  • 控制層執行 GKE 1.32.3-gke.1785000 以上版本的叢集。如果叢集的控制層和節點執行 1.33.0-gke.1712000 以上版本,拓撲管理工具也會收到 GPU 拓撲資訊。
  • 使用下列機型的節點:A2、A3、A4、C3、C4、C4A、C4N、G2、G4、M3、N4

容器重新啟動延遲

這項設定可控制容器處於 CrashLoopBackOff 狀態時,容器重啟嘗試之間的最長等待時間。如果 Standard 節點集區執行 GKE 1.35 版或更新版本,即可設定這項設定。

下表說明 crashLoopBackOff 的可修改選項。

kubelet 設定 限制 預設設定 說明
crashLoopBackOff.maxContainerRestartPeriod 值必須是正數,且時間長度小於或等於 5 分鐘 (5m)。有效時間單位為 ns、us (或 µs)、ms、s 或 m。 none 容器重新啟動時,輪詢延遲時間可累積的最大時間長度。重新啟動之間的延遲時間會從初始值開始,以指數方式增加至這個上限。Kubernetes 叢集的預設上限為 5 分鐘。詳情請參閱「可設定的容器重新啟動延遲」。

在 GKE 中安全終止 Spot VM

下表說明 GKE 中 Spot VM 的終止和正常關機期間可修改的選項。如要使用這些選項,叢集的控制層必須執行 GKE 1.35.0-gke.1171000 以上版本。詳情請參閱「Spot VM 在 GKE 中的運作方式」。

kubelet 設定 限制 預設設定 說明
shutdownGracePeriodSeconds 值必須是代表時間長度的整數 (以秒為單位)。允許的值為 0、30 或 120。 30 指定節點延遲關機的總時間長度 (以秒為單位),以便安全終止 Pod。
shutdownGracePeriodCriticalPodsSeconds 值必須是介於 0 和 120 (含) 之間的整數,且必須小於 shutdownGracePeriodSeconds。必須同時設定 shutdownGracePeriodSeconds 才會生效。 15 指定節點關機期間終止重要 Pod 的時間長度 (以秒為單位)。

系統資源預留

對於執行 Linux 和 GKE 1.37 以上版本的 Standard 節點集區,您可以自訂為系統元件保留的記憶體和 CPU 數量。這項功能可讓您針對特定情境微調可分配的容量,例如處理大量映像檔提取作業,或執行自訂節點 DaemonSet。如要進一步瞭解預設預留資源,請參閱「關於 GKE 節點大小」。

下表說明系統資源預留空間的可修改選項。

kubelet 設定 限制 預設設定 說明
reservedResourcesConfig.memoryReservedMib 值必須是整數。必須大於或等於執行 1.37 以上版本時建立的節點集區預設記憶體預留空間,且小於節點總記憶體容量的 50%。 請參閱「記憶體預留」。 要為系統元件預留的記憶體量,以 MiB 為單位。
reservedResourcesConfig.cpuReservedMillicore 值必須是整數。必須大於或等於執行 1.37 以上版本建立的節點集區預設 CPU 預留量,且小於節點總 CPU 容量的 50%。 請參閱「CPU 預留項目」。 要為系統元件預留的 CPU 數量,以毫秒為單位。

確認有效預訂

如要查看套用至節點集區的有效預訂,請檢查 effectiveMemoryReservedMib 和 effectiveCpuReservedMillicore 輸出欄位:

gcloud container node-pools describe POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --format="yaml(config.kubeletConfig.reservedResourcesConfig)"

Sysctl 設定選項

如要調整系統效能,可以修改 Linux 核心參數。 本節中的表格說明您可以設定的各種核心參數。

檔案系統參數 (fs.*)

下表說明 Linux 檔案系統的可修改參數。這些設定可控制 Linux 檔案系統的行為,例如檔案控制代碼限制和事件監控。

Sysctl 參數 限制 說明
fs.aio-max-nr 必須介於 [65536, 4194304] 之間。 這項設定定義了系統範圍內非同步 I/O 要求的數量上限。
fs.file-max 必須介於 [104857, 67108864] 之間。 這項設定定義 Linux 核心可分配的檔案控制代碼數量上限。
fs.inotify.max_user_instances 必須介於 [8192, 1048576] 之間。 這項設定可定義使用者可建立的 inotify 執行個體數量上限。
fs.inotify.max_user_watches 必須介於 [8192, 1048576] 之間。 這項設定定義了使用者可建立的 inotify 監控數量上限。
fs.nr_open 必須介於 [1048576, 2147483584] 之間。 這項設定會定義程序可開啟的檔案描述元數量上限。

核心參數 (kernel.*)

下表說明 Linux 核心的可修改參數。 這些設定會設定核心核心功能,包括共用記憶體配置。

Sysctl 參數 限制 說明
kernel.shmmni 必須介於 [4096, 32768] 之間。 這項設定會定義系統範圍內共用記憶體區段的數量上限。如未設定此值,則預設為 4096。
kernel.shmmax 必須介於 [0, 18446744073692774399] 之間。 這項設定會定義核心允許的單一共享記憶體區段大小上限 (以位元組為單位)。如果這個值大於實際的 RAM 容量,系統會忽略這個值,也就是說,所有可用的 RAM 都可以共用。
kernel.shmall 必須介於 [0, 18446744073692774399] 之間。 這項設定定義系統一次可使用的共用記憶體頁面總量。在 AMD64 和 Intel 64 架構中,一個頁面為 4,096 位元組。
kernel.perf_event_paranoid 必須介於 [-1, 3] 之間。 這項設定可控管沒有 CAP_PERFMON 權限的無權限使用者,是否能使用效能事件系統。核心中的預設值為 2。
kernel.sched_rt_runtime_us 必須介於 [-1, 1000000] 之間。 這項設定會定義即時排程可使用的時間上限。
kernel.softlockup_panic 選用 (布林值)。 這項設定可控制系統是否要在偵測到軟體鎖死時發生核心錯誤。
kernel.yama.ptrace_scope 必須介於 [0, 3] 之間。

這項設定會定義 ptrace() 系統呼叫的範圍和限制,進而影響程序偵錯和追蹤。支援的值包括:

  • 0:傳統 ptrace 權限。
  • 1:受限的 ptrace,這是許多發行版本的預設值。僅限子項程序或 CAP_SYS_PTRACE。
  • 2:僅限管理員使用的 ptrace。只有具有 CAP_SYS_PTRACE 的程序。
  • 3:沒有 ptrace。系統不允許 ptrace 呼叫。
kernel.kptr_restrict 必須介於 [0, 2] 之間。 這項設定表示是否限制透過 /proc 和其他介面公開核心位址。
kernel.dmesg_restrict 選用 (布林值)。 這項設定表示是否禁止沒有權限的使用者使用 dmesg(8) 查看核心記錄緩衝區中的訊息。
kernel.sysrq 必須介於 [0, 511] 之間。

這項設定可控管允許透過 SysRq 鍵叫用的函式。可能的值包括:

kernel.keys.maxbytes 必須介於 [20000, 2097152] 之間。 這項設定定義非根使用者可在所有金鑰的酬載部分保留的位元組數量上限。
kernel.keys.maxkeys 必須介於 [200, 1048576] 之間。 這項設定會定義非根使用者可擁有的金鑰數量上限。

網路參數 (net.*)

下表說明可修改的網路參數。這些設定可調整網路堆疊的效能和行為,從通訊端緩衝區到連線追蹤皆可調整。

Sysctl 參數 限制 說明
net.core.busy_poll 小於 2147483647 的任何正整數。 這項設定會定義輪詢和選取作業的低延遲忙碌輪詢逾時。代表忙碌迴圈等待事件的大約時間 (以微秒為單位)。
net.core.busy_read 小於 2147483647 的任何正整數。 這項設定會定義插座讀取的低延遲忙碌輪詢逾時。這代表裝置佇列中等待封包的忙碌迴圈大約時間 (以微秒為單位)。
net.core.netdev_max_backlog 小於 2147483647 的任何正整數。 當介面接收封包的速度快於核心處理速度時,這項設定會定義 INPUT 端佇列中的封包數量上限。
net.core.rmem_default 小於 2147483647 的任何正整數。 這項設定定義了預設的接收通訊端緩衝區空間 (以位元組為單位)。
net.core.rmem_max 小於 2147483647 的任何正整數。 這項設定會定義接收通訊端緩衝區空間上限 (以位元組為單位)。
net.core.wmem_default 小於 2147483647 的任何正整數。 這項設定會定義通訊端傳送緩衝區的預設設定 (以位元組為單位)。
net.core.wmem_max 小於 2147483647 的任何正整數。 這項設定會定義傳送通訊端緩衝區空間上限 (以位元組為單位)。
net.core.optmem_max 小於 2147483647 的任何正整數。 這項設定定義每個通訊端允許的最大輔助緩衝區空間。
net.core.somaxconn 必須介於 [128, 2147483647] 之間。 這項設定會定義 socket listen() 後備佇列的限制,在使用者空間中稱為 SOMAXCONN。這項設定預設為 128。
net.ipv4.tcp_rmem {min, default, max} (每個值都 > 0,記憶體以位元組為單位)。 這項設定會定義仲裁程序中 UDP 通訊端使用的接收緩衝區大小下限 (以位元組為單位)。預設設定為 1 頁。
net.ipv4.tcp_wmem {min, default, max} (每個值都 > 0,記憶體以位元組為單位)。 這項設定會定義仲裁程序中 UDP Socket 使用的傳送緩衝區大小下限 (以位元組為單位)。預設設定為 1 頁。
net.ipv4.tcp_tw_reuse 必須介於 {0, 1} 之間。 這項設定會定義是否允許在通訊協定觀點安全無虞時,將 TIME_WAIT 狀態的插座重複用於新連線。預設值為 0。
net.ipv4.tcp_max_orphans 必須介於 [16384, 262144] 之間。 這項設定會定義未附加至任何使用者檔案控制代碼的 TCP 通訊端數量上限。
net.ipv4.tcp_max_tw_buckets 必須介於 [4096, 2147483647] 之間。 這項設定會定義系統可同時保留的 timewait 通訊端數量上限。如果超過這個數字,系統會立即終止等待時間的 Socket,並列印警告。
net.ipv4.tcp_syn_retries 必須介於 [1, 127] 之間。 這項設定會定義重新傳輸有效 TCP 連線嘗試的初始 SYN 次數。
net.ipv4.tcp_ecn 必須介於 [0, 2] 之間。 這項設定可控管 TCP 是否使用明確壅塞通知 (ECN)。只有在 TCP 連線的兩端都表示支援 ECN 時,才會使用這項功能。
net.ipv4.tcp_mtu_probing 必須介於 [0, 2] 之間。

這項設定可控管 TCP 封包化層路徑 MTU 探索。支援的值如下:

  • 0:已停用。
  • 1:預設為停用,偵測到 ICMP 黑洞時會啟用。
  • 2:一律啟用。使用初始 MSS tcp_base_mss。
net.ipv4.tcp_congestion_control 必須是「說明」欄中支援的值。

叢集啟用 GKE Dataplane V2 時,不支援這項設定。

支援的值會因圖片類型而異:

  • Container-Optimized OS:reno、cubic、bbr、lp、htcp (適用於 1.34.1-gke.3355001 以上版本的 GKE)
  • Ubuntu:reno、cubic、bbr、lp、htcp、vegas、dctcp、bic、cdg、highspeed、hybla、illinois、nv、scalable、veno、westwood、yeah
net.ipv6.conf.all.disable_ipv6 布林值。 變更這個值等同於變更 conf/default/disable_ipv6 設定,以及所有介面專屬的 disable_ipv6 設定。
net.ipv6.conf.default.disable_ipv6 布林值。 這項設定會停用 IPv6 作業。
net.netfilter.nf_conntrack_acct 必須介於 {0, 1} 之間。 這項設定會啟用連線追蹤流程的會計功能。預設值為 0,表示這項設定已停用。適用於 GKE 1.32.0-gke.1448000 以上版本。
net.netfilter.nf_conntrack_max 必須介於 [65536, 4194304] 之間。 這項設定會定義連線追蹤資料表的大小。如果達到上限,新連線就會失敗。適用於 GKE 1.32.0-gke.1448000 以上版本。
net.netfilter.nf_conntrack_buckets 必須介於 [65536, 524288] 之間。

這項設定會定義雜湊表的大小。建議設定是根據下列因素得出:nf_conntrack_max = nf_conntrack_buckets * 4。

適用於 GKE 1.32.0-gke.1448000 以上版本。

net.netfilter.nf_conntrack_tcp_timeout_close_wait 必須介於 [60, 3600] 之間。

這項設定定義 TCP 連線可維持在 CLOSE_WAIT 狀態的期間 (以秒為單位)。預設值為 3600。

適用於 GKE 1.32.0-gke.1448000 以上版本。

net.netfilter.nf_conntrack_tcp_timeout_established 必須介於 [600, 86400] 之間。

這項設定會定義無效連線的存續時間 (以秒為單位),超過時間後,系統就會從連線追蹤表自動刪除這些連線。

適用於 GKE 1.32.0-gke.1448000 以上版本。

net.netfilter.nf_conntrack_tcp_timeout_time_wait 必須介於 [1, 600] 之間。

這項設定定義 TCP 連線可維持在 TIME_WAIT 狀態的期間 (以秒為單位)。預設值為 120。

適用於 GKE 1.32.0-gke.1448000 以上版本。

net.ipv4.neigh.default.gc_thresh1 必須介於 [0, 262144] 之間。 這項設定會定義 ARP 快取中要保留的項目數量下限。如果項目數量低於這項設定,垃圾收集器就不會執行。將這個值設為 0 可能會導致快取輾轉現象,並降低效能。
net.ipv4.neigh.default.gc_thresh2 必須介於 [512, 524288] 之間。 這項設定會定義 ARP 快取中要保留的項目數量軟性上限。垃圾收集器允許項目數量超過這個值 5 秒,然後才會開始軟式垃圾收集。
net.ipv4.neigh.default.gc_thresh3 必須介於 [1024, 1048576] 之間。 這項設定會定義 ARP 快取中要保留的項目數量上限。如果項目數量超過這項設定,垃圾收集器一律會執行。

虛擬記憶體參數 (vm.*)

下表說明虛擬記憶體子系統的可修改參數。這些設定可管理虛擬記憶體子系統,控制核心處理記憶體、交換和磁碟快取的方式。

sysctl 參數 限制 說明
vm.max_map_count 必須介於 [65536, 2147483647] 之間。 這個檔案會定義程序可擁有的記憶體對應區域數量上限。
vm.dirty_background_ratio 必須介於 [1, 100] 之間。 這項設定定義了系統記憶體可填入髒頁的百分比,達到這個百分比後,背景核心清除器執行緒就會開始回寫。值必須小於 vm.dirty_ratio 欄位的值。
vm.dirty_background_bytes 必須介於 [0, 68719476736] 之間。

這項設定會定義背景核心清除器執行緒開始回寫時的髒記憶體量。

請注意,vm.dirty_background_bytes 是 vm.dirty_background_ratio 的對應項目。只能指定其中一項設定。

vm.dirty_expire_centisecs 必須介於 [0, 6000] 之間。 這項設定定義品質不佳的資料 (dirty data) 在核心清除器執行緒將資料寫入磁碟前,可保留在記憶體中的最長時間 (以百分之一秒為單位)。
vm.dirty_ratio 必須介於 [1, 100] 之間。 這項設定定義系統記憶體可填入髒頁面的百分比,超過這個百分比後,執行寫入作業的程序就會強制封鎖,並同步寫出髒資料。
vm.dirty_bytes 必須介於 [0, 68719476736] 之間。

這項設定可定義產生磁碟寫入的程序開始自行寫回時的髒記憶體量。vm.dirty_bytes 的最小值為兩頁 (以位元組為單位)。如果值低於這個限制,系統會忽略該值並保留舊設定。

請注意,vm.dirty_bytes 是 vm.dirty_ratio 的對應項目。只能指定其中一項設定。

vm.dirty_writeback_centisecs 必須介於 [0, 1000] 之間。 這項設定會定義核心清除器執行緒喚醒的間隔 (以百分之一秒為單位),以便將舊的品質不佳的資料 (dirty data) 寫入磁碟。
vm.overcommit_memory 必須介於 {0, 1, 2} 之間。

這項設定會決定核心處理記憶體過度配置的策略。這些值如下:

  • 0:拒絕大型分配作業
  • 1:一律允許 (預設值)
  • 2:防止超出交換空間 + RAM 比率的提交

記憶體少於 15 GB 的電腦不支援這項設定。

vm.overcommit_ratio 必須介於 [0, 100] 之間。 如果 vm.overcommit_memory 欄位的值設為 2,這項設定會定義允許超量配置的實體 RAM 百分比。
vm.vfs_cache_pressure 必須介於 [0, 100] 之間。 這項設定會調整核心偏好,以回收用於 dentry (目錄) 和 inode 快取的記憶體。
vm.swappiness 必須介於 [0, 200] 之間。 這項設定可控制核心將程序從實體記憶體移至交換磁碟的傾向。預設值為 60。
vm.watermark_scale_factor 必須介於 [10, 3000] 之間。 這項設定會控管 kswapd 的積極程度。這會定義 kswapd 喚醒前剩餘的記憶體,以及休眠前要釋放的記憶體。預設值為 10。
vm.min_free_kbytes 必須介於 [67584, 1048576] 之間。 這項設定會定義 OOM 之前的最低可用記憶體。預設值為 67584。

如要進一步瞭解各 sysctl 旗標支援的值,請參閱 --system-config-from-file gcloud CLI 說明文件。

不同 Linux 命名空間的特定 sysctl 標記可能會有不重複的值,但其他標記可能適用於整個節點。使用節點系統設定更新 sysctl 選項,有助於確保 sysctl 會套用至節點和每個命名空間,讓每個 Pod 在每個 Linux 命名空間中都有相同的 sysctl 值。

Linux cgroup 模式設定選項

容器執行階段和 kubelet 會使用 Linux 核心 cgroups 進行資源管理,例如限制 Pod 中每個容器可存取的 CPU 或記憶體數量。核心中有兩個版本的 cgroup 子系統:cgroupv1 和 cgroupv2。Kubernetes cgroupv2 支援功能在 Kubernetes 1.18 版中以 Alpha 版推出,1.22 版為 Beta 版,1.25 版則為正式版。詳情請參閱 Kubernetes cgroups v2 說明文件。

節點系統設定可讓您自訂節點集區的 cgroup 設定。你可以使用 cgroupv1 或 cgroupv2。對於執行 1.26 以上版本的新 Standard 節點集區,GKE 會使用 cgroupv2,對於執行 1.26 之前版本的節點集區,則會使用 cgroupv1。如果是透過自動佈建節點功能建立的節點集區,cgroup 設定取決於初始叢集版本,而非節點集區版本。Arm 機器不支援「cgroupv1」。

您可以使用節點系統設定,將節點集區的設定變更為明確使用 cgroupv1 或 cgroupv2。將使用 cgroupv1 的現有節點集區升級至 1.26 版時,設定不會變更為 cgroupv2。如果現有節點集區執行的版本早於 1.26,且不含自訂 cgroup 設定,則會繼續使用 cgroupv1。如要變更設定,您必須為現有節點集區明確指定 cgroupv2。

舉例來說,如要將節點集區設為使用 cgroupv2,請使用節點系統設定檔,例如:

linuxConfig:
  cgroupMode: 'CGROUP_MODE_V2'

支援的 cgroupMode 選項如下:

  • CGROUP_MODE_V1:在節點集區中使用 cgroupv1。
  • CGROUP_MODE_V2:在節點集區中使用 cgroupv2。
  • CGROUP_MODE_UNSPECIFIED:使用預設的 GKE cgroup 設定。

如要使用 cgroupv2,請務必遵守下列規定和限制:

  • 如果節點集區執行的版本低於 1.26,則必須使用 gcloud CLI 408.0.0 以上版本。或者,使用 gcloud beta 395.0.0 以上版本。
  • 叢集和節點集區必須執行 GKE 1.24.2-gke.300 以上版本。
  • 您必須使用 Container-Optimized OS (含 containerd) 或 Ubuntu (含 containerd) 節點映像檔。
  • 如果任何工作負載需要讀取 cgroup 檔案系統 (/sys/fs/cgroup/...),請確保這些工作負載與 cgroupv2 API 相容。
  • 如果您使用任何監控或第三方工具,請確認這些工具與 cgroupv2 相容。
  • 如果您使用 Java 工作負載 (JDK),建議使用完全支援 cgroupv2 的版本,包括 JDK 8u372、JDK 11.0.16 以上版本,或 JDK 15 以上版本。

驗證 cgroup 設定

新增節點系統設定時,GKE 必須重新建立節點,才能實作變更。將設定新增至節點集區並重新建立節點後,即可驗證新設定。

您可以使用 gcloud CLI 或 kubectl 指令列工具,驗證節點集區中節點的 cgroup 設定:

gcloud CLI

檢查節點集區的 cgroup 設定:

gcloud container node-pools describe POOL_NAME \
  --format='value(Config.effectiveCgroupMode)'

將 POOL_NAME 替換為節點集區名稱。

可能的輸出內容如下:

  • EFFECTIVE_CGROUP_MODE_V1:節點使用 cgroupv1
  • EFFECTIVE_CGROUP_MODE_V2:節點使用 cgroupv2

節點集區中的節點重新建立後,輸出內容只會顯示新的 cgroup 設定。Windows Server 節點集區不支援 cgroup,因此輸出內容為空白。

kubectl

如要使用 kubectl 驗證這個節點集區中節點的 cgroup 設定,請選取節點並按照下列指示連線:

  1. 使用節點集區中的任何節點建立互動式殼層。在指令中,將 mynode 替換為節點集區中任一節點的名稱。
  2. 找出 Linux 節點上的 cgroup 版本。

Linux Hugepages 設定選項

您可以手動預先分配 hugepage,也可以自動指派透明 hugepage。

預先配置的巨頁

您可以使用節點系統設定檔預先分配大頁面。Kubernetes 支援預先分配的巨頁,這類資源與 CPU 或記憶體類似。

如要使用巨頁,請遵守下列限制和規定:

  • 為確保節點不會完全被 hugepage 佔用,所分配 hugepage 的總大小不得超過下列任一值:
    • 記憶體少於 30 GB 的電腦:總記憶體的 60%。舉例來說,在記憶體為 8 GB 的 e2-standard-2 機器上,您無法為巨頁分配超過 4.8 GB 的記憶體。
    • 在記憶體超過 30 GB 的電腦上:總記憶體的 80%。舉例來說,在記憶體為 32 GB 的 c4a-standard-8 機器上,巨頁不得超過 25.6 GB。
  • 1 GB 巨頁僅適用於 A3、C2D、C3、C3D、C4、C4A、C4D、C4N、CT5E、CT5LP、CT6E、H3、M2、M3、M4、Z3 或 Z4D 機型。

下表說明 Linux Huge Pages 的可修改設定。

設定參數 限制 預設值 說明
hugepage_size2m 整數計數。須遵守先前所述的記憶體配置限制。 0 這項設定會預先配置特定數量的 2 MB 巨頁。
hugepage_size1g 整數計數。須遵守先前所述的記憶體和機型限制。 0 這項設定會預先配置特定數量的 1 GB 巨頁。

透明巨頁 (THP)

您可以使用節點系統設定檔,啟用 Linux 核心的透明巨頁支援。使用 THP 時,核心會自動將 hugepage 指派給程序,無需手動預先分配。

下表說明 THP 的可修改參數。

設定參數 支援的值 預設值 說明
transparentHugepageEnabled
  • TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS:系統已啟用透明巨頁。
  • TRANSPARENT_HUGEPAGE_ENABLED_MADVISE:在 MADV_HUGEPAGE 區域內啟用透明巨頁。這是預設的核心設定。
  • TRANSPARENT_HUGEPAGE_ENABLED_NEVER:透明巨頁已停用。
  • TRANSPARENT_HUGEPAGE_ENABLED_UNSPECIFIED:預設值。GKE 不會修改核心設定。
UNSPECIFIED 這項設定可控制是否為匿名記憶體啟用 THP。
transparentHugepageDefrag
  • TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS:應用程式要求 THP 時,如果分配失敗,就會停止,並直接回收頁面和壓縮記憶體,嘗試立即分配 THP。
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER:應用程式會在背景喚醒 kswapd,回收頁面並喚醒 kcompactd 來壓縮記憶體,以便在不久的將來提供 THP。khugepaged 接著會負責稍後安裝 THP 頁面。
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER_WITH_MADVISE:應用程式會像平常一樣進入直接回收和壓縮程序,但只適用於使用 madvise(MADV_HUGEPAGE) 的區域。其他所有區域都會在背景喚醒 kswapd,回收頁面並喚醒 kcompactd 來壓縮記憶體,以便在不久的將來提供 THP。
  • TRANSPARENT_HUGEPAGE_DEFRAG_MADVISE:應用程式會像平常一樣進入直接回收和壓縮程序,但只適用於使用 madvise(MADV_HUGEPAGE) 的區域。其他所有區域都會在背景喚醒 kswapd,回收頁面並喚醒 kcompactd 來壓縮記憶體,以便在不久的將來提供 THP。
  • TRANSPARENT_HUGEPAGE_DEFRAG_NEVER:應用程式絕不會進入直接回收或壓縮狀態。
  • TRANSPARENT_HUGEPAGE_DEFRAG_UNSPECIFIED:預設值。GKE 不會修改核心設定。
UNSPECIFIED 這項設定會定義 THP 的重組設定。

THP 適用於 GKE 1.33.2-gke.4655000 以上版本。在 GKE 1.33.2-gke.4655000 以上版本中,新的 TPU 節點集區也會預設啟用這項功能。將現有節點集區升級至支援的版本或更新版本時,系統不會啟用 THP。

Linux 精確時間同步選項

如果工作負載需要準確的時間同步,並監控時間同步的準確度,您可以設定準確時間,使用 chrony 和 ptp_kvm 將 VM 時鐘與主機時鐘同步。這項設定的目標是在支援的設定中,達到 1 毫秒內的準確度。如要進一步瞭解支援的機型、作業系統和可用區,請參閱「為 Compute Engine VM 設定準確時間」一文。

下表說明設定與 GKE 精確時間同步的參數:

設定參數 支援的值 預設值 說明
accurateTimeConfig.enablePtpKvmTimeSync true或false false 這項設定可確保時間同步處理的準確度。這項功能僅支援特定機器類型、作業系統和區域。

Linux VFIO 設定選項

下表說明在節點上設定 VFIO (虛擬函式 I/O) 的參數。VFIO 可讓安全、無權限的使用者空間驅動程式存取 I/O 裝置。

設定參數 限制 預設值 說明
nodeVfioConfig.dmaEntryLimit 必須是介於 65535 和 4194304 之間的整數。 65535 指定 VFIO IOMMU 類型 1 驅動程式可為容器對應的 DMA 項目 (頁面) 數量上限。這項限制會影響可釘選供裝置直接存取的主機記憶體總量,這對 TPU 和 GPU 等高效能裝置來說通常至關重要。這項設定對應至下列核心參數:/sys/module/vfio_iommu_type1/parameters/dma_entry_limit。如果工作負載對應的記憶體區域較大,可能需要較高的值。

適用於 GKE 1.36.0-gke.3009000 以上版本。

Linux 磁碟 I/O 排程器設定選項

下表說明設定節點集區磁碟 I/O 排程器的參數。

設定參數 支援的值 預設值 說明
diskIoScheduler.nodeSystemIoScheduler mq-deadline、bfq、kyber、none Container-Optimized OS 映像檔為 bfq,Ubuntu 映像檔為 none 為執行節點系統工作負載的開機磁碟或臨時本機 SSD 設定 I/O 排程器。

適用於 GKE 1.36.0-gke.3009000 以上版本。
diskIoScheduler.nodeAttachedDiskIoScheduler mq-deadline、bfq、kyber、none none 設定附加磁碟的 I/O 排程器。

適用於 GKE 1.36.0-gke.3009000 以上版本。

後續步驟