序章

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

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

このチュートリアルでは、セットアップと構成を行います velero ローカルマシンのコマンドラインツールを使用して、サーバーコンポーネントをKubernetesクラスターにデプロイします。 次に、ロギングに永続ボリュームを使用するサンプルNginxアプリをデプロイしてから、ディザスタリカバリシナリオをシミュレートします。

前提条件

このチュートリアルを開始する前に、次のものを利用できるようにしておく必要があります。

ローカルコンピューターの場合:

  • The kubectl クラスタに接続するように構成されたコマンドラインツール。 インストールと構成の詳細を読むことができます kubectl 公式Kubernetesドキュメントにあります。
  • gitコマンドラインユーティリティ。 インストール方法を学ぶことができます git Git入門。

DigitalOceanアカウントの場合:

  • DigitalOcean Kubernetes クラスター、またはKubernetesクラスター(バージョン 1.7.5 またはそれ以降)DigitalOceanDropletsで。
  • クラスタ内で実行されているDNSサーバー。 DigitalOcean Kubernetesを使用している場合、これはデフォルトで実行されています。 Kubernetes DNSサービスの設定の詳細については、Kuberentesの公式ドキュメントからDNSサービスのカスタマイズを参照してください。
  • バックアップされたKubernetesオブジェクトを保存するDigitalOceanスペース。 Spaceの作成方法については、Spaces製品のドキュメントを参照してください。
  • DigitalOceanSpaceのアクセスキーペア。 アクセスキーのセットを作成する方法については、スペースへの管理アクセスを管理する方法を参照してください。
  • DigitalOceanAPIで使用するための個人用アクセストークン。 パーソナルアクセストークンの作成方法については、パーソナルアクセストークンの作成方法を参照してください。 作成または使用するトークンに Read/Write 権限またはスナップショットは機能しません。

これらすべてを設定したら、このガイドを開始する準備が整います。

ステップ1—Veleroクライアントのインストール

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

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

注:このガイドに従うには、Veleroクライアントのv1.2.0をダウンロードしてインストールする必要があります。

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

  1. cd /tmp

使用する wget そして、リリースtarballをダウンロードするために以前にコピーしたリンク:

  1. wget https://link_copied_from_release_page

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

  1. tar -xvzf velero-v1.2.0-linux-amd64.tar.gz

The /tmp これで、ディレクトリに抽出されたものが含まれるはずです velero-v1.2.0-linux-amd64 ディレクトリとダウンロードしたtarball。

を実行できることを確認します velero バイナリを実行することによるクライアント:

  1. ./velero-v1.2.0-linux-amd64/velero help

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

Output
Velero 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, Velero supports a similar model, allowing you to execute commands such as 'velero get backup' and 'velero create schedule'. The same operations can also be performed as 'velero backup get' and 'velero schedule create'. Usage: velero [command] Available Commands: backup Work with backups backup-location Work with backup storage locations bug Report a Velero bug client Velero client related commands completion Output shell completion code for the specified shell (bash or zsh) create Create velero resources delete Delete velero resources describe Describe velero resources get Get velero resources help Help about any command install Install Velero plugin Work with plugins restic Work with restic restore Work with restores schedule Work with schedules snapshot-location Work with snapshot locations version Print the velero version and associated image . . .

この時点で、を移動する必要があります velero 一時的なものから実行可能 /tmp ディレクトリとそれをあなたのに追加します PATH. あなたにそれを追加するには PATH Ubuntuシステムでは、単にそれをにコピーします /usr/local/bin:

  1. sudo mv velero-v1.2.0-linux-amd64/velero /usr/local/bin/velero

これで、Veleroサーバーのシークレットを設定し、それをKubernetesクラスターにデプロイする準備が整いました。

ステップ2—シークレットの構成

Veleroのサーバーコンポーネントを設定する前に、DigitalOceanSpacesキーとAPIトークンを準備する必要があります。 再び一時ディレクトリに移動します /tmp を使用して cd 指図:

  1. cd /tmp

次に、DigitalOcean用のVeleroプラグインのコピーをダウンロードします。 プラグインのGithubリリースページにアクセスし、末尾がファイルへのリンクをコピーします .tar.gz.

