如何在K8s集群中留存所有历史创建过的PV的完整清单
Kubernetes集群留存历史PV清单的实现方案
原生K8s能力说明
默认情况下,K8s的etcd仅存储当前活跃的对象状态,已经被删除的PV对象不会保留在etcd的当前状态库中,因此无法直接通过kubectl或者原生API查询到历史已删除的PV清单。
可选实现方案(数据库并非唯一选择)
你可以根据自身运维场景选择以下方案,也可以多个方案搭配使用提升可靠性:
- 审计日志持久化方案
开启kube-apiserver审计日志,所有PV的创建请求(对应persistentvolumes资源的create动作)都会被审计日志记录。只要你将审计日志归档存储到集群外的独立存储(比如日志服务器、对象存储),就可以随时过滤提取所有历史创建过的PV的完整信息,不会因为集群内资源被删除而丢失记录。 - 事件持久化方案
PV创建时会生成对应的K8s事件,默认事件仅留存1小时,你可以部署kube-eventer之类的事件采集组件,把所有PV创建事件持久化到集群外存储,定期导出PV清单即可。 - 冗余自定义存储方案
你之前考虑的ConfigMap/CR存储方案可以通过优化规避误删风险:给存储PV清单的ConfigMap/CR设置严格的RBAC权限,仅允许自定义服务账号写入,普通运维账号没有删除/修改权限;同时将清单多副本存储在多个独立命名空间下,或者额外同步到集群外的NAS/对象存储,大幅降低数据丢失概率。 - 数据库存储方案
如果需要对PV元数据做结构化查询、或者需要和现有运维平台联动,可以选择将PV清单存储到集群外部署的数据库中,同时做好数据库定期备份,这是可选方案而非必须选择。
建议选择至少2种方案搭配使用,多备份保障历史数据不会丢失。
内容的提问来源于stack exchange,提问作者codego123
相关产品推荐
相关产品推荐

