Heptio Arkを使用してDigitalOceanでKubernetesクラスターをバックアップおよび復元する方法

[.note]#Note: Arkプロジェクトの名前がVeleroに変更され、v0.11.0で複数の変更が導入されました。 このガイドは、これらの変更を組み込むためにまもなく更新されます。 ご理解のほどよろしくお願いいたします。

前書き

Heptio Arkは、Kubernetesオブジェクトを圧縮してオブジェクトストレージにバックアップする、Kubernetesクラスターの便利なバックアップツールです。 また、クラウドプロバイダーのブロックストレージスナップショット機能を使用してクラスターの永続ボリュームのスナップショットを取得し、クラスターのオブジェクトと永続ボリュームを以前の状態に復元できます。

StackPointCloudのDigitalOcean Ark Pluginを使用すると、DigitalOceanブロックストレージを使用して永続ボリュームのスナップショットを作成し、スペースを使用してKubernetesオブジェクトをバックアップできます。 DigitalOceanでKubernetesクラスターを実行する場合、これにより、クラスターの状態をすばやくバックアップし、災害が発生した場合にそれを復元できます。

このチュートリアルでは、ローカルマシンでArkクライアントをセットアップおよび構成し、ArkサーバーをKubernetesクラスターにデプロイします。 次に、ログに永続ボリュームを使用するサンプルNginxアプリをデプロイし、災害復旧シナリオをシミュレートします。

前提条件

このチュートリアルを始める前に、次のものが利用可能である必要があります。

ローカルコンピュータで

  • クラスターに接続するように構成されたkubectlコマンドラインツール。 official Kubernetes documentationkubectlをインストールして構成する方法の詳細を読むことができます。

  • gitコマンドラインユーティリティ。 Getting Started with Gitgitをインストールする方法を学ぶことができます。

DigitalOceanアカウントで:

  • DigitalOcean Droplets上のDigitalOcean KubernetesクラスターまたはKubernetesクラスター(バージョン1.7.5以降)

  • クラスター内で実行されているDNSサーバー。 DigitalOcean Kubernetesを使用している場合、これはデフォルトで実行されています。 Kubernetes DNSサービスの設定の詳細については、Kuberentesの公式ドキュメントのCustomizing DNS Serviceを参照してください。

  • バックアップされたKubernetesオブジェクトを保存するDigitalOcean Space。 スペースの作成方法については、the Spaces product documentationを参照してください。

  • DigitalOcean Spaceのアクセスキーペア。 アクセスキーのセットを作成する方法については、How to Manage Administrative Access to Spacesを参照してください。

  • DigitalOcean APIで使用する個人アクセストークン。 パーソナルアクセストークンを作成する方法については、How to Create a Personal Access Tokenを参照してください。

このすべてを設定したら、このガイドから始める準備ができました。

[[step-1 -—- installing-the-ark-client]] ==ステップ1—Arkクライアントのインストール

Heptio Arkバックアップツールは、ローカルコンピューターにインストールされたクライアントとKubernetesクラスターで実行されるサーバーで構成されます。 まず、ローカルのArkクライアントをインストールします。

Webブラウザーで、Ark / Velero GitHubリポジトリreleases pageに移動し、OSとシステムアーキテクチャに対応するリリースを見つけて、リンクアドレスをコピーします。 このガイドでは、ローカルマシンとしてx86-64(またはAMD64)プロセッサ上のUbuntu 18.04サーバーを使用し、Arkv0.10.0リリースを使用します。

[.note]#Note:このガイドに従うには、Arkクライアントのv0.10.0をダウンロードしてインストールする必要があります。

次に、ローカルコンピューターのコマンドラインから、一時的な/tmpディレクトリとcdに移動します。

cd /tmp

wgetと前にコピーしたリンクを使用して、リリースtarballをダウンロードします。

wget https://link_copied_from_release_page

ダウンロードが完了したら、tarを使用してtarballを抽出します(ファイル名はリリースバージョンとOSによって異なる場合があることに注意してください)。

tar -xvzf ark-v0.10.0-linux-amd64.tar.gz

/tmpディレクトリには、抽出されたarkバイナリと、ダウンロードしたtarballが含まれているはずです。

