使用kube-backup来备份K8s的资源

2021-02-11 18:19:41 浏览数 (1)

K8s里面的各种资源yaml文件,建议还是需要定期备份的。

之前我们是在外部机器上 用的kubectl get xx遍历后,存下来,然后再git commit 提交到gitlab去备份。

最后空闲,研究了下之前运维同学部署在K8s里面的kube-backup这个备份方式,发现大体逻辑和我之前的一样,区别就是说统一到K8s里面来管理了。

既然学了,就再写个笔记备忘下,或许能帮到其他人呢。

创建gitlab账号和repo

代码语言:javascript复制
创建一个gitlab group repo useraccount

例如我这里用的是一个super-bot高权限的账号

并且,把super-bot加到 新创建的repo里面,我给了个maintanier权限。

gitlab repo地址: git@192.168.2.188:infra/kube-backup.git
账号 super-bot

这些信息,后面都会用到。

gitlab界面gitlab界面

下载github上的源文件

代码语言:javascript复制
# 下载源码
git clone https://github.com/pieterlange/kube-backup.git

# 我们这里单独创建一个namespace,默认它是存到kube-system下面的
kubectl create ns kube-backup

# 修改配置文件
sed -i 's#namespace: kube-system#namespace: kube-backup#g' *.yaml

创建一个secret 用于给gitlab提交信息

代码语言:javascript复制
# 下面这些命令在 kube-backup 目录下执行就行
 
ssh-keygen -t rsa -f ./id_rsa -N ''   # 创建一个ssh密钥对
ssh-keyscan 192.168.2.188 > known_hosts
kubectl create secret generic kube-backup-ssh -n kube-backup --from-file=id_rsa --from-file=known_hosts
$ kubectl get secrets -n kube-backup
NAME                  TYPE                                  DATA   AGE
default-token-5t2q5   kubernetes.io/service-account-token   3      2m36s
kube-backup-ssh       Opaque                                2      12s

将这个pub key 加到 super-bot 的gitlab key里面,不然后续流程会报错的

将key加到用户ssh keys里面将key加到用户ssh keys里面

应用yaml并测试

代码语言:javascript复制
# 然后,修改下面2个yaml中的 GIT_REPO地址为git@192.168.2.188:infra/kube-backup.git
-rw-r--r-- 1 root root 1.3K 2021-02-11 11:26 cronjob-codecommit.yaml
-rw-r--r-- 1 root root 1.3K 2021-02-11 11:26 cronjob-ssh.yaml

修改  job-cleanup.yaml 改为 apiVersion: batch/v1beta1 (我这的minikube版本较高,不修改的话,执行的报错)


# 应用这个目录下的4个yaml到k8s去生效
kubectl apply -f ./

# 查看效果
$ kubectl get cronjobs -n kube-backup
NAME                SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
kube-state-backup   */10 * * * *   False     0        <none>          28s

# 默认是10分钟执行一次,可以根据自己的需求改


# 下面是运行一段时间的效果
$ kubectl get pods -n kube-backup                                 
NAME                                 READY   STATUS    RESTARTS   AGE
kube-state-backup-1613016000-nh5mq   1/1     Running   5          19m

$ kubectl get jobs -n kube-backup 
NAME                        SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
kube-state-backup           30 1 * * 6   False     1        23m             30m
kube-state-backup-cleaner   1 6 * * *    False     0        <none>          2m37s

GitLab上的文件效果

gitlabgitlab

0 人点赞