使用する wget そして、リリースtarballをダウンロードするために以前にコピーしたリンク:

  1. wget https://link_copied_from_release_page

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

  1. tar -xvzf v1.0.0.tar.gz

The /tmp これで、ディレクトリに抽出されたものが含まれるはずです velero-plugin-1.0.0 ディレクトリとダウンロードしたtarball。

次に cdvelero-plugin-1.0.0 ディレクトリ:

  1. cd velero-plugin-1.0.0

これで、DigitalOcean SpaceのアクセスキーとAPIトークンを保存して、Kubernetesシークレットとして使用できるようになりました。 まず、 examples/cloud-credentials お気に入りのエディタを使用してファイルします。

  1. nano examples/cloud-credentials

ファイルは次のようになります。

/tmp/velero-plugin-1.0.0/examples/cloud-credentials
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>

編集します <AWS_ACCESS_KEY_ID><AWS_SECRET_ACCESS_KEY> DigitalOceanSpacesキーを使用するためのプレースホルダー。 必ず削除してください <> 文字。

次のステップは、 01-velero-secret.patch.yaml DigitalOceanAPIトークンが含まれるようにファイルします。 お気に入りのエディターでファイルを開きます。

  1. nano examples/01-velero-secret.patch.yaml

次のようになります。

---
apiVersion: v1
kind: Secret
stringData:
digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque

全体を変更する <DIGITALOCEAN_API_TOKEN> DigitalOceanパーソナルAPIトークンを使用するためのプレースホルダー。 線は次のようになります digitalocean_token: 18a0d730c0e0..... 繰り返しますが、必ず削除してください <> 文字。

ステップ3—Veleroサーバーのインストール

Veleroのインストールは、バックアップを作成、スケジュール、および管理するためにすべてが連携して機能する多数のKubernetesオブジェクトで構成されています。 The velero ダウンロードした実行可能ファイルは、これらのオブジェクトを生成してインストールできます。 The velero install コマンドは、クラスターをバックアップできるようにするための予備的なセットアップ手順を実行します。 具体的には、次のようになります。

  • 作成する velero 名前空間。

  • 追加します velero サービスアカウント。

  • ロールベースのアクセス制御(RBAC)ルールを構成して、 velero サービスアカウント。

  • Velero固有のリソースのカスタムリソース定義(CRD)をインストールします。 Backup, Schedule, Restore, Config.

  • Veleroプラグインを登録して、ブロックスナップショットとスペースストレージを管理します。

実行します velero install いくつかのデフォルト以外の構成オプションを指定したコマンド。 具体的には、スペース構成に一致するように、コマンドの実際の呼び出しで次の各設定を編集する必要があります。

  • --bucket velero-backups: 変更 velero-backups DigitalOceanSpaceの名前と一致する値。 たとえば、Spaceを「backup-bucket」と呼んだ場合、オプションは次のようになります。 --bucket backup-bucket
  • --backup-location-config s3Url=https://nyc3.digitaloceanspaces.com,region=nyc3:スペースの設定に一致するようにURLとリージョンを変更します。 具体的には、両方を編集します nyc3 スペースがホストされている地域に一致する部分。 たとえば、スペースがでホストされている場合 fra1 リージョンの場合、行は次のようになります。 --backup-location-config s3Url=https://fra1.digitaloceanspaces.com,region=fra1. リージョンの識別子は次のとおりです。 nyc3, sfo2, sgp1、 と fra1.

適切なバケットとバックアップの場所の設定の準備ができたら、Veleroをインストールします。 次のコマンドを実行し、必要に応じて値を置き換えます。

  1. velero install \
  2. --provider velero.io/aws \
  3. --bucket velero-backups \
  4. --plugins velero/velero-plugin-for-aws:v1.0.0,digitalocean/velero-plugin:v1.0.0 \
  5. --backup-location-config s3Url=https://nyc3.digitaloceanspaces.com,region=nyc3 \
  6. --use-volume-snapshots=false \
  7. --secret-file ./examples/cloud-credentials

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

