必须关闭swap,否则kubelet启动直接失败;swapoff -a仅临时禁用,需同步注释/etc/fstab中swap行并验证swapon --show为空,否则重启后kubelet崩溃。

必须关闭Swap,否则kubelet启动直接失败,初始化成功率低于10%。这不是性能优化建议,而是Kubernetes的硬性要求——从1.8版本起,kubelet默认拒绝在启用Swap的节点上运行。
为什么swapoff -a之后还要改/etc/fstab
只执行swapoff -a只是临时禁用,系统重启后会自动挂载fstab里定义的swap分区,导致kubelet再次崩溃退出。很多用户卡在“明明关了swap,kubeadm init还是报错”就是这个原因。
-
swapoff -a立即卸载所有swap设备(包括文件型swap) -
sed -ri 's/.*swap.*/#&/' /etc/fstab注释掉所有含swap的行(比/swap/d更安全,避免误删含swap字符串的合法路径) - 改完务必执行
free -h确认Swap行全为0,且cat /proc/swaps输出为空
银河麒麟/国产系统特有的SELinux与MAC干扰
银河麒麟V10 SP3+默认启用强制访问控制(MAC),仅setenforce 0不够——kubectl连apiserver会因权限拒绝失败,错误信息通常是Permission denied while trying to connect to the Docker daemon socket或connection refused。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
- 必须同时修改
/etc/selinux/config中SELINUX=enforcing为disabled - 执行
setenforce 0立即生效,但不重启仍可能被MAC策略拦截 - 某些麒麟版本还需额外关闭
auditd:systemctl stop auditd && systemctl disable auditd
swap关闭失败的典型现象和排查点
执行swapoff -a后free -h仍显示swap用量,常见于以下情况:
- 存在swap文件而非swap分区:用
swapon --show=NAME查出具体路径,再swapoff /swapfile - systemd-swap服务在后台自启:
systemctl stop systemd-swap && systemctl disable systemd-swap - 云主机镜像预置swap:部分阿里云/华为云CentOS镜像自带
/var/swapfile,需手动删除并清空fstab残留 -
kubelet日志明确报错failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory——这其实是swap未关导致kubelet根本没起来,别被错误信息带偏
真正麻烦的不是命令怎么写,而是改完fstab后忘记验证swapon --show是否为空,或者在多节点集群里漏掉某个worker节点。只要有一个节点swap开着,整个集群就不可靠。










