Veleroを使用してDigitalOceanでKubernetesクラスタをバックアップおよび復元する方法
序章
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
それに:
- cd /tmp
使用する wget
そして、リリースtarballをダウンロードするために以前にコピーしたリンク:
- wget https://link_copied_from_release_page
ダウンロードが完了したら、を使用してtarballを抽出します tar
(ファイル名はリリースバージョンとOSによって異なる場合があることに注意してください):
- tar -xvzf velero-v1.2.0-linux-amd64.tar.gz
The /tmp
これで、ディレクトリに抽出されたものが含まれるはずです velero-v1.2.0-linux-amd64
ディレクトリとダウンロードしたtarball。
を実行できることを確認します velero
バイナリを実行することによるクライアント:
- ./velero-v1.2.0-linux-amd64/velero help
次のヘルプ出力が表示されます。
OutputVelero 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
:
- sudo mv velero-v1.2.0-linux-amd64/velero /usr/local/bin/velero
これで、Veleroサーバーのシークレットを設定し、それをKubernetesクラスターにデプロイする準備が整いました。
ステップ2—シークレットの構成
Veleroのサーバーコンポーネントを設定する前に、DigitalOceanSpacesキーとAPIトークンを準備する必要があります。 再び一時ディレクトリに移動します /tmp
を使用して cd
指図:
- cd /tmp
次に、DigitalOcean用のVeleroプラグインのコピーをダウンロードします。 プラグインのGithubリリースページにアクセスし、末尾がファイルへのリンクをコピーします .tar.gz
.
使用する wget
そして、リリースtarballをダウンロードするために以前にコピーしたリンク:
- wget https://link_copied_from_release_page
ダウンロードが完了したら、を使用してtarballを抽出します tar
(ファイル名はリリースバージョンによって異なる場合があることに注意してください):
- tar -xvzf v1.0.0.tar.gz
The /tmp
これで、ディレクトリに抽出されたものが含まれるはずです velero-plugin-1.0.0
ディレクトリとダウンロードしたtarball。
次に cd
に velero-plugin-1.0.0
ディレクトリ:
- cd velero-plugin-1.0.0
これで、DigitalOcean SpaceのアクセスキーとAPIトークンを保存して、Kubernetesシークレットとして使用できるようになりました。 まず、 examples/cloud-credentials
お気に入りのエディタを使用してファイルします。
- nano 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トークンが含まれるようにファイルします。 お気に入りのエディターでファイルを開きます。
- 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をインストールします。 次のコマンドを実行し、必要に応じて値を置き換えます。
- velero install \
- --provider velero.io/aws \
- --bucket velero-backups \
- --plugins velero/velero-plugin-for-aws:v1.0.0,digitalocean/velero-plugin:v1.0.0 \
- --backup-location-config s3Url=https://nyc3.digitaloceanspaces.com,region=nyc3 \
- --use-volume-snapshots=false \
- --secret-file ./examples/cloud-credentials
次の出力が表示されます。
OutputCustomResourceDefinition/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列を使用)。
- kubectl get deployment/velero --namespace velero
OutputNAME 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ブロックストレージ用の正しいプラグインを使用するように指示する必要があります。
次のコマンドを実行してプラグインを有効にし、デフォルトのスナップショットプロバイダーとして登録します。
- velero snapshot-location create default --provider digitalocean.com/velero
次の出力が表示されます。
OutputSnapshot 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
ファイル:
- cat examples/01-velero-secret.patch.yaml
これは次のようになります(トークンの代わりにトークンを使用します <DIGITALOCEAN_API_TOKEN>
プレースホルダー):
. . .
---
apiVersion: v1
kind: Secret
stringData:
digitalocean_token: <DIGITALOCEAN_API_TOKEN>
type: Opaque
次に、デプロイメントのパッチファイルを見てみましょう。
- cat examples/02-velero-deployment.patch.yaml
次の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
指図:
- kubectl patch secret/cloud-credentials -p "$(cat examples/01-velero-secret.patch.yaml)" --namespace velero
次の出力が表示されます。
Outputsecret/cloud-credentials patched
最後に、デプロイメントにパッチを適用します。 次のコマンドを実行します。
- kubectl patch deployment/velero -p "$(cat examples/02-velero-deployment.patch.yaml)" --namespace velero
パッチが成功すると、次のように表示されます。
Outputdeployment.apps/velero patched
パッチを適用したデプロイメントがを使用して機能していることを確認しましょう kubectl get
に velero
名前空間:
- kubectl get deployment/velero --namespace velero
次の出力が表示されます。
OutputNAME 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
.
選択したエディターを使用してこのファイルを開きます。
- 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
:
- kubectl apply -f examples/nginx-example.yaml
次の出力が表示されます。
Outputnamespace/nginx-example created
persistentvolumeclaim/nginx-logs created
deployment.apps/nginx-deploy created
service/nginx-svc created
展開が成功したことを確認します。
- kubectl get deployments --namespace=nginx-example
次の出力が表示されます。
OutputNAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 1m23s
一度 Available
1に達すると、を使用してNginxロードバランサーの外部IPをフェッチします kubectl get
:
- kubectl get services --namespace=nginx-example
あなたは両方の内部を見る必要があります CLUSTER-IP
と EXTERNAL-IP
のために my-nginx
サービス:
OutputNAME 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
:
- kubectl get pods --namespace nginx-example
OutputNAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 4m14s
今、 exec
実行中のNginxコンテナに入れて、その中にシェルを取得します。
- kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash
Nginxコンテナ内に入ると、 cat
Nginxアクセスログ:
- cat /var/log/nginx/access.log
いくつかのNginxアクセスエントリが表示されます。
Output10.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" "-"
これらをメモして(特にタイムスタンプ)、復元手順の成功を確認するために使用します。 ポッドを終了します。
- exit
これで、バックアップ手順を実行してすべてをコピーできます nginx
KubernetesオブジェクトをSpacesに送信し、Nginxのデプロイ時に作成した永続ボリュームのスナップショットを取得します。
と呼ばれるバックアップを作成します nginx-backup
を使用して velero
コマンドラインクライアント:
- velero backup create nginx-backup --selector app=nginx
The --selector app=nginx
VeleroサーバーにKubernetesオブジェクトのみをバックアップするように指示します app=nginx
ラベルセレクター。
次の出力が表示されます。
OutputBackup 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
少し遅れて次の出力を提供する必要があります。
OutputName: 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
名前空間。 これにより、ロードバランサーや永続ボリュームなど、ネームスペース内のすべてが削除されます。
- kubectl delete namespace nginx-example
ロードバランサーエンドポイントでNginxにアクセスできなくなったこと、および nginx-example
デプロイメントは実行されなくなりました:
- kubectl get deployments --namespace=nginx-example
OutputNo resources found in nginx-example namespace.
これで、もう一度を使用して復元手順を実行できます。 velero
クライアント:
- velero restore create --from-backup nginx-backup
ここでは使用します create
Veleroを作成するには Restore
からのオブジェクト nginx-backup
物体。
次の出力が表示されます。
- OutputRestore request "nginx-backup-20200102235032" submitted successfully.
- Run `velero restore describe nginx-backup-20200102235032` or `velero restore logs nginx-backup-20200102235032` for more details.
復元されたデプロイメントのステータスを確認します。
- kubectl get deployments --namespace=nginx-example
OutputNAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 58s
永続ボリュームの作成を確認します。
- kubectl get pvc --namespace=nginx-example
OutputNAME 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
再度アドレス:
- kubectl get services --namespace nginx-example
OutputNAME 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
:
- kubectl get pods --namespace nginx-example
OutputNAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 2m20s
それで exec
それに:
- kubectl exec -it nginx-deploy-694c85cdc8-vknsk --namespace nginx-example -- /bin/bash
Nginxコンテナ内に入ると、 cat
Nginxアクセスログ:
- cat /var/log/nginx/access.log
Output10.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リポジトリ。