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