前書き

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

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

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

前提条件

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

ローカルコンピュータで

  • クラスタに接続するように設定された、 `+ kubectl `コマンドラインツール。 ` kubectl +`のインストールと設定の詳細については、https://kubernetes.io/docs/tasks/tools/install-kubectl/ [Kubernetesの公式ドキュメント]をご覧ください。

  • https://git-scm.com/ [+ git +]コマンドラインユーティリティ。 `+ git +`のインストール方法については、https://www.digitalocean.com/community/tutorials/how-to-contribute-to-open-source-getting-started-with-git [Getting Started with Git]で学ぶことができます。 。

DigitalOceanアカウントで:

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

  • クラスター内で実行されているDNSサーバー。 DigitalOcean Kubernetesを使用している場合、これはデフォルトで実行されています。 Kubernetes DNSサービスの設定の詳細については、Kuberentesの公式ドキュメントからhttps://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/[DNSサービスのカスタマイズ]を参照してください。

  • バックアップされたKubernetesオブジェクトを保存するDigitalOcean Space。 Spaceの作成方法については、https://www.digitalocean.com/docs/spaces/ [The Spaces製品ドキュメント]をご覧ください。

  • DigitalOcean Spaceのアクセスキーペア。 アクセスキーのセットを作成する方法については、https://www.digitalocean.com/docs/spaces/how-to/administrative-access/ [スペースへの管理アクセスを管理する方法]を参照してください。

  • DigitalOcean APIで使用する個人アクセストークン。 パーソナルアクセストークンの作成方法については、https://www.digitalocean.com/docs/api/create-personal-access-token/ [パーソナルアクセストークンの作成方法]を参照してください。

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

ステップ1-Arkクライアントのインストール

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

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

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

cd /tmp

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

wget https://

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

tar -xvzf

これで、 `+ / 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

. . .

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

sudo mv ark /usr/local/bin/ark

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

ステップ2-Arkサーバーのインストールと構成

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

  • `+ heptio-ark +`名前空間

  • `+ ark +`サービスアカウント

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

  • Ark固有のリソースのカスタムリソース(CARD): + Backup、` + Schedule`、 + Restore ++ Config +

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

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

次に、 `+ tar +`を使用してtarballを抽出します(ファイル名はリリースバージョンによって異なる場合があります)。

tar -xvzf

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

cd velero-

上記の必須リソースは、 + examples / common / 00-prereqs.yaml + YAMLファイルにあります。 `+ 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

クラスターに必要なArk Kubernetesオブジェクトを作成したので、https://github.com/StackPointCloud/ark-plugin-digitalocean [Ark DigitalOcean Plugin]をダウンロードしてインストールし、DigitalOcean Spacesを使用できるようにします。 「+ backupStorageProvider 」として(Kubernetesオブジェクト用)、DigitalOceanブロックストレージとして「 persistentVolumeProvider +」(永続ボリュームバックアップ用)として。

`+ velero- `ディレクトリから戻って、プラグインのバージョン ` v0.10.0 +`をダウンロードします。 StackPointCloud DigitalOceanプラグインhttps://github.com/StackPointCloud/ark-plugin-digitalocean/releases [リリースページ]でプラグインのリリースバージョンを見つけることができます。

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

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

tar -xvzf

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

cd ark-plugin-digitalocean-

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

nano examples/credentials-ark

`+ <AWS_ACCESS_KEY_ID> `と ` <AWS_SECRET_ACCESS_KEY> +`をSpacesアクセスキーとシークレットキーに置き換えます。

examples / credentials-ark

[default]
aws_access_key_id=
aws_secret_access_key=

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

次に、 `+ 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=

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

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:       <none>
Annotations:  <none>

Type:  Opaque

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

次に、プラグインのオブジェクトストレージバックエンドを設定する、 `+ default `という名前のArk ` BackupStorageLocation +`オブジェクトの作成に進むことができます。 これを行うには、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:
 config:
   s3Url: https://.digitaloceanspaces.com
   region:

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

`+ 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 DigitalOceanプラグインをインストールするまで、Arkサーバーポッドが正しく起動しない場合があります。 `+ ark-blockstore-digitalocean `プラグインをインストールするには、先ほどインストールした ` ark +`クライアントを使用します。

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

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

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

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

手順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:
       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-IP`と `+ EXTERNAL-IP`の両方が表示されるはずです。

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

`+ EXTERNAL-IP +`に注意し、Webブラウザーを使用してナビゲートします。

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

image:https://assets.digitalocean.com/articles/kubernetes_backup/nginx_welcome.png [Nginx Welcome Page]

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

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

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

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

次に、実行中のNginxコンテナーに「+ exec +」を追加して、その中にシェルを取得します。

kubectl exec -it nginx-deployment- --namespace nginx-example -- /bin/bash

Nginxコンテナー内に入ると、Nginxアクセスログを「+ cat +」します。

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:       <none>
Annotations:  <none>

Phase:

Namespaces:
 Included:  *
 Excluded:  <none>

Resources:
 Included:        *
 Excluded:        <none>
 Cluster-scoped:  auto

Label selector:  app=nginx

Snapshot PVs:  auto

TTL:  720h0m0s

Hooks:  <none>

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:  <none>

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

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

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

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

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

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

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

kubectl delete namespace nginx-example

Load BalancerエンドポイントでNginxにアクセスできなくなり、 `+ nginx-example +`デプロイメントが実行されなくなったことを確認します。

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

`+ ark +`クライアントを再度使用して、復元手順を実行できます。

ark restore create --from-backup nginx-backup

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

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

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-   1/1       Running   0          29m

次に、その中に + exec +

kubectl exec -it nginx-deployment- --namespace nginx-example -- /bin/bash

Nginxコンテナー内に入ると、Nginxアクセスログを「+ cat +」します。

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つの使用例の詳細については、https://heptio.github.io/ark/v0.9.0/use-cases [Arkの公式ドキュメント]を参照してください。

DigitalOcean Spacesの詳細については、https://www.digitalocean.com/docs/spaces/ [Spacesの公式ドキュメント]を参照してください。 ブロックストレージボリュームの詳細については、https://www.digitalocean.com/docs/volumes/ [ブロックストレージボリュームのドキュメント]を参照してください。

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