Output
CustomResourceDefinition/backups.velero.io: attempting to create resource CustomResourceDefinition/backups.velero.io: created CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource CustomResourceDefinition/backupstoragelocations.velero.io: created CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource CustomResourceDefinition/deletebackuprequests.velero.io: created CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource CustomResourceDefinition/downloadrequests.velero.io: created CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource CustomResourceDefinition/podvolumebackups.velero.io: created CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource CustomResourceDefinition/podvolumerestores.velero.io: created CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource CustomResourceDefinition/resticrepositories.velero.io: created CustomResourceDefinition/restores.velero.io: attempting to create resource CustomResourceDefinition/restores.velero.io: created CustomResourceDefinition/schedules.velero.io: attempting to create resource CustomResourceDefinition/schedules.velero.io: created CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource CustomResourceDefinition/serverstatusrequests.velero.io: created CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource CustomResourceDefinition/volumesnapshotlocations.velero.io: created Waiting for resources to be ready in cluster... Namespace/velero: attempting to create resource Namespace/velero: created ClusterRoleBinding/velero: attempting to create resource ClusterRoleBinding/velero: created ServiceAccount/velero: attempting to create resource ServiceAccount/velero: created Secret/cloud-credentials: attempting to create resource Secret/cloud-credentials: created BackupStorageLocation/default: attempting to create resource BackupStorageLocation/default: created Deployment/velero: attempting to create resource Deployment/velero: created Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.

を使用して展開ログを監視できます kubectl 出力からのコマンド。 デプロイの準備ができたら、サーバーの構成である次のステップに進むことができます。 正常なデプロイは次のようになります(異なるAGE列を使用)。

  1. kubectl get deployment/velero --namespace velero
Output
NAME READY UP-TO-DATE AVAILABLE AGE velero 1/1 1 1 2m

この時点で、VeleroのサーバーコンポーネントをデプロイとしてKubernetesクラスターにインストールしました。 また、Kubernetesシークレットを使用してSpacesキーをVeleroに登録しました。

注:指定できます kubeconfig その velero コマンドラインツールは、 --kubeconfig 国旗。 このフラグを使用しない場合は、 velero チェックします KUBECONFIG 環境変数を入力してから、 kubectl デフォルト (~/.kube/config).

ステップ4—スナップショットの構成

Veleroサーバーをインストールしたとき、オプション --use-volume-snapshots=false コマンドの一部でした。 Kubernetesクラスター内の基盤となるブロックストレージデバイスのスナップショットを撮りたいので、VeleroにDigitalOceanブロックストレージ用の正しいプラグインを使用するように指示する必要があります。

次のコマンドを実行してプラグインを有効にし、デフォルトのスナップショットプロバイダーとして登録します。

  1. velero snapshot-location create default --provider digitalocean.com/velero

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

Output
Snapshot volume location "default" configured successfully.

ステップ5—APIトークンを追加する

前の手順では、Veleroサーバーにブロックストレージオブジェクトとオブジェクトストレージオブジェクトを作成しました。 登録しました digitalocean/velero-plugin:v1.0.0 サーバーにプラグインを追加し、Spacesシークレットキーをクラスターにインストールしました。

最後のステップは、パッチを適用することです。 cloud-credentials DigitalOceanAPIトークンを使用するために以前に作成した秘密。 このトークンがないと、スナップショットプラグインはDigitalOceanAPIで認証できません。

私たちは使用することができます kubectl edit APIトークンへの参照を使用してVeleroDeploymentオブジェクトを変更するコマンド。 ただし、複雑なYAMLオブジェクトを手動で編集するのは面倒で、エラーが発生しやすくなります。 代わりに、 kubectl patch Kubernetesはパッチオブジェクトをサポートしているため、コマンド。 適用するパッチファイルの内容を簡単に見てみましょう。

最初のパッチファイルは examples/01-velero-secret.patch.yaml 以前に編集したファイル。 APIトークンをに追加するように設計されています secrets/cloud-credentials すでにスペースキーが含まれているシークレット。 cat ファイル:

  1. cat examples/01-velero-secret.patch.yaml

これは次のようになります(トークンの代わりにトークンを使用します <DIGITALOCEAN_API_TOKEN> プレースホルダー):

例/01-velero-secret.patch.yaml
. . .
---
apiVersion: v1
kind: Secret
stringData:
  digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque

次に、デプロイメントのパッチファイルを見てみましょう。

  1. cat examples/02-velero-deployment.patch.yaml

次のYAMLが表示されます。

