在 CentOS 上部署 Kubernetes(k8s)常见的问题主要集中在系统环境、容器运行时、kubeadm、网络、SELinux/Firewalld 等方面。下面给你一套系统化排错思路 + 常用命令,适合初学者和运维实战。
cat /etc/centos-release
uname -r
✅ 建议:
getenforce
如果不是 Disabled:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl status firewalld
关闭:
systemctl stop firewalld
systemctl disable firewalld
free -h
K8s 必须关闭 swap:
swapoff -a
sed -i '/swap/d' /etc/fstab
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
systemctl status docker
journalctl -u docker -f
常见问题:
✅ 推荐 docker 使用 systemd:
cat /etc/docker/daemon.json
应包含:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启:
systemctl restart docker
systemctl status containerd
journalctl -u containerd -f
journalctl -xeu kubelet -f
或:
kubeadm init --v=5
systemctl status kubelet
常见错误示例:
failed to run Kubelet: misconfigurationcgroup driver not supported解决:
systemctl restart kubelet
ss -lntp | grep 6443
6443 被占用会直接导致 apiserver 起不来。
kubectl get nodes
NotReady 常见原因:
kubectl get pods -A
kubectl describe pod <pod> -n <ns>
kubectl logs <pod> -n <ns>
关注:
EventsCrashLoopBackOffImagePullBackOff常见:
flannel 示例:
kubectl get pods -n kube-system
kubectl logs -n kube-system kube-flannel-ds-xxx
date
timedatectl
yum install -y chrony
systemctl enable --now chronyd
kubeadm certs check-expiration
kubeadm reset
iptables -F
ipvsadm --clear
reboot
| 功能 | 命令 |
|---|---|
| 查看 kubelet 日志 | journalctl -u kubelet -f |
| 查看容器运行时 | systemctl status docker |
| 查看 pod | kubectl get pods -A |
| 查看事件 | kubectl get events -A |
| 查看网络 | ip a |
| 查看路由 | ip route |
❌ The connection to the server localhost:8080 was refused
✅ 没配置 kubeconfig:
export KUBECONFIG=/etc/kubernetes/admin.conf
❌ node not found
✅ token 过期:
kubeadm token create --print-join-command
✅ 使用 containerd
✅ 内核升级到 4.x+
✅ 关闭 swap / selinux / firewalld
✅ 使用 kubeadm 官方文档
如果你愿意,可以直接把报错日志贴出来(比如 kubelet / kubeadm init 报错),我可以直接帮你定位到具体原因。