标签: #kubernetes
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 54 篇
三行配置文件让 4 张 GPU 死了一周 — containerd drop-in 合并的真相
节点不再广告 GPU。配置文件里 nvidia 运行时明明写得好好的,containerd config dump 里却没有。真凶是一周前加进去的三行 registry 配置,原因在于 containerd 的 imports 合并不是按字段合并,而是按插件整块替换。我把两次误诊的过程,以及最后给出答案的那个实验,原样记在这里。
2026-08-26 · 16 分钟阅读 #kubernetes#containerd#gpu#nvidia#troubleshooting用家里的服务器搭一个实操型学习平台 — 如何把 Kubernetes 塞进没有特权的 Pod 里
学员按下按钮,专属容器随即启动,在浏览器终端里操作真实的 Linux shell,每一步点击评分后由服务器检查 Pod 内的实际状态来判定通过与否 — 这是把这样一个学习平台搭在家里 7 节点 Kubernetes 集群之上的记录。最难的问题不是功能,而是隔离。既然是实操,就必须把 root 交给学员,但这个 root 绝不能跑到家庭网络里去。解法是三层:把 Cilium 网络策略拆成按实验区分的三档配置,Linux capabilit
2026-08-20 · 22 分钟阅读 #kubernetes#cilium#security#homelab#kwokLabHub — 我做了一个在浏览器里操作真实服务器来学习的实操平台
有些东西光靠读是学不会的。连上服务器敲命令、敲错、再弄清楚为什么错了 — 这个过程没有任何替代办法。LabHub 就是把这个过程搬进浏览器里的学习平台。点下开始实验,专属的 Linux 容器立刻启动,用浏览器终端连上去解题,每一步由服务器检查实际状态并告诉你是否通过。里面有学习路径 12 条、课程 73 门、实验 261 个共 2058 步、测验 1876 题、理论 319 篇。从 IT 基础和 Linux 起步,一路延伸到容器、Kub
2026-08-20 · 10 分钟阅读 #labhub#kubernetes#devops#education#hands-on本地轻量级 Kubernetes 选型标准 —— 用数据存储和合规要求来区分 k3s、k0s、RKE2
本文不罗列功能清单,而是只挑出真正决定选型的那几条轴线,来比较 k3s、k0s、RKE2。第一条轴线是数据存储:用 SQLite 起步就没法扩展服务器节点,内置 etcd 要求奇数节点,外部数据存储又多了一样要运维的东西。第二条是默认打包了什么、以及日后剥离它的成本;第三条是单一二进制和静态 Pod 部署方式的差异;第四条是 RKE2 存在的理由 —— CIS 配置文件与 FIPS 支持,到底是谁真正需要。最后把所有轴线汇总成一张表,并
2026-07-31 · 24 分钟阅读 #kubernetes#k3s#k0s#rke2#on-premisek0s 离线安装与 k0sctl 自动化 —— 从制作镜像包到多节点升级
本文按命令逐条整理在没有互联网路径的离线网络里搭建并运维 k0s 集群的流程。内容包括用 k0s airgap list-images 和 bundle-artifacts 制作镜像包的三种方法、把自有工作负载镜像并入同一个镜像包的技巧、k0s 自动导入镜像包所依赖的目录规则,以及把 defaultpullpolicy 钉死为 Never、彻底阻断外部拉取尝试的配置。接下来讲了如何用 k0sctl 通过 SSH 把二进制和镜像包推送到多
2026-07-31 · 21 分钟阅读 #kubernetes#k0s#k0sctl#air-gap#on-premise设计离线镜像导入流水线 —— skopeo、Harbor,以及一份不会过时的重新导入手册
本文设计的是离线(air-gapped)Kubernetes 环境里几乎没人真正做扎实的那个问题 —— 如何反复、安全地把容器镜像带进来。内容涵盖把导入清单当作代码来管理、用 skopeo sync 把外部仓库拉取成目录和 OCI layout 的具体命令、用 oras 搬运任意制品的方法,以及把 Harbor 作为内部分发仓库的双仓库模式。文中也明确指出,Harbor 的代理缓存在没有通往上游的网络路径时完全没用。接下来讲了如何用 o
2026-07-31 · 24 分钟阅读 #kubernetes#air-gap#harbor#skopeo#supply-chain隔离网络 Kubernetes 的 Day 2 运维 — 阻止集群因证书到期而死掉的方法
隔离网络集群真正死掉的原因,大多不是什么华丽的故障,而是证书到期。谁都不去碰它,过了一年 API Server 就悄悄停住,而且没有互联网,连搜索都解决不了。这篇文章讲的是安装之后的事。内容包括在死掉之前就检测到到期的方法、kubeadm 与 k3s 的证书续期及 CA 轮换流程、NTP 漂移同时压垮 TLS 与 etcd 的路径、定时快照与真正演练过的恢复流程、没有上游时用暂存包完成的版本升级、没有 SaaS 后端的可观测性组建,以及
2026-07-31 · 26 分钟阅读 #kubernetes#air-gap#day2-operations#etcd#certificatek3s 隔离网络安装完全指南 — 从镜像 tarball 带入到私有仓库、Agent 加入
按命令逐条梳理在完全没有互联网通路的隔离网络中搭建 k3s 集群的全过程。内容涵盖在连通网络的机器上下载 airgap 镜像 tarball 与 k3s 二进制文件并生成校验和清单、确定带入介质里要装什么、把镜像放到容器运行时目录之后再用 INSTALLK3SSKIPDOWNLOAD 执行安装脚本的整个流程。接着说明如何用 registries.yaml 把内部镜像仓库挂成镜像源、如何让自签名 CA 被信任,以及 Agent 加入与内嵌
2026-07-31 · 27 分钟阅读 #kubernetes#k3s#air-gap#on-premise#containerd密钥(secret)管理 — 只靠 .env 文件为什么不够,环境变量泄漏的路径与轮换设计
把 .env 文件加进 .gitignore,并不等于密钥就安全了。进程环境在同一台主机上可以通过 /proc/PID/environ 被原样读出,会随着崩溃报告、调试页面和 CI 日志一起流出,还会永久留在容器镜像的层里。本文逐条展示环境变量真实的泄漏路径,并说明当密钥已经被提交时,为什么响应顺序是先吊销密钥而不是先重写历史。文章还会讲清 Kubernetes Secret 里的 base64 并不是加密、用短生命周期凭证与工作负载身
2026-07-26 · 23 分钟阅读 #security#secrets#devops#vault#kubernetesdig 能通但应用失败 — 先从 DNS 解析顺序查起
dig 能正常拿到答案而唯独应用找不到名字,这不是 bug 而是结构使然。因为 dig 和 nslookup 根本不经过 /etc/hosts 和 nsswitch.conf,而是直接向解析器发起查询。本文沿着应用真正走过的路径,从 nsswitch.conf 一路追到 systemd-resolved 的存根解析器,并整理如何用 getent 和 resolvectl 复现同一条路径。文中还会讲清 Kubernetes 里 ndots
2026-07-26 · 17 分钟阅读 #network#dns#linux#kubernetes#troubleshootingOOM Killer 杀掉进程之后 — 从解读 dmesg 日志到区分 cgroup OOM
进程没有留下任何日志就消失了,退出码是 137。本文整理如何逐行阅读内核 OOM Killer 留下的 dmesg 报告、badness 分数是怎么算出来的以及为什么被杀的往往不是最大的那个进程,还有如何仅凭日志区分系统全局 OOM 和 cgroup v2 memory.max 引发的容器 OOM。同时覆盖 overcommitmemory 0/1/2 到底改变了什么、"有 swap 就不会 OOM"这个误解为什么是错的,以及如何用 e
2026-07-26 · 22 分钟阅读 #linux#memory#oom#cgroups#kubernetes容器镜像漏洞扫描结果怎么读 — 把几百个 Critical 变成 0 的实际做法
第一次跑镜像扫描器,会吐出几千条漏洞,其中相当一部分是 Critical。把这份报告原封不动丢给团队,结果是什么都不会发生。本文从一个事实出发:扫描器实际做的只是把已安装的包清单和 CVE 数据库对一遍。由此解释厂商回移补丁造成的误报、为什么必须参考发行版的安全公告,以及应用代码里的漏洞压根就看不见这一局限。文章会讲清为什么不能只看 CVSS 分数、如何把 EPSS 和 KEV 这类真实利用指标一起读,并用命令和输出展示:消掉几千条漏洞
2026-07-26 · 17 分钟阅读 #security#container#docker#trivy#kubernetesping 能通但只有大请求卡住 — 解剖 MTU、MSS 与 PMTUD 黑洞
小请求都很顺利,唯独大响应会卡在半路的症状,几乎总是路径 MTU 问题。TCP 是按接口 MTU 来通告 MSS 的,如果路径中间更窄,本应由路径MTU发现通过 ICMP Fragmentation Needed 来告知,而一旦防火墙把这个 ICMP 丢掉,黑洞就形成了。本文整理了 MSS 与 MTU 的算术、如何用 ping -M do 二分查找路径 MTU、IPsec 与 WireGuard 与 VXLAN 实际拿走多少字节、为什么
2026-07-26 · 18 分钟阅读 #network#mtu#tcp#vpn#kubernetesKubernetes CrashLoopBackOff 分原因诊断与解决 — 日志为空时该看什么
完整梳理 Pod 陷入 CrashLoopBackOff 而 kubectl logs 什么都不输出的场景。先讲清 BackOff 的准确含义 — 它不是原因,而是从 10 秒一路涨到 5 分钟的重启等待时间,再讲阅读 describe 中 Last State 与 Exit Code 的顺序,以及退出码 0、1、127、137、139、143 各自代表什么。文章按原因给出诊断命令与解决方案:应用启动即退出、配置与 Secret 缺失、
2026-07-26 · 17 分钟阅读 #kubernetes#crashloopbackoff#troubleshooting#kubectl#sreConnection refused 与 timeout 的区别 — 在 TCP 层面收敛原因
连接不上时终端返回的消息大致分为两类。Connection refused 意味着对端回了一个 RST,timeout 则意味着发出去的 SYN 没有得到任何应答。这一行之差几乎就决定了问题出在进程还是出在路径。本文整理了如何用 tcpdump 直接确认 SYN 与 RST、如何用 SYN 重传间隔提前算出超时长度、有监听却依然 timeout 的 accept 队列溢出,以及容器里绑定到回环地址所引发的典型事故。
2026-07-26 · 16 分钟阅读 #network#tcp#troubleshooting#linux#kubernetesCPU steal time 与限流 — 如何区分 top 的 st、可突发型积分和 CFS 配额
CPU 使用率只有 40%,p99 延迟却在飙升,top 的 st 列显示 20%。这些看起来相似的症状背后,藏着三个完全不同的原因:Hypervisor 不把物理 CPU 交给 vCPU 的 CPU steal time、可突发型实例的 CPU 积分耗尽,以及在 top 里根本看不到的 cgroup CFS 配额限流。本文梳理 st 从百分之几开始算问题、怎么读 nrthrottled 和 throttledusec,以及"移除 Ku
2026-07-26 · 23 分钟阅读 #linux#cpu#cgroups#kubernetes#cloudKubernetes Pod Pending 状态排查 — 读懂调度器留下的拒绝理由
当 Pod 停在 Pending 好几分钟都不往前走时,调度器其实已经把拒绝理由写进了事件里。本文先从如何准确解读那句以 0/5 nodes are available 开头的话讲起,再逐一排除九类原因。内容涵盖资源不足是按 requests 总和而非实际用量判定这一点、taint 与容忍度、节点选择器与亲和性不匹配、PVC 未绑定与 WaitForFirstConsumer 的正常等待、Pod 反亲和性导致的自我排除、topology
2026-07-26 · 17 分钟阅读 #kubernetes#scheduler#pending#troubleshooting#autoscalingKubernetes ImagePullBackOff 与 ErrImagePull 完全解剖 — 一个原因字符串就能收尾
把 Pod 经过 ErrImagePull 之后停留在 ImagePullBackOff 的情况按原因逐一拆解。出发点有两个:这两个状态是同一事件的不同阶段,以及 kubectl describe 的 Events 最后一行里其实已经写好了答案。文章覆盖八条分支——标签拼写错误、私有镜像仓库认证失败、Secret 没有挂到 ServiceAccount 上的情况、Docker Hub 匿名拉取的速率限制、代理与气隙环境、把在 Apple
2026-07-26 · 16 分钟阅读 #kubernetes#imagepullbackoff#container-registry#troubleshooting#containerd正确使用 Kubernetes 三种探针 — liveness、readiness、startup 的准确边界
毫无问题的 Pod 周期性重启、刚发布完就冒出大量 502、启动缓慢的应用永远到不了 Ready,这三类故障全都出自探针设计。文章先区分三种探针各自回答什么问题、失败时又会做什么,然后计算从 initialDelaySeconds 到 failureThreshold 这些参数实际会在几秒之后杀掉容器。接着讨论把数据库检查放进 liveness 为什么会让单点故障扩散成全面故障、readiness 里到底可以放到什么程度、exec 探针
2026-07-26 · 21 分钟阅读 #kubernetes#liveness-probe#readiness-probe#graceful-shutdown#sreKubernetes OOMKilled(137) 内存问题排查 — 在调高上限之前要确认的事
本文讨论容器以 Exit Code 137 退出、应用日志里却没有留下任何异常的情况。文章从 137 只能说明 128 加 9、也就是 SIGKILL 这一事实出发,整理了如何用一行 dmesg 区分容器 cgroup 上限导致的 OOM、节点全局 OOM 以及 kubelet 驱逐。文章用真实的命令和输出说明:JVM、Node.js 和 Python 会如何误解容器上限,为什么调大堆反而会让情况恶化,working set、RSS 和
2026-07-26 · 19 分钟阅读 #kubernetes#oomkilled#memory#jvm#cgroup