例/02-velero-deployment.patch.yaml
. . .
---
apiVersion: v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - args:
        - server
        command:
        - /velero
        env:
        - name: DIGITALOCEAN_TOKEN
          valueFrom:
            secretKeyRef:
              key: digitalocean_token
              name: cloud-credentials
        name: velero

このファイルは、Deploymentのポッド仕様にパッチを適用していることを示しています。 velero. これはパッチであるため、Kubernetesオブジェクトの仕様全体またはメタデータを指定する必要はありません。 この場合、VeleroDeploymentはすでに cloud-credentials 秘密だから velero install コマンドは私たちのためにそれを作成しました。 したがって、このパッチで行う必要があるのは、登録することだけです。 digitalocean_token すでにデプロイされているVeleroポッドの環境変数として。

を使用して最初のシークレットパッチを適用しましょう kubectl patch 指図:

  1. kubectl patch secret/cloud-credentials -p "$(cat examples/01-velero-secret.patch.yaml)" --namespace velero

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

Output
secret/cloud-credentials patched

最後に、デプロイメントにパッチを適用します。 次のコマンドを実行します。

  1. kubectl patch deployment/velero -p "$(cat examples/02-velero-deployment.patch.yaml)" --namespace velero

パッチが成功すると、次のように表示されます。

Output
deployment.apps/velero patched

パッチを適用したデプロイメントがを使用して機能していることを確認しましょう kubectl getvelero 名前空間:

  1. kubectl get deployment/velero --namespace velero

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

Output
NAME READY UP-TO-DATE AVAILABLE AGE velero 1/1 1 1 12s

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

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

ステップ6—バックアップと復元の手順のテスト

Veleroのインストールと構成が正常に完了したので、永続ボリュームとサービスを使用してテスト用のNginxデプロイメントを作成できます。 展開が実行されたら、バックアップと復元のドリルを実行して、Veleroが正しく構成され、機能していることを確認します。

あなたがまだで働いていることを確認してください /tmp/velero-plugin-1.0.0 ディレクトリ。 The examples ディレクトリには、と呼ばれるサンプルのNginxマニフェストが含まれています nginx-example.yaml.

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

  1. nano examples/nginx-example.yaml

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

Output
. . . --- apiVersion: v1 kind: Namespace metadata: name: nginx-example labels: app: nginx --- 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/v1 kind: Deployment metadata: name: nginx-deploy namespace: nginx-example labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: volumes: - name: nginx-logs persistentVolumeClaim: claimName: nginx-logs containers: - image: nginx:stable name: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/var/log/nginx" name: nginx-logs readOnly: false --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-svc namespace: nginx-example spec: ports: - port: 80 targetPort: 80 selector: app: nginx type: LoadBalancer

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

  • と呼ばれるNginx名前空間 nginx-example
  • の単一のレプリカで構成されるNginxデプロイメント nginx:stable コンテナ画像
  • 5Giの永続的なボリュームクレーム( nginx-logs)、を使用して do-block-storage StorageClass
  • A LoadBalancer ポートを公開するサービス 80

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

  1. kubectl apply -f examples/nginx-example.yaml

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

Output
namespace/nginx-example created persistentvolumeclaim/nginx-logs created deployment.apps/nginx-deploy created service/nginx-svc created

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

  1. kubectl get deployments --namespace=nginx-example

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

Output
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 1m23s

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

  1. kubectl get services --namespace=nginx-example

あなたは両方の内部を見る必要があります CLUSTER-IPEXTERNAL-IP のために my-nginx サービス:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc LoadBalancer 10.245.147.61 159.203.48.191 80:30232/TCP 3m1s

に注意してください EXTERNAL-IP Webブラウザを使用してそこに移動します。

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

これは、Nginxのデプロイとサービスが稼働していることを示しています。

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

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

  1. kubectl get pods --namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 4m14s

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

  1. kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash

Nginxコンテナ内に入ると、 cat Nginxアクセスログ:

  1. cat /var/log/nginx/access.log

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

Output
10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-" 10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-"

これらをメモして(特にタイムスタンプ)、復元手順の成功を確認するために使用します。 ポッドを終了します。

  1. exit

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

