前言

k3s的备份我们采用 kube-backup,它能帮我们把每个命名空间里一些基础的yaml备份,比如deployment、svc、pvc等,并通过git账号配置,自动上传至git仓库

开始

  1. 下载源码
1
git clone https://github.com/pieterlange/kube-backup.git
  1. 创建命名空间
1
kubectl create ns kube-backup
  1. 将源码的配置文件里面,所有的kube-system改为kube-backup
1
sed -i 's#namespace: kube-system#namespace: kube-backup#g' *.yaml
  1. 在源码目录下创建密钥对
1
ssh-keygen -t rsa -f ./id_rsa -N ''
  1. 将git仓库域名或ip添加授信列表里
1
ssh-keyscan gitee.com > known_hosts
  1. 将密钥和授信列表存入kube-backup中
1
kubectl create secret generic kube-backup-ssh -n kube-backup --from-file=id_rsa --from-file=known_hosts
  1. 请自行将 id_rsa.pub 公钥填在git账号配置ssh key里,不会配置网上有教程。如果你能使用 git@git仓库地址 成功克隆项目,则说明配置成功

  2. 在git仓库中创建一个新项目,用于存放配置文件

  3. 更改 cronjob-codecommit.yamlcronjob-ssh.yaml 中的 GIT_REPO为新项目的git仓库地址,切记使用 git@git仓库地址。kubectl 版本高的请修改 job-cleanup.yamlapiVersion: batch/v1beta1

  4. 执行以下文件

1
kubectl apply -f ./

效果

1
kubectl get cronjobs -n kube-backup

image-20230823141805513

这个定时任务默认每10分钟执行一次,你可以自行调整执行频率,此处不多论述

优化

job的定时清除可以不使用源代码提供的 job-cleanup.yaml,只需要让kube-state-backup 执行完自动销毁即可

1
2
3
4
spec: 
jobTemplate:
spec:
ttlSecondsAfterFinished: 0