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

k8s启动时calico-kube-controllers与coredns组件一直是pending状态

症状:

k8s执行kubectl get po -n kube-system时,以下组件一直>是pending状态:

  • calico-kube-controllers
  • coredns

当执行 kubectl get po -n kube-system 发现 calico-kube-controllerscoredns 一直处于 Pending 状态时,通常有多种可能的原因,下面为你详细分析并给出对应的解决办法。

1. 资源不足

Pending 状态可能是由于节点资源(如 CPU、内存)不足,无法为这些 Pod 分配足够的资源。

检查资源使用情况
kubectl describe nodes

此命令会显示每个节点的资源使用情况,包括已分配和可用的 CPU、内存等。查看是否有节点资源紧张的情况。

解决办法
  • 增加节点资源:如果是物理机,可考虑增加 CPU 核心数、内存等硬件资源;如果是云服务器,可调整实例规格。
  • 清理不必要的 Pod:删除一些不再需要的 Pod 以释放资源。
kubectl delete pod <pod-name> -n <namespace>

2. 网络策略问题

Calico 是一个网络策略和网络插件,网络策略配置不当可能导致 Pod 无法正常调度。

检查 Calico 状态
kubectl get pods -n kube-system -l k8s-app=calico-node

确保 calico-node Pod 正常运行。

[root@hadoop102 bin]# kubectl get pods -n kube-system -l k8s-app=calico-node
NAME                READY   STATUS    RESTARTS        AGE
calico-node-ng2b4   1/1     Running   2 (9m23s ago)   25h
calico-node-qvpfs   1/1     Running   2 (9m23s ago)   25h
calico-node-x6wkd   1/1     Running   2 (9m24s ago)   25h

解决办法
  • 检查 Calico 配置:查看 Calico 的配置文件,确保网络策略没有阻止 calico-kube-controllerscoredns Pod 的通信。
  • 重启 Calico 组件
kubectl delete pod -l k8s-app=calico-node -n kube-system
kubectl delete pod -l k8s-app=calico-kube-controllers -n kube-system

Kubernetes 会自动重新创建这些 Pod。

3. 镜像拉取问题

如果无法从镜像仓库拉取 calico-kube-controllerscoredns 的镜像,Pod 会一直处于 Pending 状态。

检查镜像拉取日志
kubectl describe pod <pod-name> -n kube-system

查看事件部分,是否有镜像拉取失败的信息。

解决办法
  • 检查镜像仓库连接:确保节点可以访问镜像仓库,可尝试手动拉取镜像:
docker pull <image-name>
  • 配置镜像拉取策略:可以尝试修改 Pod 的镜像拉取策略为 IfNotPresent,避免每次都从远程仓库拉取镜像。在 Deployment 或 DaemonSet 中添加如下配置:
spec:
  containers:
  - name: <container-name>
    image: <image-name>
    imagePullPolicy: IfNotPresent

4. 调度问题

Kubernetes 调度器可能由于某些原因无法将 Pod 调度到合适的节点上。

检查调度器日志
kubectl logs -n kube-system <kube-scheduler-pod-name>

查看调度器日志,是否有调度失败的信息。

解决办法
  • 检查节点标签和污点:确保节点的标签和污点配置不会阻止 Pod 调度到这些节点上。可以使用以下命令查看节点标签和污点:
kubectl describe node <node-name>
  • 重启调度器
kubectl delete pod -l component=kube-scheduler -n kube-system

5. 存储问题

如果 Pod 依赖于持久化存储,而存储配置有问题,也可能导致 Pod 处于 Pending 状态。

检查存储配置

查看 calico-kube-controllerscoredns 的 Deployment 或 DaemonSet 中是否有存储相关的配置,如 PersistentVolumeClaim

解决办法
  • 检查存储类和 PVC 状态
kubectl get sc
kubectl get pvc -n kube-system

确保存储类和 PVC 正常工作。如果 PVC 处于 Pending 状态,需要进一步排查存储后端的问题。

相关文章:

  • 《 C++ 点滴漫谈: 三十 》函数参数
  • OpenCV实现视频背景提取
  • Go 语言封装 HTTP 请求的 Curl 工具包
  • 数据分析与AI丨AI Fabric:数据和人工智能架构的未来
  • 实现多语言适配
  • 在线程间共享数据_《C++并发编程》第三章笔记
  • 【Linux系统编程】基本IO函数
  • Gateway路由分发的策略
  • MoonSharp 文档五
  • 练习:关于静态路由,手工汇总,路由黑洞,缺省路由相关
  • 语音视频App协议安全实战:防御伪造/窃听/Deepfake攻击
  • 深度学习分词器char-level实战详解
  • 循环队列概念和结构
  • 决策树的核心思想
  • c语言笔记 函数参数的等价(下)
  • 华为eNSP:2.配置OSPF报文分析和验证
  • Redis 发布订阅模式详解:实现高效的消息通信
  • Redis未授权访问
  • AI-NAS:当存储遇上智能,开启数据管理新纪元
  • 【工控】线扫相机小结 第五篇
  • 世卫大会再次拒绝涉台提案,国台办:民进党当局再遭挫败理所当然
  • 国家主席习近平任免驻外大使
  • 学生靠老干妈下饭、职工餐肉类又多又好?纪委出手整治
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”
  • 福建、广西等地有大暴雨,国家防总启动防汛四级应急响应
  • 广西隆林突发山洪,致3人遇难1人失联