CentOS部署K8s常见问题及解决方法
kubeadm join后,Master节点kubectl get nodes显示节点状态为NotReady,或节点无法加入。kubeadm join命令参数错误(如token过期)。kubectl get pods -n kube-system)。systemctl stop firewalld && systemctl disable firewalld)或放行K8s集群端口(如6443、10250、10255)。/etc/kubernetes/pki下的证书是否有效,若证书过期需重新生成。kubeadm token create --print-join-command获取新命令,在Worker节点执行。ContainerCreating,无法进入Running状态。kubectl describe pod <pod-name>,重点检查Events部分(如Failed to pull image、MountVolume failed)。docker pull coredns:1.8.0 && docker tag coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:1.8.0)。chmod 777 /mnt/nfs)。systemctl restart docker,并检查Docker日志(journalctl -u docker)。kubectl get nodes显示节点状态为NotReady,或kubectl get pods -n kube-system中网络插件Pod(如Flannel的kube-flannel-ds)状态为Pending或CrashLoopBackOff。kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml。/etc/sysctl.d/k8s.conf文件,内容为net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1,然后执行sysctl -p生效。ErrImagePull,无法拉取镜像。imagePullSecrets)。image字段名称(如nginx:1.25而非nginx)和标签正确。docker pull <image-name>,验证是否能拉取。imagePullSecrets(kubectl create secret docker-registry my-secret --docker-server=<registry-url> --docker-username=<user> --docker-password=<pass>),并在Pod配置中引用。ClusterIP或NodePort访问(如curl <cluster-ip>:<port>超时)。ClusterIP未暴露到外网)、端口映射错误(targetPort与容器端口不一致)、CoreDNS解析失败。kubectl describe service <service-name>,确认type(如NodePort需指定nodePort范围30000-32767)、ports(targetPort与容器端口一致)。curl <node-ip>:<node-port>,验证是否能访问。kubectl get pods -n kube-system -l k8s-app=kube-dns,若CoreDNS异常,修改coredns ConfigMap(kubectl edit configmap coredns -n kube-system),将forward指向可用DNS(如8.8.8.8),并重启CoreDNS Pods(kubectl delete pod -l k8s-app=kube-dns -n kube-system)。systemctl status etcd显示failed),或Master节点无法正常调度Pod。/etc/etcd/etcd.conf中initial-cluster配置错误)、数据目录权限问题、磁盘空间不足。etcd.conf中initial-cluster(如etcd0=http://192.168.1.100:2380)、initial-cluster-state(new或existing)、data-dir(如/var/lib/etcd)配置正确。chown -R etcd:etcd /var/lib/etcd。df -h检查磁盘使用率,删除无用文件(如/var/log下的旧日志)。kubeadm init报错(如bridge-nf-call-iptables未设置为1),或Pod网络不通。net.bridge.bridge-nf-call-iptables未设置为1、未加载br_netfilter模块。/etc/sysctl.d/k8s.conf文件,内容为net.ipv4.ip_forward = 1,执行sysctl -p生效。echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables。br_netfilter模块:modprobe br_netfilter,并添加到/etc/modules-load.d/k8s.conf(永久生效)。kubelet日志显示cgroup driver mismatch),或Docker服务启动失败。cgroup-driver(如systemd)与K8s的cgroup-driver(如cgroupfs)不一致。/etc/docker/daemon.json,添加"exec-opts": ["native.cgroupdriver=systemd"],执行systemctl daemon-reload && systemctl restart docker。/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,添加--cgroup-driver=systemd,执行systemctl daemon-reload && systemctl restart kubelet。