K8s默认资源部分恢复:是否存在通用YAML仓库?
误删Kubernetes默认资源的恢复方案
一、有没有通用默认资源YAML仓库?
Kubernetes官方没有专门的“通用默认资源仓库”,但可以通过两种方式获取对应版本的默认资源配置:
- 从对应版本的Kubernetes源码仓库提取:每个版本的默认APIService、核心组件配置都在源码的
cluster/addons或pkg相关目录下,切换到对应版本分支就能找到。 - 通过kubeadm生成/导出:如果集群是用kubeadm部署的,执行
kubeadm init phase系列命令可以重新应用组件配置,加上--dry-run -o yaml参数就能导出YAML到本地,之后用kubectl apply手动恢复。
二、如何匹配对应Kubernetes版本的YAML?
- 操作源码仓库时,直接切换到集群对应的版本分支(比如
git checkout v1.28.0),就能拿到该版本的资源定义。 - 使用kubeadm时,确保本地kubeadm版本和集群版本一致(用
kubeadm version确认),生成的YAML自然匹配集群版本。
三、误删v1.networking.k8s.io APIService的具体恢复步骤
以你提到的场景为例,操作如下:
- 确认集群版本:
kubectl version --short - 用kubeadm导出该APIService的YAML配置:
kubeadm init phase addon apiserver --dry-run -o yaml | grep -A 20 "v1.networking.k8s.io" > networking-apiservice.yaml - 检查导出的YAML内容无误后,应用配置:
kubectl apply -f networking-apiservice.yaml - 验证恢复状态:
当状态显示为kubectl get apiservices v1.networking.k8s.ioAvailable时,说明恢复成功。
四、部分恢复 vs ETCD全量恢复
- 单独恢复特定资源(如某类APIService)操作更轻量,不会影响其他正常运行的资源,适合误删单个/少量核心资源的场景。
- ETCD全量恢复是兜底方案,适合大量核心资源丢失的情况,但操作复杂度高,需要提前有ETCD备份,还会导致集群短暂不可用。
内容的提问来源于stack exchange,提问作者R2D2
相关产品推荐
相关产品推荐

