标签: #devops
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 42 篇
LabHub — 我做了一个在浏览器里操作真实服务器来学习的实操平台
有些东西光靠读是学不会的。连上服务器敲命令、敲错、再弄清楚为什么错了 — 这个过程没有任何替代办法。LabHub 就是把这个过程搬进浏览器里的学习平台。点下开始实验,专属的 Linux 容器立刻启动,用浏览器终端连上去解题,每一步由服务器检查实际状态并告诉你是否通过。里面有学习路径 12 条、课程 73 门、实验 261 个共 2058 步、测验 1876 题、理论 319 篇。从 IT 基础和 Linux 起步,一路延伸到容器、Kub
2026-08-20 · 10 分钟阅读 #labhub#kubernetes#devops#education#hands-on实例加上去了,可用性却原地不动 —— zot 的横向扩展真正卖的是什么
本文以 zot 为例拆解容器镜像仓库的扩展设计。用一致性哈希把仓库分配给实例、非属主节点以代理方式转发的结构,是分片而不是高可用,官方文档也明确写着它不会自愈。文中依据文档与发布产物,梳理仅计算扩展与计算兼存储扩展各自放弃了什么、boltdb 缓存驱动为什么实际上把实例数锁死为一个、镜像同步中 digest 固定被破坏的条件,以及「单一静态二进制」这个说法与实际分发文件体积之间的落差。
2026-08-09 · 11 分钟阅读 #devops#oci#registry#zot#container巴士系数不是懂代码的人数,而是能拍板的人数
Nixpkgs 核心团队成立十个月后解散了。在一个有数千名贡献者的仓库里,握有被授权的决策权的人只有两位,而这两位一退出,那块管辖区就处于没有直接主人的状态。本文以这件事为依据,梳理为什么评估依赖风险时该看的是拥有批准权的人数、授权结构是否真正生效、以及升级路径,而不是星标数和提交数,并一并讨论用 GitHub API 就能自己数出来的指标及其局限。文中原样引用公告的措辞,以便把事实和解读分开。
2026-08-09 · 13 分钟阅读 #devops#open-source#governance#nix#supply-chain密钥(secret)管理 — 只靠 .env 文件为什么不够,环境变量泄漏的路径与轮换设计
把 .env 文件加进 .gitignore,并不等于密钥就安全了。进程环境在同一台主机上可以通过 /proc/PID/environ 被原样读出,会随着崩溃报告、调试页面和 CI 日志一起流出,还会永久留在容器镜像的层里。本文逐条展示环境变量真实的泄漏路径,并说明当密钥已经被提交时,为什么响应顺序是先吊销密钥而不是先重写历史。文章还会讲清 Kubernetes Secret 里的 base64 并不是加密、用短生命周期凭证与工作负载身
2026-07-26 · 23 分钟阅读 #security#secrets#devops#vault#kubernetesDocker 构建缓存为什么总是失效 — 层缓存键、ARG 与 BuildKit 缓存挂载
从缓存键这一层解释:为什么只改了一行代码,npm ci 却要重跑五分钟。文章讲清 RUN 的缓存键是命令字符串、而 COPY 的缓存键是文件内容哈希这一差别,一层失效就会连带失效其下所有层的规则,以及 ARG 在 BuildKit 与旧构建器上行为不同的那个点。再结合 CI runner 本来就没有缓存这一事实,用真实命令和输出梳理缓存挂载不会被导出到镜像仓库缓存的陷阱、cache-from 与 cache-to 的 mode 差异,以
2026-07-26 · 14 分钟阅读 #docker#buildkit#build-cache#ci-cd#devopsDocker 网络模式与连接问题 — bridge、host、overlay,以及 127.0.0.1 的陷阱
把"容器起来了却连不上"这类状况,按各模式的工作原理逐一拆开。文章讲清默认 bridge 下容器为什么无法用名字互相找到、用户自定义网络的内置 DNS 起了什么作用、端口发布实际生成的 iptables DNAT 规则,以及把绑定地址限制在 127.0.0.1 的安全含义。还会用真实命令和输出梳理容器里的回环并不是宿主机以及 host.docker.internal、应用只绑定回环导致外部连不上的问题、UFW 拦不住已发布端口的机制,以
2026-07-26 · 17 分钟阅读 #docker#docker-network#iptables#networking#devopsDockerfile 里反复出现的错误 — 以 root 运行、PID 1,以及留在镜像里的密钥
把那些构建能过、只在生产环境炸掉的 Dockerfile 问题,从原因说起。没写 USER 因而以 root 运行的容器、latest 标签与可复现性、为什么该避开 ADD、shell form 的 CMD 吞掉 SIGTERM 导致每次部署白扔 10 秒并以 137 退出的机制、PID 1 的僵尸回收职责与 tini、用 ARG 和 ENV 传入的令牌残留在 docker history 里的问题,以及 BuildKit 的 secr
2026-07-26 · 16 分钟阅读 #docker#dockerfile#container-security#pid1#devops给 Docker 镜像瘦身 — 层的真相、multi-stage build,以及基础镜像的真实代价
先从如何用 dive 逐层定位 Docker 镜像膨胀到 1.9GB 的根源讲起。文章会解释为什么联合文件系统让 RUN rm 连一个字节都减不掉、多阶段构建到底该把什么复制进最终阶段、alpine 的 musl libc 通过 Python wheel 重新编译和 DNS 问题收取的隐性成本,以及 distroless 与 slim 的取舍 — 全部配上真实的 Dockerfile 与真实输出。最后讲清楚比体积更能决定部署速度的层复用
2026-07-26 · 16 分钟阅读 #docker#dockerfile#multi-stage-build#container#devopssystemd v261 — PID 1 迎来分阶段发布、云 IMDS 的收编,以及 dlopen 迁移的收官
2026 年 6 月 19 日发布的 systemd v261,新增了只让单元在 fleet 指定比例上启用的 ConditionFraction=、用机器标签划分环的 ConditionMachineTag=,以及把 9 个公有云的实例元数据拉取为系统 credential 的全新 IMDS 子系统,并完成了把除 libc 之外的所有外部库链接都改为 dlopen() 的多年工作。本文直接阅读了项目的 raw NEWS 文件和 v26
2026-07-17 · 25 分钟阅读 #linux#systemd#devops#cloud#sysadminTalos Linux 1.13 — 一个没有 shell 的不可变操作系统,是如何走到发布调试 shell 这一步的
专为 Kubernetes 打造的不可变操作系统 Talos Linux,其 1.13 版本已于 2026 年 4 月 27 日发布。此次发布带来了用 Clang/ThinLTO 构建的内核、可复现的磁盘镜像、机器级别的容器镜像签名验证,以及最具象征意义的功能 — 为一个既没有 shell 也没有 SSH 的操作系统,提供官方调试容器(talosctl debug)。本文以 1.13 的实际发行说明和官方文档为依据,梳理不可变操作系统到
2026-07-17 · 23 分钟阅读 #linux#kubernetes#talos#immutable-infrastructure#devopsOpenBao 到底比 Vault 分叉了多少 — 从发布说明看分歧点,直到 v2.6 的命名空间封印
距离 OpenBao v2.0.0 GA(2024-07-17)正好过去两年,而三天前 v2.6.0 才刚发布。本文抛开「BUSL 背叛」对「可持续性」这类阵营论调,只用两个项目自己发布的发布说明、变更日志和提交记录,来确认这个分叉到底在哪里真正分道扬镳。OpenBao 把曾经 Vault Enterprise 专属的命名空间在 v2.3.1 开源了出来,又在 v2.6.0 加上了上游没有的、按命名空间划分的加密封印。反过来,存储后端、
2026-07-17 · 16 分钟阅读 #security#open-source#devops#licensingFlux 2.9 与 Weaveworks 之后的两年 — 失去赞助商的 GitOps 项目是怎么撑下来的
2024 年初,Flux 的原开发公司 Weaveworks 关门时,GitHub 讨论区里冒出一个问题 — 「这个项目的未来有危险吗?」两年半之后的 2026 年 6 月 30 日,Flux 发布了 2.9.0。本文用可验证的一手资料,重构这期间真正发生的事 — 发布节奏如何动摇又如何恢复(v2.0 到 v2.9 每个次要版本的发布间隔实测)、如今 9 位核心维护者分别隶属何处(以 CORE-MAINTAINERS 文件为准,Cont
2026-07-17 · 18 分钟阅读 #devops#gitops#fluxcd#kubernetes#open-sourceOpenTofu 1.12 的动态 prevent_destroy — lifecycle 静态约束松动之处及其代价
Terraform 的 lifecycle 块按设计只接受字面量值。因为它是在构建依赖关系图的阶段处理的,此时还没到能求值变量的时机 — 这是 HashiCorp 官方文档给出的解释,而"让我们用变量"这个请求早在 2016 年就有了。OpenTofu 1.12(2026 年 5 月 14 日)把 preventdestroy 的求值从配置加载器移到了语言运行时,从而松开了这个约束;同一版本里还新增了 destroy = false 这
2026-07-16 · 18 分钟阅读 #opentofu#terraform#iac#devops#state-managementMySQL 9.7 之后的版本是 26.7 — 2026 年春天,MySQL 与 MariaDB 整理发布模型的方式
2026 年 4 月 21 日,MySQL 9.7.0 以 GA 形式发布,这是自 8.4 之后近两年来第一次开启新的 LTS 分支;同一个月,MySQL 8.0 的 Extended Support 到期,降级为 Sustaining Support。随后在 6 月 16 日,Oracle 宣布把版本号切换为 YY.M 日历式版本号,于是 9.7 之后的创新版本不是 9.8,而是 26.7。MariaDB 在五周之后、5 月 29 日
2026-07-16 · 29 分钟阅读 #mysql#mariadb#database#versioning#devopsDebian 开始阻止不可复现的软件包迁移到 testing — 这道关卡究竟挡住了什么,又没挡住什么
2026 年 5 月 9 日,Debian 发布团队把迁移软件 britney 和可复现性检查接在了一起。第二天邮件列表上贴出的那句话是"Debian must ship reproducible packages",但实际被挡住的只有两件事 — 不可复现的新软件包,以及原本可复现的软件包发生回归。本文拆解这道关卡 — reproduce.debian.net 如何用 buildd 留下的 .buildinfo 原样重建已发布的二进制文
2026-07-16 · 31 分钟阅读 #devops#reproducible-builds#debian#supply-chain#ci-cdKubeVirt GPU 直通 VM 为何 112 天无法被调度 — 一次真实集群的尸检
一个用 Rust 写的 Operator 下达了"4 个 GPU 节点全部 NotReady"的诊断后,我在真实的 8 节点集群(GPU Operator v25.3.0、KubeVirt v1.7.0)里把这场死亡的病因追查到底。gpu-fedora 与 rhel9-gpu-vm 卡在 ErrorUnschedulable 长达 112 天,真正的原因不是花哨的 GPU 配置,而是 kubelet 的一行错误——"running wi
2026-07-11 · 7 分钟阅读 #kubevirt#gpu#kubernetes#nvidia#devops用 Keycloak 搭建 SSO — 从 Realm、Client、登录流程到 2026 年新功能
与其给 20 个内部应用分别接上登录功能,不如让一台身份服务器代替所有应用完成这件事,这就是 SSO。本文用 Realm、Client、Role、Identity Provider 这四个核心概念来理解开源标准 Keycloak,一步步走完 OIDC Authorization Code + PKCE 登录流程,梳理 Quarkus 发行版 build/start 两阶段模型、hostname v2 等生产环境陷阱,并从实战角度整理 2
2026-07-09 · 13 分钟阅读 #keycloak#sso#oidc#security#devopsGPU Operator × KubeVirt 完全整理 — 组件、配置、版本,从部分 MIG 到手动 MIG
把 Kubernetes GPU 基础设施的两大支柱整理在一页里。涵盖 GPU Operator 的 operand 构成、ClusterPolicy 配置与版本体系,同时讲解只对节点上部分 GPU 应用 MIG 的自定义配置,以及用 nvidia-smi 手动创建、删除 MIG 的方法。接着介绍在 Kubernetes 上运行虚拟机的 KubeVirt 的四大组件(virt-operator、controller、handler、la
2026-07-09 · 12 分钟阅读 #kubernetes#gpu#kubevirt#mig#nvidiaDocker 到 Podman — 无守护进程容器引擎迁移完全指南
Podman 以无守护进程(fork-exec)方式运行、且默认 rootless,这一点从架构哲学上就与 Docker 不同。本文梳理了内部工作原理(conmon·crun)、配置文件的位置与含义、使用 GPU 所需的 CDI 设置、原样使用 compose.yaml 的两种方法(podman 套接字 + docker compose vs podman-compose)、SELinux 卷标签之类的迁移陷阱,以及版本与社区的比较 —
2026-07-08 · 13 分钟阅读 #docker#podman#containers#devops#linuxNVIDIA GPU Operator 完全指南 — 从安装部署到 MIG 分区配置
在 Kubernetes 里手动搭建 GPU 节点的时代已经结束。本文梳理了 NVIDIA GPU Operator 如何用 Operator 模式把驱动、设备插件、监控这一整套栈全部管起来的原理,以及 Helm 安装与验证方法;还有把一张 A100/H100 切分成多个硬件隔离 GPU 来用的 MIG——它的概念、single/mixed 两种策略、基于节点标签的配置、自定义 Profile、以及运维注意事项,配合实际命令从头到尾讲清
2026-07-07 · 12 分钟阅读 #kubernetes#gpu#nvidia#mig#devops