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

发布于:2025-03-12 ⋅ 阅读:(9) ⋅ 点赞:(0)

症状:

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 状态,需要进一步排查存储后端的问题。


网站公告

今日签到

点亮在社区的每一天
去签到