当前位置: 首页 > news >正文

搭建 k8s 集群时通常会遇到哪些常见问题?

搭建 K8s 集群时最常见的问题集中在网络组件、证书配置、节点加入和镜像拉取这几个环节,优先检查 CNI 插件状态和防火墙规则能快速定位大部分故障。

先说结论:集群搭建问题多数与网络配置、证书有效期和节点认证相关,按顺序排查可节省大量时间。

  • 先确认:CNI 插件是否正常、防火墙是否放行必要端口
  • 先处理:证书过期重新生成、token 失效刷新加入命令
  • 再验证:Pod 状态、节点就绪情况、服务连通性

命令速用版

以下是排查时常用的高频命令,可直接复制执行:

kubectl get pods -n kube-system -o wide
kubectl get nodes
kubectl describe pod <pod-name> -n kube-system
kubectl logs <pod-name> -n kube-system
kubeadm token create `--print-join-command` `--ttl`=0
systemctl status kubelet
journalctl -u kubelet -f

为什么会这样

K8s 集群依赖多个组件协同工作,任何一个环节配置不当都会导致集群不可用。网络插件负责 Pod 间通信,如果 CNI 未正确初始化,Pod 就无法获取 IP 地址。证书用于组件间安全通信,过期后各组件无法相互认证。节点加入需要有效的 token,超过有效期后新节点无法注册到控制平面。镜像拉取失败通常是因为国内网络访问官方仓库受限,需要配置镜像加速器。

分步处理

第一步:检查核心组件状态

执行kubectl get pods -n kube-system查看系统组件,重点关注 coredns、kube-proxy 和 CNI 插件(如 calico、flannel)的状态。如果显示 CrashLoopBackOff 或 Pending,说明组件启动失败。

第二步:排查网络插件问题

如果 CNI 插件状态异常,先检查节点防火墙规则。执行以下命令临时清理规则:

systemctl stop kubelet
systemctl stop docker
iptables `--flush`
iptables -t nat `--flush`
systemctl start kubelet
systemctl start docker

注意这只是临时方案,生产环境应配置正确的防火墙规则而非直接清空。

第三步:处理节点加入失败

如果添加工作节点时提示 token 过期,需要重新生成加入命令。集群注册 token 默认有效期为 24 小时,超时后需执行:

kubeadm token create `--print-join-command` `--ttl`=0

将输出的命令在工作节点执行即可完成加入。

第四步:解决 kubectl 连接被拒绝

如果执行 kubectl 时报"The connection to the server localhost:8080 was refused",需要将主节点的/etc/kubernetes/admin.conf文件拷贝到~/.kube/config,并设置正确的权限。

第五步:处理镜像拉取失败

如果 Pod 因镜像拉取失败无法启动,检查 Docker 配置中的镜像源。国内环境建议配置镜像加速器,修改/etc/docker/daemon.json添加 registry 镜像地址。

怎么验证是否生效

执行kubectl get nodes确认所有节点状态为 Ready。执行kubectl get pods -n kube-system确认所有系统组件状态为 Running。创建测试 Pod 验证网络连通性:

kubectl run test-pod `--image`=nginx `--restart`=Never
kubectl exec test-pod -- curl http://kubernetes.default

检查核心组件日志确认无持续报错:kubectl logs coredns-xxx -n kube-system

常见坑

SELinux 未关闭会导致容器无法访问宿主机文件系统,某些场景下需要设置为 disabled 状态,执行setenforce 0临时关闭或修改/etc/selinux/config永久关闭。

Swap 未关闭会导致 kubelet 启动失败,K8s 默认要求关闭 swap 分区,执行swapoff -a并在/etc/fstab中注释掉 swap 挂载项。

LoadBalancer 类型 Service 在裸金属环境无法自动创建,需要云提供商支持或手动部署 MetalLB 等负载均衡器。

Pod 网段与办公网段冲突时,外部访问会出现路由问题,私有化部署需提前规划网络地址避免重叠。

参考来源

  • K8s 集群常见问题及解决方案 - 网络问题、证书问题、服务访问失败等分类说明
  • k8s 集群部分常见问题处理 - Coredns CrashLoopBackOff、token 过期、kubectl 连接拒绝等具体案例
  • kubernetes 集群搭建常见问题及处理 - 腾讯云开发者社区,镜像拉取失败解决方案
  • K8S 常见问题汇总 - Pod 启动异常、节点故障、网络连接问题等分类整理
  • k8s 常见集群网络组件问题定位与解决实战 - 阿里云开发者社区,SELinux 导致权限问题案例
  • k8s 集群故障案例分析 - 资源限制、日志丢失等生产环境故障

原文链接:https://www.zjcp.cc/ask/10451.html

http://www.jsqmd.com/news/780740/

相关文章:

  • CL4R1T4S:基于大语言模型的智能代码审查助手实战指南
  • 保姆级教程:用R语言复现HIV药物经济学Markov模型(附完整代码与数据)
  • 项目介绍 MATLAB实现基于BAG-LSTM 装袋集成(BAG)结合长短期记忆网络(LSTM)进行股票价格预测(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励
  • Qwik 首屏加载优化:代码分割、懒加载与预加载完整方案
  • Keil调试STM32报‘Not a genuine ST Device’?别慌,两步搞定非官方ST-LINK的警告
  • Rust 高性能代码格式化工具 bfc:设计原理与工程实践
  • 巧妙运用访问者模式:解决复杂对象结构遍历与操作难题
  • 保姆级教程:用IDA Pro和IL2CppDumper搞定Unity IL2CPP游戏的逆向修改(附完整工具链)
  • 开源音乐技能库OpenClaw-SongSee:音频识别与元数据自动化处理指南
  • macOS原生AI客户端macai:整合ChatGPT、Claude、Ollama等,打造统一高效桌面工作流
  • Kotlin 内部机制:内存模型、垃圾回收与并发原语全解析
  • Windows光标高亮工具cursor-light:原理、配置与开发效率优化实践
  • 为Godot引擎配置Catppuccin主题:提升开发体验的完整指南
  • 结构化代码审查实践:基于code-review-cn规范提升团队代码质量
  • 新能源汽车政策悖论:试点城市能源消耗反增的技术解析与应对
  • 别只盯着工业了!聊聊激光那些‘不务正业’的酷应用:从果蝇思维控制到个性化陶瓷雕刻
  • 筑牢营区智能防控底座 三维重构定位助力智慧军营建设技术白皮书
  • 基于Claude模型构建模块化AI技能库:架构设计与工程实践
  • PostgreSQL 性能调优:索引设计、慢查询分析与千万级数据实战
  • SpringBoot实战:快速构建企业级应用的完整指南
  • 香蕉和GPT Image之外的第3条路:华人15人团队造出AI生图黑马
  • Shell-AI:用自然语言驱动命令行,提升开发与运维效率
  • 自动化运维进阶:脚本自动化执行平台的构建与实践
  • Chat2DB:AI增强的数据库客户端如何革新开发者数据交互体验
  • Ubuntu20.04 + CUDA 11.3 环境,保姆级安装TensorRT 8.2.5.1全记录(含PyTorch 1.12.0适配)
  • Transformer在基础算术中的挑战与优化实践
  • Streamlit部署避坑指南:从本地localhost到公网可访问的完整流程(Heroku/Streamlit Cloud)
  • ARM GICv5虚拟化架构与中断路由技术解析
  • 2026年靠谱的伸缩遮阳棚雨篷多家厂家对比分析 - 行业平台推荐
  • 基于RAG与向量数据库的AI知识库构建:从原理到实践