バイナリを実行して、arkクライアントを実行できることを確認します。

./ark --help

次のヘルプ出力が表示されます。

OutputHeptio Ark is a tool for managing disaster recovery, specifically for Kubernetes
cluster resources. It provides a simple, configurable, and operationally robust
way to back up your application state and associated data.

If you're familiar with kubectl, Ark supports a similar model, allowing you to
execute commands such as 'ark get backup' and 'ark create schedule'. The same
operations can also be performed as 'ark backup get' and 'ark schedule create'.

Usage:
  ark [command]

Available Commands:
  backup      Work with backups
  client      Ark client related commands
  completion  Output shell completion code for the specified shell (bash or zsh)
  create      Create ark resources
  delete      Delete ark resources
  describe    Describe ark resources
  get         Get ark resources
  help        Help about any command
  plugin      Work with plugins
  restic      Work with restic
  restore     Work with restores
  schedule    Work with schedules
  server      Run the ark server
  version     Print the ark version and associated image

. . .

この時点で、ark実行可能ファイルを一時的な/tmpディレクトリから移動し、PATHに追加する必要があります。 UbuntuシステムのPATHに追加するには、/usr/local/binにコピーするだけです。

sudo mv ark /usr/local/bin/ark

これで、Arkサーバーを構成してKubernetesクラスターに展開する準備が整いました。

[[step-2 -—- installing-and-configuring-the-ark-server]] ==ステップ2—Arkサーバーのインストールと構成

ArkをKubernetesクラスターにデプロイする前に、まずArkの前提条件オブジェクトを作成します。 Arkの前提条件は次のとおりです。

  • heptio-ark名前空間

  • arkサービスアカウント

  • arkサービスアカウントにアクセス許可を付与するための役割ベースのアクセス制御(RBAC)ルール

  • 箱舟固有のリソースのカスタムリソース(CRD):BackupScheduleRestoreConfig

上記のKubernetesオブジェクトの定義を含むYAMLマニフェストファイルは、Ark source codeにあります。 まだ/tmpディレクトリにある間に、以前にダウンロードしたクライアントリリースバージョンに対応するソースコードtarballをダウンロードします。 このチュートリアルでは、これはv0.10.0です。

wget https://github.com/heptio/velero/archive/v0.10.0.tar.gz

ここで、tarを使用してtarballを抽出します(ファイル名はリリースバージョンによって異なる場合があることに注意してください)。

tar -xvzf v0.10.0.tar.gz

ダウンロードしたら、velero-0.10.0ディレクトリに移動します。

cd velero-0.10.0

上記の前提条件のリソースは、examples/common/00-prereqs.yamlYAMLファイルにあります。 kubectl applyを使用してファイルを渡すことにより、Kubernetesクラスターでこれらのリソースを作成します。

kubectl apply -f examples/common/00-prereqs.yaml

次のような出力が表示されるはずです。

Outputcustomresourcedefinition.apiextensions.k8s.io/backups.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/schedules.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/restores.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/downloadrequests.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/deletebackuprequests.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/podvolumebackups.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/podvolumerestores.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/resticrepositories.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/backupstoragelocations.ark.heptio.com created
customresourcedefinition.apiextensions.k8s.io/volumesnapshotlocations.ark.heptio.com created
namespace/heptio-ark created
serviceaccount/ark created
clusterrolebinding.rbac.authorization.k8s.io/ark created

クラスタに必要なArkKubernetesオブジェクトを作成したので、Ark DigitalOcean Pluginをダウンロードしてインストールできます。これにより、DigitalOcean SpacesをbackupStorageProvider(Kubernetesオブジェクトの場合)およびDigitalOceanとして使用できるようになります。ストレージをpersistentVolumeProviderとしてブロックします(永続ボリュームバックアップの場合)。

velero-0.10.0ディレクトリから戻り、プラグインのバージョンv0.10.0をダウンロードします。 プラグインのリリースバージョンは、StackPointCloud DigitalOceanプラグインreleases pageにあります。

cd ..
wget https://github.com/StackPointCloud/ark-plugin-digitalocean/archive/v0.10.0.tar.gz

