簡體   English   中英

如何在 Kube.netes 集群中創建自動 arangodb 集群備份?

[英]How to create automatic arangodb cluster backups in a Kubernetes Cluster?

我正在嘗試讓自動備份為我的 arangodb 集群部署工作。 我正在嘗試按照文檔進行操作,但我認為我以某種方式搞砸了。

這是我的數據庫配置。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. bucket size 太小了(但這似乎不太現實,因為那是一個只有一個文檔和 4 個 collections 的測試部署,所以它不應該那么大)
  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儀表板上設置為私有,我在那里使用免費套餐,cronjob 計時器上的 2 分鍾僅用於測試。

編輯:似乎自定義備份 pod 是數據庫的一項專業功能,如果有人想要備份,則需要為此構建自己的 pod。

這就是我解決它的方法(腳本第一部分歸功於官方 arangodb github)。
腳本在做什么?
我們正在創建一個每 14 天運行一次的 cronjob。 然后我們啟動一個 pod,它將使用arangodump工具轉儲(在本例中)整個數據庫。
通過將數據庫 url、密碼、用戶名等數據傳遞給它,並將其保存在temp/dump下的卷上。
之后我們創建另一個使用minio cli 工具的 pod,它允許與任何主要的 object 存儲提供商進行交互。
我們首先使用訪問密鑰和秘密為 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: {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM