CentOS 上 Kubernetes(k8s)启动失败的原因非常多,不能一概而论,但我在实际运维中总结了几类最常见的原因,你可以对照排查:
K8s 对网络要求很严格,CentOS 默认开启 SELinux 和 firewalld。
检查:
getenforce
systemctl status firewalld
建议(测试环境):
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
K8s 不允许 swap 开启
free -m
swapon --show
关闭:
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
K8s 需要 br_netfilter
lsmod | grep br_netfilter
如果没有:
modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
systemctl status docker
# 或
systemctl status containerd
常见错误:
推荐配置(docker):
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
然后:
systemctl restart docker
看日志:
journalctl -u kubelet -xe
常见错误:
解决:
timedatectl set-ntp true
hostnamectl set-hostname node1
常见原因:
查看:
kubeadm init --v=5
国内建议加:
--image-repository registry.aliyuncs.com/google_containers
你可以一条条对照:
如果你愿意,把下面信息贴出来,我可以精准告诉你哪一步错了:
journalctl -u kubelet -n 50
kubeadm init 报错信息
cat /etc/os-release
docker version
你现在是 master 起不来,还是 node 加入失败?