如何在Kubernetes集群中创建自动arangob集群备份



我正在尝试让自动备份为我的arangob集群部署工作。我正试图按照文件办事,但不知怎么搞砸了。

这是我的数据库-config.yaml:

apiVersion: "database.arangodb.com/v1alpha"
kind: "ArangoDeployment"
metadata:
name: "arangodb-cluster"
spec:
mode: Cluster 
agents: 
count: 3
args:
- --log.level=debug
dbservers: 
count: 3
coordinators:
count: 3
---
apiVersion: "backup.arangodb.com/v1alpha"
kind: "ArangoBackup"
metadata:
name: "arangodb-backup"
namespace: default
spec:
policyName: "arangodb-backup-policy"
deployment:
name: "arangodb-backup-deployment"
upload:
repositoryURL: "https://s3.filebase.com/buffer"
credentialsSecretName: "backup-secret"
---
apiVersion: "backup.arangodb.com/v1alpha"
kind: "ArangoBackupPolicy"
metadata:
name: "arangodb-backup-policy"
spec:
schedule: "*/2 * * * *"
template:
upload:
repositoryURL: "https://s3.filebase.com/myBucket"
credentialsSecretName: "backup-secret"
---
apiVersion: v1
kind: Secret
metadata:
name: backup-secret
data:
token: mybase64EnodedJSONToken
type: Opaque

理想情况下,我会在我的bucket中找到一些数据,但它是空的。我认为可能是:

  1. bucket的大小太小了(但这似乎很不现实,因为这是一个只有一个文档和4个集合的测试部署,所以不应该那么大(
  2. 我使用的服务根本不受支持2.1我使用的服务配置错误
  3. 我误解了文件中的一些内容

我解码的json令牌如下所示(我使用rclones-cli生成它(:

{
"Filebase": {
"access_key_id": "myID",
"acl": "private",
"endpoint": "https://s3.filebase.com",
"env_auth": "false",
"provider": "Other",
"secret_access_key": "myAccessKey",
"type": "s3"
}

}我编码的一个看起来(有点(像这样(只是把它放在这里,以防我用错误的方式编码json令牌(:

ewogICAgIkZpbGViYXNlIXXXXXXX。。。X==

它是:301字节长的

我尝试过的:我试图了解更多关于正在发生的事情的内幕,但我缺乏适当的经验,我也试图从文档中添加一些内容,但没有成功。

最后要注意的是,在filebase.com仪表板上,bucket被设置为private,我在那里使用免费层,cronjob计时器上的2min只是为了测试。

编辑:似乎自定义备份pod是db的一个专业功能,如果想要备份,需要为此构建自己的pod。

这就是我解决它的方法(脚本的第一部分归功于官方的arangob github(
脚本在做什么
我们正在创建一个每14天运行一次的cronjob。然后,我们启动一个pod,它将使用arangodump工具转储(在本例中(整个数据库
通过传递数据库url、密码、用户名等数据,并将其保存在temp/dump下的卷上
之后,我们创建了另一个pod,它使用minio-cli工具,允许与任何主要的对象存储提供商进行交互
我们首先为gcloud设置一个带有访问密钥和机密的mc别名,您可以将其替换为任何其他兼容s3的提供商url。此后,我们将把/temp/dump镜像到备份日期最长的文件夹中的云存储桶(在这种情况下,qute,用您自己的存储桶名称替换它!(。$()可以用于执行shell命令并使用返回值,只适用于不知道这一点的人。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name:  backup-job
spec:
schedule: "0 0 */14 * *" #Runs the job at every 14 days
jobTemplate:
spec:
template:
metadata:
name:  backup-job
spec:
initContainers:
- name: dump-create
image: "arangodb:3.7.3"
args:
- "arangodump"
- "--server.endpoint=$(ENDPOINT)"
- "--server.username=$(USERNAME)"
- "--server.password=$(PASSWORD)"
- "--server.database=MY-DATABASE"
- "--output-directory=/tmp/dump"
- "--overwrite"
volumeMounts:
- name: dump
mountPath: /tmp/dump
env:
- name: "PASSWORD"
valueFrom:
secretKeyRef:
name: signing-secret
key: root-password

- name: "USERNAME"
valueFrom:
configMapKeyRef:
name: signing-config
key: "admin-user"

- name: "ENDPOINT"
valueFrom:
configMapKeyRef:
name: signing-config
key: db-url
restartPolicy: OnFailure

containers:
- name: db-dump-upload
image: "minio/mc"
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c"]
args: ["mc alias set gcs https://storage.googleapis.com $ACCESSKEY $SECRETKEY; mc mirror /tmp/dump gcs/qute/$(date -I)"] #no () for env variables!!!!
volumeMounts:
- name: dump
mountPath: /tmp/dump
env:
- name: SECRETKEY
valueFrom:
secretKeyRef:
name: backup-secret
key: secret

- name: ACCESSKEY
valueFrom:
secretKeyRef:
name: backup-secret
key: access-key
volumes:
- name: dump
emptyDir: {}

最新更新