ここで、tarを使用してtarballを抽出します(ファイル名はリリースバージョンによって異なる場合があり、Veleroを含む以前のv0.10.0.tar.gz tarballを削除しなかった場合は.1で終わる場合があります)クライアント/サーバーのソースコード):

tar -xvzf v0.10.0.tar.gz.1

プラグインディレクトリに移動します。

cd ark-plugin-digitalocean-0.10.0

DigitalOcean SpaceのアクセスキーをKubernetesSecretとして保存します。 まず、お気に入りのエディターを使用してexamples/credentials-arkファイルを開きます。

nano examples/credentials-ark

<AWS_ACCESS_KEY_ID><AWS_SECRET_ACCESS_KEY>をスペースアクセスキーと秘密キーに置き換えます。

examples/credentials-ark

[default]
aws_access_key_id=your_spaces_access_key_here
aws_secret_access_key=your_spaces_secret_key_here

ファイルを保存して閉じます。

次に、kubectlを使用してcloud-credentialsシークレットを作成し、digitalocean_tokenパラメータを使用してAPIパーソナルアクセストークンを挿入します。

kubectl create secret generic cloud-credentials \
    --namespace heptio-ark \
    --from-file cloud=examples/credentials-ark \
    --from-literal digitalocean_token=your_personal_access_token

次のような出力が表示されるはずです。

Outputsecret/cloud-credentials created

cloud-credentialsシークレットが正常に作成されたことを確認するには、kubectlを使用してdescribeシークレットを作成します。

kubectl describe secrets/cloud-credentials --namespace heptio-ark

cloud-credentialsシークレットを説明する次の出力が表示されます。

OutputName:         cloud-credentials
Namespace:    heptio-ark
Labels:       
Annotations:  

Type:  Opaque

Data
====
cloud:               115 bytes
digitalocean_token:  64 bytes

これで、プラグインのオブジェクトストレージバックエンドを構成するdefaultという名前のArkBackupStorageLocationオブジェクトの作成に進むことができます。 これを行うには、YAMLマニフェストファイルを編集してから、Kubernetesクラスターにオブジェクトを作成します。

お気に入りのエディターでexamples/05-ark-backupstoragelocation.yamlを開きます。

nano examples/05-ark-backupstoragelocation.yaml

強調表示されたフィールドにスペースの名前と地域を挿入します。

examples/05-ark-backupstoragelocation.yaml

. . .
---
apiVersion: ark.heptio.com/v1
kind: BackupStorageLocation
metadata:
  name: default
  namespace:  heptio-ark
spec:
  provider: aws
  objectStorage:
    bucket: space_name_here
  config:
    s3Url: https://space_region_here.digitaloceanspaces.com
    region: space_region_here

完了したら、ファイルを保存して閉じます。

kubectl applyを使用してクラスター内にオブジェクトを作成します。

kubectl apply -f examples/05-ark-backupstoragelocation.yaml

次のような出力が表示されるはずです。

Outputbackupstoragelocation.ark.heptio.com/default created

ブロックストレージバックエンドを構成するVolumeSnapshotLocationオブジェクトに対して、この手順を繰り返す必要はありません。 適切なパラメータがすでに事前設定されています。 これらを調べるには、エディターでexamples/06-ark-volumesnapshotlocation.yamlを開きます。

nano examples/06-ark-volumesnapshotlocation.yaml

examples/06-ark-volumesnapshotlocation.yaml

. . .
---
apiVersion: ark.heptio.com/v1
kind: VolumeSnapshotLocation
metadata:
  name: default
  namespace: heptio-ark
spec:
  provider: digitalocean-blockstore

完了したら、ファイルを閉じます。

kubectl applyを使用してクラスター内にオブジェクトを作成します。

kubectl apply -f examples/06-ark-volumesnapshotlocation.yaml
Outputvolumesnapshotlocation.ark.heptio.com/default created

この時点で、Arkサーバーの構成が完了し、examples/10-deployment.yaml構成ファイルにあるKubernetesデプロイメントを作成できます。 このファイルを簡単に見てみましょう。

cat examples/10-deployment.yaml

