温馨提示×

centos k8s安装常见问题有哪些

小樊
36
2025-12-27 13:30:39
栏目: 智能运维

CentOS 上安装 Kubernetes 的常见问题与排查要点

一 环境预检与系统配置

  • 资源与系统基线:至少准备2 核 CPU、2GB 内存、20GB 磁盘,节点间网络互通;操作系统建议使用CentOS 7/8,内核建议≥3.10。基础组件安装包括kubeadm/kubelet/kubectl
  • 时间与 DNS:节点间时间同步是常见前提,建议使用 NTP/chrony 同步时间,避免因时间漂移导致证书或组件异常。
  • 交换分区:Kubernetes 要求禁用 swap,执行 swapoff -a 并在 /etc/fstab 中注释 swap 行,否则 kubelet 可能异常。
  • SELinux:常见做法是临时 setenforce 0 并在 /etc/selinux/config 中设为 SELINUX=permissive/disabled;生产环境可改为配置 SELinux 策略以兼顾安全与兼容。
  • 内核与网络参数:开启IP 转发br_netfilter(如 net.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1),并加载 br_netfilter 模块,否则 Pod 网络与跨节点通信会受影响。
  • 防火墙与端口:需确保6443、10250、10251、10252 等端口在节点间放通;如使用 firewalld,可按需将接口加入 trusted 区域或显式放行端口。

二 容器运行时与镜像拉取

  • 运行时选择与启动:常见运行时为 Docker/containerd。若使用 containerd,遇到 “CRI v1 runtime API is not implemented for endpoint unix:///run/containerd/containerd.sock” 等错误,需确认 containerd 已启动并开机自启systemctl status/start/enable containerd)。
  • CRI 与 kubelet 配置:确认 kubelet 使用正确的 CRI 套接字(如 /run/containerd/containerd.sock),并与容器运行时版本匹配。
  • 镜像拉取问题:国内环境常因网络导致 gcr.io 等镜像拉取失败,可使用国内镜像源/私有仓库;对 Docker 可配置 registry-mirrors 并建议将 cgroup driver 设为 systemd,然后重启服务生效。
  • 镜像版本与一致性:初始化时可通过 --image-repository 指定镜像仓库;确保所有节点拉取的组件镜像版本一致,避免版本错配。

三 初始化与网络插件

  • 初始化参数:执行 kubeadm init 时需根据所选 CNI 插件设置正确的 Pod CIDR,例如 Flannel 常用 10.244.0.0/16Calico 常用 192.168.0.0/16;错误的 CIDR 会导致 Pod 无法获取 IP 或跨节点不通。
  • kubeconfig 配置:初始化完成后,复制 /etc/kubernetes/admin.conf$HOME/.kube/config 并修正权限,确保 kubectl 可用。
  • CNI 插件故障排查:
    • Calico:若 Pod 报 “MountVolume.SetUp failed for volume ‘bpffs’”,需升级内核至 ≥4.4,并确保 /sys/fs/bpf 存在且为目录。
    • Flannel:若提示 “plugin flannel does not support config version”,在 /etc/cni/net.d/10-flannel.conflist 中添加 "cniVersion": "0.2.0"
    • 节点无法 ping 通 Pod IP:检查 IP 转发br_netfilter 是否开启,确认 CNI 配置与 Pod CIDR 一致。
  • 验证:部署网络插件后,使用 kubectl get nodeskubectl get pods -A 检查节点 Ready 与系统 Pod Running

四 组件故障与服务可达

  • kubelet 无法启动或频繁重启:通过 journalctl -u kubelet -f 查看具体错误;常见原因包括配置错误、权限不足、CRI 不可用、磁盘/内存压力等,按日志逐项修复后重启 kubelet。
  • etcd 异常:检查 etcd 日志与节点间网络连通性,使用 etcdctl member listetcdctl endpoint health 排查成员与健康状况。
  • 控制面组件与端口:确认 kube-apiserver、kube-controller-manager、kube-scheduler 等组件运行正常并监听6443/10251/10252 等端口;必要时查看对应服务日志定位启动失败原因。
  • 服务访问与证书:出现 Service 访问失败证书不被识别 时,优先检查 Service/EndpointsNodePort/Ingress 配置与证书有效期/信任链;必要时更新证书或重建 Service 端口映射。

五 快速排查清单

  • 基础检查:kubectl get nodeskubectl get pods -Akubectl describe pod <pod> -n <ns>kubectl logs <pod> -n <ns>kubectl get events -A,快速定位 Pending/CrashLoopBackOff/ImagePullBackOff 等状态的根因。
  • 系统状态:free -mdf -htop,确认资源充足timedatectl status 检查时间同步systemctl status kubelet containerd docker 确认关键服务运行
  • 网络连通与端口:ping/ss -lntp 检查节点互通与端口开放ip a/routesysctl -p 检查网卡、路由与内核参数firewall-cmd --list-all 或云上安全组规则核对。
  • 日志聚焦:journalctl -u kubelet -fjournalctl -u etcd -fjournalctl -u kube-apiserver -f,从组件日志直接定位初始化、证书、网络与存储相关错误。

0