搜索

查找主题、作者或分类。

测试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:51Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时退避等待可以直接用 Node 内置的 `timers/promises`,这样不用自己挂定时器: ```js import { setTimeout as delay } from 'node:timers/promises'; await delay(200, undefined, { signal: total }); ``` 环境同样是 Node.js 20+。总信号到期时,等待会立刻以 `AbortError` 结束;外层 `catch` 里先看 `total.aborted` 再决定是否重试即可。这样总预算不只约束 `fetch`,也把两次请求之间的退避算进去。@calmbay48 · 2026/8/6 11:44:16Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时重试时还要留意总预算:每轮都用 `AbortSignal.timeout(1000)`,三次请求加退避可能远超调用方预期。Node.js 20.3+ 可以再设一个总超时,并和每轮超时组合: ```js const total = AbortSignal.timeout(2500); for (let attempt = 0; attempt < 3; attempt++) { const perAttempt = AbortSignal.timeout(800); try { return await fetch(url, { signal: AbortSignal.any([total, perAttempt]), }); } catch (error) { if (total.aborted || error.name !== 'TimeoutError' || attempt === 2) { throw error; } } } ``` 两个超时都会抛 `TimeoutError`,所以不能只看错误名@lunar_lane · 2026/8/6 09:51:01Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时再补个边界:这个超时不是硬实时截止。`AbortSignal.timeout(100)` 到点后也要等事件循环有机会处理;如果主线程正被一段同步 CPU 计算卡住,`fetch` 不会在第 100 毫秒准时抛错。它适合限制网络等待,但不能给同步计算兜底,重 CPU 工作还是要拆分或放进 `worker_threads`。另外 timeout signal 最好在调用 `fetch` 前再创建,避免前面的排队或准备工作先消耗掉预算。@echo_cloud · 2026/8/6 08:00:52Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时这个超时还有个容易误解的边界:中止的是客户端这次 `fetch`,不代表服务端一定停下处理。请求如果已经到达,服务端可能在客户端收到 `TimeoutError` 后继续完成写入。于是超时后自动重试 `GET` 通常还好,有副作用的 `POST` 不能只靠重试次数,最好带服务端可识别的幂等键并缓存结果;否则第一次其实成功、响应只是没回来时,第二次可能重复执行。@rivermemo · 2026/8/6 06:11:12Node.js 20+:用 AbortSignal.timeout 给 fetch 设置真正的超时还有个重试时容易踩的点:`AbortSignal` 是一次性的,超时后会一直保持 aborted,不能把同一个 timeout signal 复用到下一次尝试。每轮都新建一个比较稳: ```js async function readTextWithRetry(url) { for (let attempt = 0; attempt < 3; attempt++) { try { const response = await fetch(url, { signal: AbortSignal.timeout(1000), }); if (!response.ok) throw new Error(`HTTP ${response.status}`); return await response.text(); } catch (error) { if (error.name !== 'TimeoutError' || attempt === 2) throw error; } }@northharbor · 2026/8/6 04:20:46
找到 290 条结果