如何在不影响Vault数据的前提下卸载并重新部署Vault Agent Injector
问题描述
在GCP GKE集群部署HashiCorp Vault时,碰到Agent和Agent-Injector证书无法自动生成的问题——就算在Helm Chart里更新了agents和injector的版本号,重新部署也刷不了证书,只能靠卸载后重新应用解决。之前在没有Vault Server的集群里执行以下操作一切正常:
helm uninstall vault terraform apply vault
但剩下的集群里同时部署了Vault Server,当前命名空间的Pod列表如下:
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 7 (3d1h ago) 47d vault-1 1/1 Running 3 (3d1h ago) 47d vault-2 1/1 Running 7 (3d1h ago) 47d vault-agent-injector-6866bb887c-4lnm9 1/1 Running 4 (26d ago) 47d vault-agent-injector-6866bb887c-nc2xq 1/1 Running 3 (26d ago) 47d vault-agent-injector-6866bb887c-nhkmz 1/1 Running 0 47d vault-backup-cronjob-28023840-ggqrw 0/1 Completed 0 3d13h vault-backup-cronjob-28025280-4ww42 0/1 Completed 0 2d13h vault-backup-cronjob-28026720-wnzn9 0/1 Completed 0 37h vault-backup-cronjob-28028160-n4x49 0/1 Completed 0 13h
现在需要移除并重新部署Agent-Injector,但不想影响Vault Server的核心数据,核心疑问有两个:
- Vault数据存在StatefulSet/GCS里,执行
helm uninstall vault会不会删掉? - 怎么在不碰Vault数据的前提下,安全删了再重新部署Injector?
解决方案
1. Vault数据安全性说明
- 要是你的Vault Server是用官方Helm Chart部署的StatefulSet:
- StatefulSet绑定的PersistentVolumeClaims(PVCs)默认不会被
helm uninstall删除——Helm本身不会主动清理持久化存储资源。 - 如果配置了GCS作为Vault的存储后端,数据直接存在GCS Bucket里,和Kubernetes资源完全独立,
helm uninstall根本碰不到这部分数据。
- StatefulSet绑定的PersistentVolumeClaims(PVCs)默认不会被
- 哪怕StatefulSet的Pod被销毁,只要PVC或GCS存储还在,重新部署Vault Server时会自动加载原有数据。
2. 安全操作Injector的两种方法
方法一:单独操作Injector(推荐)
不用卸载整个Vault Helm Release,直接通过Helm配置单独禁用/启用Injector:
- 先在Terraform的Vault Helm配置里禁用Injector:
set { name = "injector.enabled" value = "false" } - 应用配置,删除现有Injector资源:
这一步只会删掉Injector相关的Deployment、Service、ConfigMap等,完全不会影响Vault Server的StatefulSet。terraform apply vault - 重新启用Injector并指定目标版本:
修改Terraform配置,打开Injector开关并设置正确的版本号:
再次执行应用:set { name = "injector.enabled" value = "true" } set { name = "injector.image.tag" value = "你的目标版本号" }
这会部署全新的Injector组件,自动生成新证书。terraform apply vault
方法二:卸载后重新部署(需确认存储配置)
如果一定要用helm uninstall+terraform apply的方式,只要确认两点就不会丢数据:
- 检查Vault Server的PVC:执行
kubectl get pvc,确认vault-0、vault-1、vault-2对应的PVC存在——Helm默认不会删除它们。 - 如果用GCS后端,确认Bucket配置正确,Terraform重新部署时会复用原有配置,Vault启动后自动加载GCS里的数据。
操作步骤:
- 可选但推荐:备份当前Vault状态
vault operator raft snapshot save backup.snap gsutil cp backup.snap gs://你的备份Bucket名称/ - 卸载Helm Release:
helm uninstall vault - 重新部署:
重新部署后,Vault Server会自动连接到原有PVC或GCS后端,加载所有历史数据。terraform apply vault
3. 验证步骤
操作完后,执行以下命令确认状态:
- 检查Vault Server Pod:
kubectl get pods -l app.kubernetes.io/name=vault,确保所有vault-xPod正常运行。 - 验证Vault数据:登录Vault,检查已有密钥、策略等是否存在。
- 检查Injector状态:
kubectl get pods -l app.kubernetes.io/name=vault-agent-injector,确认新的Injector Pod正常运行,证书已更新。
内容的提问来源于stack exchange,提问作者Daemon Jester
相关产品推荐
相关产品推荐

