首页主机资讯centos部署k8s的常见问题及解决方法

centos部署k8s的常见问题及解决方法

时间2025-11-10 09:27:03发布访客分类主机资讯浏览1287
导读:CentOS部署K8s常见问题及解决方法 1. 节点无法加入集群 问题描述:Worker节点执行kubeadm join后,Master节点kubectl get nodes显示节点状态为NotReady,或节点无法加入。 可能原因:网络...

CentOS部署K8s常见问题及解决方法

1. 节点无法加入集群

  • 问题描述:Worker节点执行kubeadm join后,Master节点kubectl get nodes显示节点状态为NotReady,或节点无法加入。
  • 可能原因:网络插件未正确安装、防火墙/安全组阻止通信、节点证书不匹配、kubeadm join命令参数错误(如token过期)。
  • 解决方法
    • 检查网络插件状态:确保网络插件(如Flannel、Calico)已正确安装且Pod运行正常(kubectl get pods -n kube-system)。
    • 开放必要端口:关闭防火墙(systemctl stop firewalld & & systemctl disable firewalld)或放行K8s集群端口(如6443、10250、10255)。
    • 验证证书:检查Master节点/etc/kubernetes/pki下的证书是否有效,若证书过期需重新生成。
    • 重新生成join命令:Master节点执行kubeadm token create --print-join-command获取新命令,在Worker节点执行。

2. Pod一直处于ContainerCreating状态

  • 问题描述:Pod状态卡在ContainerCreating,无法进入Running状态。
  • 可能原因:镜像拉取失败(如镜像不存在、网络问题)、存储卷挂载失败(如NFS未挂载、权限不足)、容器运行时(Docker)异常。
  • 解决方法
    • 查看Pod详情:kubectl describe pod < pod-name> ,重点检查Events部分(如Failed to pull imageMountVolume failed)。
    • 手动拉取镜像:若镜像拉取失败,手动拉取并标记(如docker pull coredns:1.8.0 & & docker tag coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:1.8.0)。
    • 检查存储卷:确认存储服务(如NFS)运行正常,挂载点存在且权限正确(chmod 777 /mnt/nfs)。
    • 重启容器运行时:systemctl restart docker,并检查Docker日志(journalctl -u docker)。

3. 网络插件未准备就绪

  • 问题描述kubectl get nodes显示节点状态为NotReady,或kubectl get pods -n kube-system中网络插件Pod(如Flannel的kube-flannel-ds)状态为PendingCrashLoopBackOff
  • 可能原因:CNI插件未安装、内核参数未配置、网络插件与K8s版本不兼容。
  • 解决方法
    • 安装CNI插件:以Flannel为例,执行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生效。
    • 检查版本兼容性:确保网络插件版本与K8s版本匹配(如Flannel v0.18.0支持K8s v1.27+)。

4. Pod状态为ErrImagePull

  • 问题描述:Pod状态为ErrImagePull,无法拉取镜像。
  • 可能原因:镜像名称或标签错误、镜像仓库地址不可达、镜像拉取权限不足(如私有仓库未配置imagePullSecrets)。
  • 解决方法
    • 检查镜像信息:确认image字段名称(如nginx:1.25而非nginx)和标签正确。
    • 测试镜像拉取:在Node节点上手动执行docker pull < image-name> ,验证是否能拉取。
    • 配置私有仓库权限:若使用私有仓库,创建imagePullSecretskubectl create secret docker-registry my-secret --docker-server=< registry-url> --docker-username=< user> --docker-password=< pass> ),并在Pod配置中引用。

5. 服务无法访问

  • 问题描述:Service创建后,无法通过ClusterIPNodePort访问(如curl < cluster-ip> :< port> 超时)。
  • 可能原因:Service类型配置错误(如ClusterIP未暴露到外网)、端口映射错误(targetPort与容器端口不一致)、CoreDNS解析失败。
  • 解决方法
    • 检查Service配置:kubectl describe service < service-name> ,确认type(如NodePort需指定nodePort范围30000-32767)、portstargetPort与容器端口一致)。
    • 测试端口连通性:在Node节点上执行curl < node-ip> :< node-port> ,验证是否能访问。
    • 检查CoreDNS: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)。

6. etcd服务异常

  • 问题描述:etcd服务无法启动(systemctl status etcd显示failed),或Master节点无法正常调度Pod。
  • 可能原因:etcd配置文件错误(如/etc/etcd/etcd.confinitial-cluster配置错误)、数据目录权限问题、磁盘空间不足。
  • 解决方法
    • 检查etcd配置:确认etcd.confinitial-cluster(如etcd0=http://192.168.1.100:2380)、initial-cluster-statenewexisting)、data-dir(如/var/lib/etcd)配置正确。
    • 检查数据目录权限:chown -R etcd:etcd /var/lib/etcd
    • 清理磁盘空间:df -h检查磁盘使用率,删除无用文件(如/var/log下的旧日志)。

7. 内核参数配置错误

  • 问题描述:初始化Master节点时kubeadm init报错(如bridge-nf-call-iptables未设置为1),或Pod网络不通。
  • 可能原因:未开启IP转发、net.bridge.bridge-nf-call-iptables未设置为1、未加载br_netfilter模块。
  • 解决方法
    • 开启IP转发:添加/etc/sysctl.d/k8s.conf文件,内容为net.ipv4.ip_forward = 1,执行sysctl -p生效。
    • 设置bridge参数:echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    • 加载br_netfilter模块:modprobe br_netfilter,并添加到/etc/modules-load.d/k8s.conf(永久生效)。

8. Docker与K8s cgroup驱动不一致

  • 问题描述:Pod无法调度(kubelet日志显示cgroup driver mismatch),或Docker服务启动失败。
  • 可能原因:Docker的cgroup-driver(如systemd)与K8s的cgroup-driver(如cgroupfs)不一致。
  • 解决方法
    • 修改Docker配置:编辑/etc/docker/daemon.json,添加"exec-opts": ["native.cgroupdriver=systemd"],执行systemctl daemon-reload & & systemctl restart docker
    • 修改K8s组件配置:编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,添加--cgroup-driver=systemd,执行systemctl daemon-reload & & systemctl restart kubelet

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos部署k8s的常见问题及解决方法
本文地址: https://pptw.com/jishu/745950.html
怎样评估centos上k8s部署的成本 PyTorch在CentOS上有哪些应用场景

游客 回复需填写必要信息