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