在 Kubernetes 节点上配置交换内存
本文演示了如何使用 kubeadm 在 Kubernetes 节点上制备和启用交换内存。
教程目标
- 使用 kubeadm 在 Kubernetes 节点上制备交换内存。
- 学习配置加密和未加密的交换内存。
- 学习如何在系统启动时启用交换内存。
准备开始
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
你的 Kubernetes 服务器版本必须不低于版本 1.33.要获知版本信息,请输入 kubectl version.
你需要在集群中至少有一个运行 Linux 操作系统的工作节点。 本次演示需要先安装 kubeadm 工具,安装步骤请参考 kubeadm 安装指南。
在每个需要配置交换内存的工作节点上,你需要以下工具:
fallocatemkswapswapon
对于加密的交换空间(推荐),你还需要:
cryptsetup
使用 kubeadm 安装支持交换内存的集群
创建交换文件并启用交换内存
如果当前节点未启用交换内存,则需要先制备交换空间。 本节将展示如何以加密和未加密的方式创建 4GiB 的交换文件。
你可以使用如下命令设置加密的交换文件。
请注意,此示例使用的是 cryptsetup 工具(在大多数 Linux 发行版中都可用):
# 分配存储空间并限制访问权限
fallocate --length 4GiB /swapfile
chmod 600 /swapfile
# 基于已分配的存储空间创建加密设备
cryptsetup --type plain --cipher aes-xts-plain64 --key-size 256 -d /dev/urandom open /swapfile cryptswap
# 格式化此交换空间
mkswap /dev/mapper/cryptswap
# 为换页激活交换空间
swapon /dev/mapper/cryptswap
未加密的交换文件可以按以下方式配置:
# 分配存储空间并限制访问权限
fallocate --length 4GiB /swapfile
chmod 600 /swapfile
# 格式化此交换空间
mkswap /swapfile
# 为换页激活交换空间
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。 你需要为此节点选择一种交换内存行为。 在本教程中,你将配置 LimitedSwap 行为。
找到并编辑 kubelet 配置文件,然后:
- 将
failSwapOn设置为 false - 将
memorySwap.swapBehavior设置为 LimitedSwap
# 此代码片段应添加到 kubelet 的配置文件中
failSwapOn: false
memorySwap:
swapBehavior: LimitedSwap
为了使这些配置生效,需重启 kubelet。 通常你需要为此运行以下命令:
systemctl restart kubelet.service
你应该会发现 kubelet 现在处于健康状态,并且你可以根据需要运行使用交换内存的 Pod。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.