← 返回文章列表
Kubernetes 1.28.2 集群部署问题总结
K8s 1.28.2 集群部署过程中遇到的问题及解决方案
6 分钟阅读
字号
Kubernetes 1.28.2 集群部署问题总结
日期:2026-03-27 部署环境:VMware NAT 模式 + CentOS 7 + Containerd + Flannel
问题概览
| # | 问题 | 根因 | 解决难度 |
|---|---|---|---|
| 1 | Worker 节点 IP 冲突 | DHCP 池范围内配置了静态 IP | ⭐ |
| 2 | Worker 节点网络不通 | ens33 网卡 DOWN 且未配置静态 IP | ⭐ |
| 3 | kubelet 无法启动 | kubeadm init 未成功完成 | ⭐⭐ |
| 4 | Flannel 镜像拉取失败 | 无法访问 docker.io | ⭐⭐ |
| 5 | Flannel RBAC 错误 | namespace 配置不匹配 | ⭐⭐ |
| 6 | CoreDNS ContainerCreating | containerd 缓存损坏 | ⭐⭐⭐ |
| 7 | containerd 超时卡死 | 内存不足 + 资源泄漏 | ⭐⭐⭐ |
问题详解
问题 1:Worker2 IP 在 DHCP 池范围内
现象:
- Worker2 配置了
192.168.157.128 - 但 NAT 模式下 DHCP 池是
192.168.157.128-254 - 导致 IP 冲突,节点时通时不通
根因:对 VMware NAT 模式 DHCP 池理解错误
解决:
# 修改 ifcfg-ens33
sed -i 's/IPADDR=192.168.157.128/IPADDR=192.168.157.103/' /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network预防:静态 IP 必须在 DHCP 池外,范围 .2-.127
问题 2:Worker1 ens33 网卡 DOWN
现象:
- ping 不通 worker1
- SSH 连接超时
- 虚拟机控制台显示 ens33 状态为 DOWN
根因:NetworkManager 未管理网卡,且 ONBOOT=no
解决:
ip link set ens33 up
# 然后配置静态 IP 并确保 ONBOOT=yes预防:部署前检查 ifcfg-ens33 确保 ONBOOT=yes
问题 3:kubelet config.yaml 不存在
现象:
failed to load kubelet config file, path: /var/lib/kubelet/config.yaml根因:kubeadm init 被中断或失败,/var/lib/kubelet 目录为空
解决:
rm -rf /etc/kubernetes/ /var/lib/kubelet/
kubeadm init --config=/tmp/kubeadm-init.yaml预防:确保 init 过程完整完成,中途不要中断
问题 4:Flannel 镜像无法拉取
现象:
Failed to pull image "docker.io/flannel/flannel-cni-plugin:v1.2.0":
connect: connection refused根因:VMware NAT 网络环境下无法访问 docker.io
解决:使用国内镜像
# 使用阿里云镜像
image: registry.cn-hangzhou.aliyuncs.com/alvinos/flanned:v0.13.1-rc1注意:这个镜像仓库可能不稳定,如遇问题可尝试其他镜像源
问题 5:Flannel RBAC 权限错误
现象:
error retrieving pod spec for 'kube-system/kube-flannel-ds-xxx':
User "system:serviceaccount:kube-flannel:flannel" cannot get resource "pods"根因:最初部署时使用了官方 YAML,ServiceAccount 在 kube-flannel namespace,但 DaemonSet 在 kube-system
解决:使用统一的 YAML,所有组件在 kube-system
metadata:
name: flannel
namespace: kube-system # 必须统一
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-system # 必须统一问题 6:CoreDNS 持续 ContainerCreating
现象:
- CoreDNS pods 一直处于 ContainerCreating 状态
- kubelet 日志显示
RunPodSandbox failed: DeadlineExceeded
根因:
- containerd 缓存损坏
- sandbox 镜像未正确加载
- 多次失败的容器创建导致资源泄漏
解决:
# 清理 containerd 状态
systemctl stop kubelet containerd
rm -rf /var/lib/containerd/* /run/containerd/*
systemctl start containerd
# 重新拉取必要镜像
ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/pause:3.9
ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
# 重启 kubelet
systemctl start kubelet问题 7:containerd 超时卡死
现象:
- containerd 日志大量
timed out错误 - kubelet 日志
StopPodSandbox failed: DeadlineExceeded - 内存使用率极高(1.8GB 主机,containerd 占用 300MB+)
根因:
- 虚拟机内存分配不足(建议 2GB+)
- 频繁的容器创建/删除导致 shim 进程堆积
- containerd 缓存目录未清理
解决:
# 停止所有服务
systemctl stop kubelet containerd
# 清理所有缓存
rm -rf /var/lib/containerd/* /run/containerd/* /var/lib/kubelet/pods/*
# 清理残留的 shim 进程
ps aux | grep containerd-shim | grep -v grep | awk '{print $2}' | xargs -r kill
# 重启服务
systemctl start containerd
sleep 3
systemctl start kubelet预防:
- 虚拟机分配至少 2GB 内存(建议 4GB)
- 避免频繁重建集群
- 重建前先清理旧数据
虚拟机配置检查清单
部署前检查每台虚拟机的 VMX 配置:
# 确认网络模式
ethernet0.connectionType = "nat" # 必须是 nat
# 确认 MAC 地址(用于识别虚拟机)
ethernet0.generatedAddress = "00:0c:29:86:31:c3"检查虚拟机内部网络配置:
# 检查 IP 配置
cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep -E "BOOTPROTO|ONBOOT|IPADDR"
# 检查网络连通性
ping 192.168.157.2 # 网关
ping 192.168.157.101 # master
# 检查 ip_forward
cat /proc/sys/net/ipv4/ip_forward # 应为 1部署流程最佳实践
-
先配置网络,再安装软件
- 确保静态 IP 在 DHCP 池外
- 确保
ONBOOT=yes - 确保
ip_forward=1
-
初始化集群前
- 清理旧数据:
rm -rf /etc/kubernetes/ /var/lib/kubelet/ - 确保 containerd 正常运行
- 预拉取必要镜像
- 清理旧数据:
-
加入节点前
- 确保
ip_forward=1且永久生效 - 先
kubeadm reset清理旧配置 - 清理 iptables/IPVS
- 确保
-
遇到问题时
- 先检查服务状态:
systemctl status kubelet containerd - 再检查日志:
journalctl -u kubelet --no-pager -n 50 - 最后考虑清理重建
- 先检查服务状态:
性能优化建议
- 内存分配:Master 建议 4GB+,Worker 建议 2GB+
- CPU:Master 建议 2核+,Worker 建议 2核+
- 磁盘:建议 40GB+ SSD
- 网络:NAT 模式足够学习使用,生产环境建议桥接
相关文档
分享