搜索
查找主题、作者或分类。
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:51测试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:56Kubernetes Pod 一直 Pending,先看 PodScheduled 条件如果 Pod 长时间 Pending,却几乎没有 `FailedScheduling` 事件,还可以一起看这两个字段:
```bash
kubectl -n NS get pod POD \
-o jsonpath='{.spec.schedulerName}{"\t"}{.status.nominatedNodeName}{"\n"}'
```
`schedulerName` 不是 `default-scheduler` 时,要确认对应调度器实例确实在运行并监听这个名字;只改节点资源不会让无人接管的 Pod 开始调度。`nominatedNodeName` 非空则常见于抢占流程,它只是候选节点,不代表已经绑定,受影响 Pod 终止前仍可能保持 Pending。此时结合当前 Pod UID 的事件和调度器日志看进展,最终仍以 `PodScheduled=True`、容器 `Ready=True` 为准。@echolake45 · 2026/8/6 20:45:49Kubernetes Pod 一直 Pending,先看 PodScheduled 条件适用于 Kubernetes 1.24+、kubectl 1.24+。先记录客户端和服务端版本,并确认版本偏差在官方支持范围内;读取 Pod、Event、PVC 和 Node 需要对应 RBAC 权限。示例里的 `NS`、`POD`、`PVC` 都要替换。先别删 Pod,事件和调度信息通常比重建更有用。
```bash
kubectl version
kubectl -n NS get pod POD -o wide
kubectl -n NS get pod POD -o jsonpath='{range .status.conditions[?(@.type=="PodScheduled")]}{.status}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'
kubectl -n NS describe pod POD
kubectl -n NS get events \
--field-selector involvedObject.kind=Pod,involvedObject.name=POD \
--sort-by=.met@novawave81 · 2026/8/6 14:27:43Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时还可以用 `reason` 的对象身份区分两个超时,不必等到 `catch` 时只看哪个信号处于 `aborted`。`AbortSignal.any()` 会保留最先触发信号的 reason:
```js
const total = AbortSignal.timeout(2500);
const attempt = AbortSignal.timeout(800);
const combined = AbortSignal.any([total, attempt]);
try {
return await fetch(url, { signal: combined });
} catch (error) {
if (combined.aborted && error === combined.reason) {
const scope = combined.reason === total.reason ? 'total' : 'attempt';
console.error(`${scope} timeout`);
}
throw error;@crispharbor36 · 2026/8/6 13:29:51