と呼ばれるバックアップを作成します nginx-backup を使用して velero コマンドラインクライアント:

  1. velero backup create nginx-backup --selector app=nginx

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

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

Output
Backup request "nginx-backup" submitted successfully. Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.

ランニング velero backup describe nginx-backup --details 少し遅れて次の出力を提供する必要があります。

Output
Name: nginx-backup Namespace: velero Labels: velero.io/backup=nginx-backup velero.io/pv=pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca velero.io/storage-location=default Annotations: <none> Phase: Completed Namespaces: Included: * Excluded: <none> Resources: Included: * Excluded: <none> Cluster-scoped: auto Label selector: app=nginx Storage Location: default Snapshot PVs: auto TTL: 720h0m0s Hooks: <none> Backup Format Version: 1 Started: 2020-01-02 23:45:30 -0500 EST Completed: 2020-01-02 23:45:34 -0500 EST Expiration: 2020-02-01 23:45:30 -0500 EST Resource List: apps/v1/Deployment: - nginx-example/nginx-deploy apps/v1/ReplicaSet: - nginx-example/nginx-deploy-694c85cdc8 v1/Endpoints: - nginx-example/nginx-svc v1/Namespace: - nginx-example v1/PersistentVolume: - pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca v1/PersistentVolumeClaim: - nginx-example/nginx-logs v1/Pod: - nginx-example/nginx-deploy-694c85cdc8-vknsk v1/Service: - nginx-example/nginx-svc Persistent Volumes: pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca: Snapshot ID: dfe866cc-2de3-11ea-9ec0-0a58ac14e075 Type: ext4 Availability Zone: IOPS: <N/A>

この出力は、 nginx-backup 正常に完了しました。 リソースのリストには、バックアップに含まれていた各Kubernetesオブジェクトが表示されます。 最後のセクションでは、ファイルシステムのスナップショットを使用してPersistentVolumeもバックアップされたことを示しています。

DigitalOceanクラウドコントロールパネル内から確認するには、Kubernetesバックアップファイルを含むスペースに移動します。

と呼ばれる新しいディレクトリが表示されます nginx-backup Veleroバックアップファイルが含まれています。

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

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

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

  1. kubectl delete namespace nginx-example

ロードバランサーエンドポイントでNginxにアクセスできなくなったこと、および nginx-example デプロイメントは実行されなくなりました:

  1. kubectl get deployments --namespace=nginx-example
Output
No resources found in nginx-example namespace.

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

  1. velero restore create --from-backup nginx-backup

ここでは使用します create Veleroを作成するには Restore からのオブジェクト nginx-backup 物体。

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

  1. Output
    Restore request "nginx-backup-20200102235032" submitted successfully.
  2. Run `velero restore describe nginx-backup-20200102235032` or `velero restore logs nginx-backup-20200102235032` for more details.

復元されたデプロイメントのステータスを確認します。

  1. kubectl get deployments --namespace=nginx-example
Output
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 58s

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

  1. kubectl get pvc --namespace=nginx-example
Output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nginx-logs Bound pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca 5Gi RWO do-block-storage 75s

復元により、LoadBalancerも作成されました。 サービスが新しいIPアドレスで再作成される場合があります。 あなたは見つける必要があります EXTERNAL-IP 再度アドレス:

  1. kubectl get services --namespace nginx-example
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc LoadBalancer 10.245.15.83 159.203.48.191 80:31217/TCP 97s

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

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

これを行うには、もう一度ポッドの名前を取得します。 kubectl get:

  1. kubectl get pods --namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 2m20s

それで exec それに:

  1. kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash

Nginxコンテナ内に入ると、 cat Nginxアクセスログ:

  1. cat /var/log/nginx/access.log
Output
10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-" 10.244.0.119 - - [03/Jan/2020:04:43:04 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-"

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

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

結論

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

Veleroを使用して、ディザスタリカバリのためにKubernetesクラスタの定期的なバックアップをスケジュールすることもできます。 これを行うには、 velero schedule 指図。 Veleroを使用して、あるクラスターから別のクラスターにリソースを移行することもできます。

DigitalOcean Spacesの詳細については、公式Spacesドキュメントを参照してください。 ブロックストレージボリュームの詳細については、ブロックストレージボリュームのドキュメントを参照してください。

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