导出完整对象是什么
把查询结果输出为 YAML 或 JSON,得到的是资源的完整对象,包含定义、运行状态与元数据三部分。它是备份配置、分析字段结构、改造清单的常用起点:先导出,再看清楚哪些字段是你要的,哪些是集群自己写上去的运行时信息。
哪些字段不能回灌
导出结果里混着大量运行态字段:状态段、资源版本、唯一标识、创建时间戳。直接拿导出文件重新提交,轻则报冲突,重则把无关字段覆盖回现网。稳妥做法是只保留定义与关键元数据,状态段整体删掉,做成模板再纳入版本管理。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,主流资源类型都支持 |
|---|---|
| 语法 | kubectl get <资源> <名称> -o yaml|json |
| 输出内容 | 定义、运行状态、元数据三部分 |
| 保留字段 | 重定向到文件即可长期保存,注意文件权限 |
| 敏感数据 | 密钥类对象的内容是编码后的明文,分享前必须脱敏 |
| 常见后缀 | 文件扩展名与实际内容无关,格式由参数决定 |
典型使用场景
- 备份关键配置:发布前导出工作负载与服务定义,出问题可对照回滚
- 生成清单草稿:导出现网对象,删掉运行时字段后作为新环境的模板
- 分析字段结构:确认某个参数在对象里的确切位置与默认值
- 排查异常:状态段里的条件与详情比列表输出完整得多
- 对比环境差异:两个集群导出同名对象后逐段比对,找出配置漂移
- 审计资源占用:批量导出后统计镜像版本、探针与资源声明情况
常用示例
常用示例
kubectl get deploy web -n prod -o yaml > web.yaml # 导出工作负载
kubectl get svc web -o yaml | grep -v 'resourceVersion\|uid\|creationTimestamp' # 过滤运行态字段
kubectl get cm app-config -o yaml > app-config.bak.yaml # 备份配置对象
kubectl get pod web-x -o json | python -m json.tool # 结构化查看 JSON
kubectl get ingress web-ing -o yaml # 导出入口规则
kubectl get deploy web -o yaml --show-managed-fields=false # 隐藏托管字段,便于对比导出后要处理的字段
| 字段 | 为什么处理 | 处理方式 |
|---|---|---|
| status | 运行时状态,只读且随环境变化 | 整体删除 |
| metadata.resourceVersion | 版本标记,重新提交会冲突 | 删除 |
| metadata.uid | 集群生成的唯一标识 | 删除 |
| metadata.creationTimestamp | 创建时间,重新提交无意义 | 删除 |
| metadata.annotations 中的托管信息 | 由工具写入的追踪信息 | 按需清理 |
| data 里的内容 | 可能含敏感信息 | 分享前脱敏 |
密钥类对象导出后内容只是编码并非加密,直接贴到文档或提交到代码仓库等同于泄露。
跨版本迁移时留意接口版本变化:导出的接口版本在新集群可能已废弃,需要按新版本改写后再提交。