次のテキストが表示されます。

examples/10-deployment.yaml

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  namespace: heptio-ark
  name: ark
spec:
  replicas: 1
  template:
    metadata:
      labels:
        component: ark
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8085"
        prometheus.io/path: "/metrics"
    spec:
      restartPolicy: Always
      serviceAccountName: ark
      containers:
        - name: ark
          image: gcr.io/heptio-images/ark:latest
          command:
            - /ark
          args:
            - server
            - --default-volume-snapshot-locations=digitalocean-blockstore:default
          volumeMounts:
            - name: cloud-credentials
              mountPath: /credentials
            - name: plugins
              mountPath: /plugins
            - name: scratch
              mountPath: /scratch
          env:
            - name: AWS_SHARED_CREDENTIALS_FILE
              value: /credentials/cloud
            - name: ARK_SCRATCH_DIR
              value: /scratch
            - name: DIGITALOCEAN_TOKEN
              valueFrom:
                secretKeyRef:
                  key: digitalocean_token
                  name: cloud-credentials
      volumes:
        - name: cloud-credentials
          secret:
            secretName: cloud-credentials
        - name: plugins
          emptyDir: {}
        - name: scratch
          emptyDir: {}

ここでは、gcr.io/heptio-images/ark:latestコンテナの単一のレプリカで構成されるarkというデプロイメントを作成していることがわかります。 ポッドは、前に作成したcloud-credentialsシークレットを使用して構成されます。

kubectl applyを使用してデプロイメントを作成します。

kubectl apply -f examples/10-deployment.yaml

次のような出力が表示されるはずです。

Outputdeployment.apps/ark created

heptio-ark名前空間でkubectl getを使用して、デプロイメントが正常に作成されたことを再確認できます。

kubectl get deployments --namespace=heptio-ark

次のような出力が表示されるはずです。

OutputNAME   READY   UP-TO-DATE   AVAILABLE   AGE
ark    1/1     1            1           7s

Arkサーバーポッドは、Ark DigitalOceanプラグインをインストールするまで正しく起動しない場合があります。 ark-blockstore-digitaloceanプラグインをインストールするには、前にインストールしたarkクライアントを使用します。

ark plugin add quay.io/stackpoint/ark-blockstore-digitalocean:v0.10.0

--kubeconfigフラグで使用するkubeconfigを指定できます。 このフラグを使用しない場合、arkKUBECONFIG環境変数をチェックしてから、kubectlのデフォルト(~/.kube/config)にフォールバックします。

この時点で、Arkは実行され、完全に構成されており、Kubernetesクラスターオブジェクトと永続ボリュームをDigitalOcean SpacesとBlock Storageにバックアップおよび復元する準備ができています。

次のセクションでは、簡単なテストを実行して、バックアップおよび復元機能が期待どおりに機能することを確認します。

[[step-3 -—- testing-backup-and-restore-procedure]] ==ステップ3—バックアップと復元の手順のテスト

Arkのインストールと設定が正常に完了したので、テストNginx Deployment、Persistent Volume、およびServiceを作成し、バックアップと復元のドリルを実行して、すべてが正常に機能することを確認します。

ark-plugin-digitaloceanリポジトリには、nginx-pv.yamlと呼ばれるサンプルのNginxマニフェストが含まれています。

選択したエディターを使用してこのファイルを開きます。

nano examples/nginx-pv.yaml

次のテキストが表示されます。

Output---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-logs
  namespace: nginx-example
  labels:
    app: nginx
spec:
  storageClassName: do-block-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: nginx-example
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: nginx-logs
          persistentVolumeClaim:
           claimName: nginx-logs
      containers:
      - image: nginx:1.7.9
        name: nginx
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/var/log/nginx"
            name: nginx-logs
            readOnly: false

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: my-nginx
  namespace: nginx-example
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

このファイルでは、次の仕様を確認します。

  • nginx:1.7.9コンテナイメージの単一のレプリカで構成されるNginxデプロイメント

  • do-block-storage StorageClassを使用した5Gi永続ボリュームクレーム(nginx-logsと呼ばれる)

  • ポート80を公開するLoadBalancerサービス

