在 Kubernetes 節點上配置交換記憶體

本頁面提供了一個示例,說明如何使用 kubeadm 在 Kubernetes 節點上配置交換記憶體。

目標

  • 使用 kubeadm 在 Kubernetes 節點上配置交換記憶體。
  • 瞭解如何配置加密和未加密的交換空間。
  • 瞭解如何在啟動時啟用交換空間。

準備工作

你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在本教程中使用至少兩個非控制平面主機的節點組成的叢集。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一

你的 Kubernetes 伺服器版本必須是 1.33 或更高。

要檢查版本,請輸入 kubectl version

你的叢集中至少需要一個執行 Linux 作業系統的 worker 節點。本演示要求安裝 kubeadm 工具,遵循 kubeadm 安裝指南中概述的步驟。

在你將配置交換使用的每個 worker 節點上,你需要安裝

  • fallocate

  • mkswap

  • swapon

  • 對於加密的交換空間(推薦),你還需要

  • cryptsetup

使用 kubeadm 安裝支援交換的叢集

建立交換檔案並啟用交換

如果未啟用交換,則需要在節點上配置交換。以下部分演示瞭如何建立 4GiB 的加密和未加密交換空間。

加密交換檔案可以按如下方式設定。請記住,此示例使用 `cryptsetup` 二進位制檔案(在大多數 Linux 發行版中都可用)。

# Allocate storage and restrict access
fallocate --length 4GiB /swapfile
chmod 600 /swapfile

# Create an encrypted device backed by the allocated storage
cryptsetup --type plain --cipher aes-xts-plain64 --key-size 256 -d /dev/urandom open /swapfile cryptswap

# Format the swap space
mkswap /dev/mapper/cryptswap

# Activate the swap space for paging
swapon /dev/mapper/cryptswap

未加密的交換檔案可以按如下方式設定。

# Allocate storage and restrict access
fallocate --length 4GiB /swapfile
chmod 600 /swapfile

# Format the swap space
mkswap /swapfile

# Activate the swap space for paging
swapon /swapfile

驗證交換是否啟用

可以使用 `swapon -s` 命令或 `free` 命令驗證交換是否啟用。

使用 `swapon -s`

Filename       Type		Size		Used		Priority
/dev/dm-0      partition 	4194300		0		-2

使用 `free -h`

               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.3Gi       249Mi        25Mi       2.5Gi       2.5Gi
Swap:          4.0Gi          0B       4.0Gi

在啟動時啟用交換

設定交換後,要在啟動時啟動交換檔案,通常可以透過設定 systemd 單元來啟用(加密)交換,或者在 `/etc/fstab` 中新增類似於 `/swapfile swap swap defaults 0 0` 的行。

如果這是你想要確保的,使用 systemd 進行交換啟用允許系統延遲 kubelet 啟動,直到交換可用。以類似的方式,使用 systemd 允許你的伺服器保持交換啟用狀態,直到 kubelet(通常是你的容器執行時)關閉。

設定 kubelet 配置

在節點上啟用交換後,需要按以下方式配置 kubelet

 # this fragment goes into the kubelet's configuration file
 failSwapOn: false
 memorySwap:
     swapBehavior: LimitedSwap

為了使這些配置生效,需要重新啟動 kubelet。

最後修改時間:2025 年 6 月 22 日下午 3:52 PST:新增一個教程,用於在節點上配置交換記憶體 (bec9d0d50a)