在 Kubernetes 節點上配置交換記憶體
本頁面提供了一個示例,說明如何使用 kubeadm 在 Kubernetes 節點上配置交換記憶體。
目標
- 使用 kubeadm 在 Kubernetes 節點上配置交換記憶體。
- 瞭解如何配置加密和未加密的交換空間。
- 瞭解如何在啟動時啟用交換空間。
準備工作
你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在本教程中使用至少兩個非控制平面主機的節點組成的叢集。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一
你的 Kubernetes 伺服器版本必須是 1.33 或更高。要檢查版本,請輸入 kubectl version。
你的叢集中至少需要一個執行 Linux 作業系統的 worker 節點。本演示要求安裝 kubeadm 工具,遵循 kubeadm 安裝指南中概述的步驟。
在你將配置交換使用的每個 worker 節點上,你需要安裝
fallocatemkswapswapon對於加密的交換空間(推薦),你還需要
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。