<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>just on </title>
    <link>/tags/just/</link>
    <description>Recent content in just on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 27 May 2026 17:00:00 +0800</lastBuildDate><atom:link href="/tags/just/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>重启即 sealed：homelab Vault 自愈链路的三个坑</title>
      <link>/posts/homelab-vault-reboot-recovery/</link>
      <pubDate>Wed, 27 May 2026 17:00:00 +0800</pubDate>
      
      <guid>/posts/homelab-vault-reboot-recovery/</guid>
      <description>背景：一次内存扩容引出的连锁恢复 事情的起点很无聊：homelab 那台单节点 K3s 跑在 Proxmox VM 上，内存只给了 10G，kube-prometheus-stack 加上一堆有状态服务之后内存 requests 一直在 58% 上下，限制（limits）甚至超卖到 186%。我决定把 VM 从 10G 扩到 12G。
Terraform 改一行 vm_memory，apply，VM 重启——这一步本身顺利完成，节点回来了，kubectl top node 显示 12G 到位。但紧接着我发现一连串东西不对：
argocd 里 personal-services 是 Synced/Degraded 12 个 ExternalSecret 全部 SecretSyncedError calibre-web、grafana 等依赖 secret 的 pod 起不来 表面上看是 ExternalSecrets 集体挂掉，但直接触发点集中在一个地方：Vault 一重启就 sealed 了。
这篇文章把从&amp;quot;重启后 secret 全挂&amp;quot;到&amp;quot;固化成一条 just homelab-recover&amp;ldquo;的排查过程整理出来，重点是中间踩到的三个坑——其中第三个是我自己写的恢复脚本里的 bug。
Vault 为什么一重启就 sealed 先说这个不是 bug，是设计。
HashiCorp Vault 启动时数据是加密的，主密钥（master key）本身又被一组 unseal key 保护。进程刚起来时处于 sealed 状态：它能响应健康检查，但任何读写密钥的请求都会被拒。需要用 unseal key 把 master key 解出来、加载进内存，Vault 才进入 unsealed 状态开始服务。</description>
    </item>
    
  </channel>
</rss>
