登录Kubernetes测试集群时发现集群好像没有启动成功。
运行kubectl cluster-info 查看集群信息时报错:
The connection to the server 172.26.8.11:6443 was refused - did you specify the right host or port?
第一反应Kubernetes API server没有启动。
运行 kubectl get pods --all-namespaces ,果然没有查到任何Pod。
因为我的Kubernetes集群是通过kubeadm 安装的 (参见: 使用kubeadm一键部署kubernetes集群 ),所以API server也是通过Pod来运行的,只有kubelet 是通过systemd运行的。
运行 systemctl status kubelet 查看,果然kubelet服务失败,也就是并不是API Server出错导致查不到Pod,而不是kubelet出错无法向API Server注册节点。
再运行journalctl -xefu kubelet 查看systemd日志发现真正的错误原因是:
failed to run Kubelet: Running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false
运行cat /proc/swaps 检查果然Swap没有被关闭。
检查我之前的安装脚本发现,我之前修改/etc/fstab永久关闭Swap的命令有错。
正确的禁用Swap命令如下:
#关闭Swap,机器重启后不生效
swapoff -a
#修改/etc/fstab永久关闭Swap
cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
#Redhat
sed -i "s/\/dev\/mapper\/rhel-swap/\#\/dev\/mapper\/rhel-swap/g" /etc/fstab
#CentOS
sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab
#修改后重新挂载全部挂载点
mount -a
#查看Swap
free -m
cat /proc/swaps
在Kubernetes集群master和nodes上禁用Swap后,运行下面命令重启Kubelet:
systemctl daemon-reload
systemctl restart kubelet
再运行 kubectl get pods --all-namespaces 检查Pod运行正常。
因篇幅问题不能全部显示,请点此查看更多更全内容