← 返回文章列表

Kubernetes 1.28.2 集群部署问题总结

K8s 1.28.2 集群部署过程中遇到的问题及解决方案

6 分钟阅读
字号

Kubernetes 1.28.2 集群部署问题总结

日期:2026-03-27 部署环境:VMware NAT 模式 + CentOS 7 + Containerd + Flannel

问题概览

#问题根因解决难度
1Worker 节点 IP 冲突DHCP 池范围内配置了静态 IP
2Worker 节点网络不通ens33 网卡 DOWN 且未配置静态 IP
3kubelet 无法启动kubeadm init 未成功完成⭐⭐
4Flannel 镜像拉取失败无法访问 docker.io⭐⭐
5Flannel RBAC 错误namespace 配置不匹配⭐⭐
6CoreDNS ContainerCreatingcontainerd 缓存损坏⭐⭐⭐
7containerd 超时卡死内存不足 + 资源泄漏⭐⭐⭐

问题详解

问题 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

根因

  1. containerd 缓存损坏
  2. sandbox 镜像未正确加载
  3. 多次失败的容器创建导致资源泄漏

解决

# 清理 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+)

根因

  1. 虚拟机内存分配不足(建议 2GB+)
  2. 频繁的容器创建/删除导致 shim 进程堆积
  3. 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

预防

  1. 虚拟机分配至少 2GB 内存(建议 4GB)
  2. 避免频繁重建集群
  3. 重建前先清理旧数据

虚拟机配置检查清单

部署前检查每台虚拟机的 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

部署流程最佳实践

  1. 先配置网络,再安装软件

    • 确保静态 IP 在 DHCP 池外
    • 确保 ONBOOT=yes
    • 确保 ip_forward=1
  2. 初始化集群前

    • 清理旧数据:rm -rf /etc/kubernetes/ /var/lib/kubelet/
    • 确保 containerd 正常运行
    • 预拉取必要镜像
  3. 加入节点前

    • 确保 ip_forward=1 且永久生效
    • kubeadm reset 清理旧配置
    • 清理 iptables/IPVS
  4. 遇到问题时

    • 先检查服务状态:systemctl status kubelet containerd
    • 再检查日志:journalctl -u kubelet --no-pager -n 50
    • 最后考虑清理重建

性能优化建议

  1. 内存分配:Master 建议 4GB+,Worker 建议 2GB+
  2. CPU:Master 建议 2核+,Worker 建议 2核+
  3. 磁盘:建议 40GB+ SSD
  4. 网络:NAT 模式足够学习使用,生产环境建议桥接

相关文档

分享

// RELATED_POSTS

0%