nginxイメージバージョンを1.14.2に更新します。

Output. . .
      containers:
      - image: nginx:1.14.2
        name: nginx
        ports:
        - containerPort: 80
        volumeMounts:
. . .

完了したら、ファイルを保存して閉じます。

kubectl applyを使用してオブジェクトを作成します。

kubectl apply -f examples/nginx-pv.yml

次のような出力が表示されるはずです。

Outputnamespace/nginx-example created
persistentvolumeclaim/nginx-logs created
deployment.apps/nginx-deployment created
service/my-nginx created

展開が成功したことを確認します。

kubectl get deployments --namespace=nginx-example

次のような出力が表示されるはずです。

OutputNAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1         1         1            1           1h

Availableが1に達すると、kubectl getを使用してNginxロードバランサーの外部IPをフェッチします。

kubectl get services --namespace=nginx-example

my-nginxサービスの内部CLUSTER-IPEXTERNAL-IPの両方が表示されます。

OutputNAME       TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
my-nginx   LoadBalancer   10.32.27.0      203.0.113.0   80:30754/TCP   3m

EXTERNAL-IPをメモし、Webブラウザを使用してそこに移動します。

次のNGINXウェルカムページが表示されます。

Nginx Welcome Page

これは、Nginxの展開とサービスが稼働中であることを示しています。

災害シナリオをシミュレートする前に、まずNginxアクセスログ(Nginxポッドに接続された永続ボリュームに保存されている)を確認しましょう。

kubectl getを使用してポッドの名前を取得します。

kubectl get pods --namespace nginx-example
OutputNAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-77d8f78fcb-zt4wr   1/1       Running   0          29m

ここで、execを実行中のNginxコンテナーに入れて、その中にシェルを取得します。

kubectl exec -it nginx-deployment-77d8f78fcb-zt4wr --namespace nginx-example -- /bin/bash

Nginxコンテナ内に入ると、catはNginxアクセスログになります。

cat /var/log/nginx/access.log

Nginxアクセスエントリがいくつか表示されます。

