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

7kqas0il  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(155)

我正在尝试让自动备份为我的arangodb集群部署工作。我正在尝试遵循documentation,但我想我已经搞砸了。
下面是我的数据库配置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

理想情况下,我会在我的桶中找到一些数据,但它是空的。我认为它可能是:
1.桶的大小太小(但这似乎不太现实,因为这是一个只有一个文档和4个集合的测试部署,所以不应该太大)
1.我正在使用的服务根本不受支持2.1我正在使用的服务配置错误
1.我误解了文档中的一些内容
我解码的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标记):
我的天啊!
它的长度为:301字节
我尝试过:我试图得到一些更多的内部正在发生的事情,但我缺乏经验,这样做propperly,我也试图添加一些东西,从文档,但无济于事。
作为最后的通知,在filebase.com Jmeter 板上,桶被设置为私有,我在那里使用的是自由层,cronjob计时器上的2 min只是为了测试。
编辑:看起来定制备份吊舱是DB的一个专业功能,如果一个人想要有备份,他需要为此建立自己的吊舱。

q43xntqr

q43xntqr1#

这就是我如何解决它(脚本的第一部分归功于官方的arangodb github)。

脚本在做什么

我们正在创建一个每14天运行一次的cronjob,然后启动一个pod,它将使用arangodump工具转储(在本例中)整个数据库。
通过传递数据,如数据库URL,密码,用户名,并将其保存在一个卷下temp/dump.
然后,我们创建另一个使用minio cli工具的pod,该工具允许与任何主要对象存储提供程序进行交互。
我们首先为gcloud设置一个带有访问密钥和秘密的mc别名,你可以用任何其他s3兼容的提供者url替换它。(在本例中为 * quute *,请将其替换为您自己的存储桶名称!)。$()可用于执行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: {}

相关问题