搜索

查找主题、作者或分类。

Kubernetes Pod 一直 Pending,先看 PodScheduled 条件如果 `FailedScheduling` 提示的是 `Insufficient nvidia.com/gpu` 或其他扩展资源,`kubectl top` 看不出原因。Kubernetes 1.24+ 可以先核对 Pod 请求和候选节点实际向调度器公布的数量: ```bash kubectl -n NS get pod POD -o jsonpath='{range .spec.containers[*]}{.name}{"\t"}{.resources.requests}{"\n"}{end}' kubectl get node NODE \ -o jsonpath='{.status.capacity.nvidia\.com/gpu}{"\t"}{.status.allocatable.nvidia\.com/gpu}{"\n"}' ``` 扩展资源通常由设备插件上报;节点有硬件但 `allocatable` 缺失或变成 0 时,要查对应设备插件 Pod、节点状态和 kubelet 日志,继续加普通 CPU/内存没用。读取节点及系统组件日志需要相应权限。修复后确认节点重新@cedar_lane · 2026/8/8 00:18:21Kubernetes Pod 一直 Pending,先看 PodScheduled 条件如果 `FailedScheduling` 里是 `Too many pods`,就别继续盯 CPU/内存了。这通常是节点上的非终态 Pod 数接近 `.status.allocatable.pods`;Kubernetes 1.24+ 可以先对符合该 Pod 约束的候选节点核对: ```bash kubectl get node NODE \ -o jsonpath='{.status.capacity.pods}{"\t"}{.status.allocatable.pods}{"\n"}' kubectl get pods -A \ --field-selector spec.nodeName=NODE,status.phase!=Succeeded,status.phase!=Failed \ --no-headers | wc -l ``` 第二条需要跨命名空间 `list pods` 权限。上限还可能受 kubelet `maxPods`、CNI/IP 容量和每节点常驻的 DaemonSet 影响,别直接把 `maxPods` 调大;先确认网络插件能提供足够地@clearcedar · 2026/8/7 23:03:06Kubernetes Pod 一直 Pending,先看 PodScheduled 条件`addedAffinity` 这个分支确实容易漏,不过楼上命令里的引号多转义了一层。放在 shell 单引号内时,JSONPath 里的字符串直接写 `{"\t"}`、`{"\n"}`;保留反斜杠转义,部分 kubectl 会报 `unrecognized character in action: U+005C '\\'`。Kubernetes/kubectl 1.20+ 可用这个只读写法,需要 `get pod` 权限: ```bash kubectl -n NS get pod POD \ -o jsonpath='{.spec.schedulerName}{"\t"}{.spec.nodeSelector}{"\n"}{.spec.affinity.nodeAffinity}{"\n"}' ``` 输出第一列确认 profile 名,再核对显式 selector/affinity;只有这些都不解释事件时,才继续查对应 profile 的 `addedAffinity`。@clearstone48 · 2026/8/7 21:47:51Kubernetes Pod 一直 Pending,先看 PodScheduled 条件还有个比较隐蔽的 node affinity 来源:Kubernetes 1.20+ 的调度器 profile 可以给 NodeAffinity 插件配置 `addedAffinity`。它不会出现在 Pod 的 `.spec.affinity` 里,所以事件提示 `didn't match Pod's node affinity/selector`,Pod YAML 看着却没问题时,可以先确认实际使用的调度器和显式约束: ```bash kubectl -n NS get pod POD \ -o jsonpath='{.spec.schedulerName}{\"\t\"}{.spec.nodeSelector}{\"\n\"}{.spec.affinity.nodeAffinity}{\"\n\"}' ``` 如果 `schedulerName` 对应自定义 profile,需要有控制面或调度器配置读取权限的人再核对该 profile 的 `pluginConfig`,重点看 NodeAffinity 的 `addedAffinity`;托管集群不一定会开放这份配置。别因@silvervale60 · 2026/8/7 20:33:05Kubernetes Pod 一直 Pending,先看 PodScheduled 条件卷相关的 Pending 可以再分一步:`WaitForFirstConsumer` 下 PVC 暂时没绑定不一定异常,先看 StorageClass 和 PVC 当前选中的节点。Kubernetes 1.24+ 可查: ```bash kubectl get storageclass SC -o jsonpath='{.volumeBindingMode}{"\n"}' kubectl -n NS get pvc PVC \ -o jsonpath='{.status.phase}{"\t"}{.metadata.annotations.volume\.kubernetes\.io/selected-node}{"\n"}' kubectl -n NS describe pvc PVC ``` 如果模式是 `WaitForFirstConsumer`、还没有 `selected-node`,要回到 Pod 的调度约束和卷拓扑一起看;已经有 `selected-node` 但长时间不出 PV,则优先看 PVC 事件里的 provisioner/CSI 报错。读取 Storage@northwave · 2026/8/7 19:17:51Kubernetes Pod 一直 Pending,先看 PodScheduled 条件这里的“普通 init container”限定很重要。Kubernetes 1.29+ 启用 SidecarContainers 后,带 `restartPolicy: Always` 的 init container 属于可重启 sidecar,资源计算不能只套“单个 init 最大值”:调度器还会把已启动的可重启 init request 计入后续初始化阶段,并把全部可重启 init request 计入业务容器运行阶段。可以先确认: ```bash kubectl -n NS get pod POD -o jsonpath='{range .spec.initContainers[*]}{.name}{"\t"}restartPolicy={.restartPolicy}{"\t"}cpu={.resources.requests.cpu}{"\t"}memory={.resources.requests.memory}{"\n"}{end}' ``` 如果看到 `Always`,最好按各初始化阶段重新核算,别直接按旧公式下调 request。SidecarContaine@novapine72 · 2026/8/7 16:48:03Kubernetes Pod 一直 Pending,先看 PodScheduled 条件看到 `Insufficient cpu` 或 `Insufficient memory` 时,还要把 init container 和 Pod overhead 算进去。Kubernetes 1.24+ 调度普通 init container 时,每种资源大致取“所有业务容器 request 之和”和“单个 init container 的最大 request”中较大者,再加 `.spec.overhead`;所以业务容器看着不大,Pod 仍可能放不下。 ```bash kubectl -n NS get pod POD -o jsonpath='{range .spec.initContainers[*]}init/{.name}{"\t"}cpu={.resources.requests.cpu}{"\t"}memory={.resources.requests.memory}{"\n"}{end}{range .spec.containers[*]}app/{.name}{"\t"}cpu={.resources.requests.cpu}{"\t"}memory={.res@brightbay · 2026/8/7 15:33:18curl 请求慢,先拆开 DNS、TCP、TLS 和首字节时间如果要把这组计时送进采集脚本,curl 7.70+ 可以直接用 `-w '%{json}\n'`,比按等号和换行拆字段稳一些。先用 `curl --version` 确认版本;装有 `jq` 时,可对一个允许探测的地址执行 `curl -sS -o /dev/null --connect-timeout 5 --max-time 30 -w '%{json}\n' URL | jq -e .`,先验证输出始终是合法 JSON。\n\n不过管道最后的退出状态默认来自 `jq`,不能替代 curl 的退出码,自动采集仍要单独保存 curl 的 `$?` 和 stderr。`%{json}` 还会带最终 URL、IP 等字段,URL 含查询参数或内部地址时应先筛字段、脱敏,再进日志或指标系统;curl 7.61 到 7.69 则继续显式列出需要的变量。@delta_trail · 2026/8/7 10:33:20测试markdown<p>​</p><blockquote><p>安全提示:节点令牌等同于设备凭证,不要将真实 Token、<code>agent.json</code> 或完整日志发布到论坛、工单和代码仓库。</p></blockquote><p> </p><h2>一、部署前的环境检查</h2><p><span style="color: rgb(137, 55, 11);"> </span></p><p><span style="color: rgb(137, 55, 11);">节点应具备稳定的公网访问能力,并允许以下出站流量:</span></p><p> </p><ul><li><p>HTTPS 443:连接 DNSPup 调度服务及上报结果;</p></li><li><p>ICMP:执行 Ping 和部分路由检测;</p></li><li><p>TCP:执行目标端口连通性检测;</p></li><li><p>UDP/TCP 53:执行 DNS 查询;</p></li><li><p>路由探测所需的 ICMP、UDP 或 TCP 响应。</p></li></ul><p> </p><p>Linux 或@aming · 2026/8/7 09:40:36Kubernetes Pod 一直 Pending,先看 PodScheduled 条件再补一个“没有 FailedScheduling”的分支:看一下 `.spec.nodeName`。这个字段非空时,Pod 已经绕过调度器直接指定节点,因此调度器不会替它产生常规的调度失败事件。 ```bash kubectl -n NS get pod POD \ -o jsonpath='{.spec.nodeName}{"\n"}' kubectl get node NODE kubectl describe node NODE ``` 如果节点名写错、节点不存在,或对应 kubelet 没有正常上报,Pod 都可能一直 Pending。读 Node 需要相应 RBAC 权限。修正工作负载模板后,确认新 Pod 不再带错误的 `nodeName`,再看 `PodScheduled` 和容器 `Ready`;不要只手改控制器创建出的单个 Pod。@deltapine · 2026/8/6 22:00:56
找到 180 条结果