Output10.244.17.1 - - [01/Oct/2018:21:47:01 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/203.0.113.11 Safari/537.36" "-"
10.244.17.1 - - [01/Oct/2018:21:47:01 +0000] "GET /favicon.ico HTTP/1.1" 404 570 "http://203.0.113.0/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/203.0.113.11 Safari/537.36" "-"

これらを使用して復元手順の成功を確認するため、これら(特にタイムスタンプ)を書き留めます。

これで、バックアップ手順を実行して、すべてのnginx KubernetesオブジェクトをSpacesにコピーし、Nginxのデプロイ時に作成した永続ボリュームのスナップショットを取得できます。

arkクライアントを使用してnginx-backupというバックアップを作成します。

ark backup create nginx-backup --selector app=nginx

--selector app=nginxは、app=nginxラベルセレクタを使用してKubernetesオブジェクトのみをバックアップするようにArkサーバーに指示します。

次のような出力が表示されるはずです。

OutputBackup request "nginx-backup" submitted successfully.
Run `ark backup describe nginx-backup` for more details.

ark backup describe nginx-backupを実行すると、少し遅れて次の出力が得られます。

OutputName:         nginx-backup
Namespace:    heptio-ark
Labels:       
Annotations:  

Phase:  Completed

Namespaces:
  Included:  *
  Excluded:  

Resources:
  Included:        *
  Excluded:        
  Cluster-scoped:  auto

Label selector:  app=nginx

Snapshot PVs:  auto

TTL:  720h0m0s

Hooks:  

Backup Format Version:  1

Started:    2018-09-26 00:14:30 -0400 EDT
Completed:  2018-09-26 00:14:34 -0400 EDT

Expiration:  2018-10-26 00:14:30 -0400 EDT

Validation errors:  

Persistent Volumes:
  pvc-e4862eac-c2d2-11e8-920b-92c754237aeb:
    Snapshot ID:        2eb66366-c2d3-11e8-963b-0a58ac14428b
    Type:               ext4
    Availability Zone:
    IOPS:               

この出力は、nginx-backupが正常に完了したことを示しています。

DigitalOcean Cloudコントロールパネルから、Kubernetesバックアップファイルを含むスペースに移動します。

Arkバックアップファイルを含むnginx-backupという新しいディレクトリが表示されます。

左側のナビゲーションバーを使用して、Imagesに移動し、次にSnapshotsに移動します。 Snapshots内で、Volumesに移動します。 上記の出力にリストされているPVCに対応するスナップショットが表示されます。

これで、復元手順をテストできます。

まず、nginx-example名前空間を削除しましょう。 これにより、ロードバランサーや永続ボリュームなど、ネームスペース内のすべてが削除されます。

kubectl delete namespace nginx-example

ロードバランサーエンドポイントでNginxにアクセスできなくなったこと、およびnginx-exampleデプロイメントが実行されていないことを確認します。

kubectl get deployments --namespace=nginx-example
OutputNo resources found.

これで、もう一度arkクライアントを使用して復元手順を実行できます。

ark restore create --from-backup nginx-backup

ここでは、createを使用して、nginx-backupオブジェクトからArkRestoreオブジェクトを作成します。

次のような出力が表示されるはずです。

OutputRestore request "nginx-backup-20180926143828" submitted successfully.
Run `ark restore describe nginx-backup-20180926143828` for more details.

復元された展開のステータスを確認します。

kubectl get deployments --namespace=nginx-example
OutputNAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1         1         1            1           1m

永続ボリュームの作成を確認します。

 kubectl get pvc --namespace=nginx-example
OutputNAME         STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
nginx-logs   Bound     pvc-e4862eac-c2d2-11e8-920b-92c754237aeb   5Gi        RWO            do-block-storage   3m

Nginxサービスの外部IPに再度移動して、Nginxが稼働していることを確認します。

最後に、復元された永続ボリュームのログをチェックして、復元後にログ履歴が保持されていることを確認します。

これを行うには、kubectl getを使用してポッドの名前をもう一度フェッチします。

kubectl get pods --namespace nginx-example
OutputNAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-77d8f78fcb-zt4wr   1/1       Running   0          29m

次に、execをその中に入れます。

kubectl exec -it nginx-deployment-77d8f78fcb-zt4wr --namespace nginx-example -- /bin/bash

Nginxコンテナ内に入ると、catはNginxアクセスログになります。

cat /var/log/nginx/access.log
Output10.244.17.1 - - [01/Oct/2018:21:47:01 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/203.0.113.11 Safari/537.36" "-"
10.244.17.1 - - [01/Oct/2018:21:47:01 +0000] "GET /favicon.ico HTTP/1.1" 404 570 "http://203.0.113.0/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/203.0.113.11 Safari/537.36" "-"

バックアップ前と同じアクセス試行(タイムスタンプに注意)が表示され、永続ボリュームの復元が成功したことが確認されます。 復元を実行した後にNginxのランディングページにアクセスした場合、ログに追加の試行がある場合があることに注意してください。

この時点で、KubernetesオブジェクトをDigitalOcean Spacesにバックアップし、ブロックストレージボリュームスナップショットを使用して永続ボリュームを正常にバックアップしました。 災害シナリオをシミュレートし、テストNginxアプリケーションにサービスを復元しました。

結論

このガイドでは、Ark KubernetesバックアップツールをDigitalOceanベースのKubernetesクラスターにインストールして構成しました。 KubernetesオブジェクトをDigitalOcean Spacesにバックアップし、ブロックストレージボリュームスナップショットを使用して永続ボリュームをバックアップするようにツールを構成しました。

Arkは、Kubernetesクラスターの定期的なバックアップのスケジュールにも使用できます。 これを行うには、ark scheduleコマンドを使用できます。 また、あるクラスターから別のクラスターにリソースを移行するためにも使用できます。 これら2つの使用例の詳細については、official Ark documentationを参照してください。

DigitalOcean Spacesの詳細については、official Spaces documentationを参照してください。 ブロックストレージボリュームの詳細については、Block Storage Volume documentationを参照してください。

このチュートリアルは、StackPointCloudのark-plugin-digitaloceanGitHub repoにあるREADMEに基づいています。

Related