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