在 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。