English | 简体中文 |
kube-recycle-bin(krb) 是一个 Kubernetes 资源回收站,它可以做到自动回收,快速恢复已删除的资源。
在 Kubernetes 中,资源的删除是不可逆的操作,不可否认,存在像 velero 或 etcd 备份/恢复等方式可以帮助我们找回已删除的资源。 但是,会不会在实际场景下你会觉得:杀鸡焉用宰牛刀?
那么试试 kube-recycle-bin 吧!
既然是回收站,那么当然它的主要功能就是:
krb-cli recycle
命令创建 RecyclePolicy
资源,指定需要回收的资源类型和命名空间;krb-controller
监听 RecyclePolicy
资源的创建、更新和删除,自动同步创建、更新和删除对应的 ValidatingWebhookConfiguration
资源;kube-apiserver
接收到指定资源的删除请求,通过 ValidatingWebhookConfiguration
将请求转发到 krb-webhook
;krb-webhook
解析请求,将删除的资源(JSON 格式)存储到一个新的 RecycleItem
资源对象并创建,完成资源的回收;krb-cli restore
命令还原已回收的资源,完成资源的还原后,自动删除 RecycleItem
资源对象。kubectl apply -f https://raw.githubusercontent.com/ketches/kube-recycle-bin/master/manifests/crds.yaml
krb-controller
和 krb-webhook
kubectl apply -f https://raw.githubusercontent.com/ketches/kube-recycle-bin/master/manifests/deploy.yaml
多种安装方式可供选择:
go install
命令安装:go install github.com/ketches/kube-recycle-bin/cmd/krb-cli@latest
curl -sSL https://github.com/ketches/kube-recycle-bin/raw/master/install_cli.sh | sh
从 Release 页面下载对应操作系统的二进制文件,
解压后将 krb-cli
移动到 $PATH
目录下。
从源码安装:
git clone https://github.com/ketches/kube-recycle-bin.git
cd kube-recycle-bin
make install
Note: 前提是 krb-controller
和 krb-webhook
已经部署成功。
场景:自动回收 dev
, prod
命名空间下删除的 Deployment
, StatefulSet
和 Service
资源。
# 创建回收策略
krb-cli recycle deployments statefulsets services -n dev,prod
# 查看创建的回收策略
kubectl get rp
创建回收策略后,krb-controller
会自动创建 validatingwebhookconfigurations
# 首先创建测试资源
kubectl create deployment krb-test-nginx-deploy --image=nginx --replicas=0 -n dev
kubectl expose deployment krb-test-nginx-deploy --name krb-test-nginx-svc --port=80 --target-port=80 -n dev
# 删除资源
kubectl delete deploy krb-test-nginx-deploy -n dev
kubectl delete svc krb-test-nginx-svc -n dev
# 查看回收站,执行以下命令可以获取已删除的资源,说明回收策略已经生效
krb-cli get ri
# 查看回收的资源对象,根据以上命令获取到的回收站资源名称
krb-cli view krb-test-nginx-deploy-skk5c89b krb-test-nginx-svc-txv4vj6v
# 还原资源
krb-cli restore krb-test-nginx-deploy-skk5c89b krb-test-nginx-svc-txv4vj6v
# 查看还原的资源
kubectl get deploy krb-test-nginx-deploy -n dev
kubectl get svc krb-test-nginx-svc -n dev