ウェブサイト検索

KubernetesクラスタをTrilioVault for Kubernetesを使用してバックアップおよび復元する方法


KubernetesクラスタをTrilioVault for Kubernetesを使用してバックアップおよび復元する方法

著者は、Write for DOnationsプログラムの一環として寄付を受けるためにDiversity in Tech Fundを選択しました。

紹介

Kubernetes用のTrilioVault(TVK)は、アプリケーションのメタデータとデータを保護するクラウドネイティブなソリューションで、オンデマンドバックアップを独立したストレージリポジトリに保存します。

Trilioを使用するいくつかの利点があります。Trilioを使用すると、クラスタの完全または増分バックアップを取得し、データ損失が発生した場合にそれを復元できます。また、一つのクラスタから別のクラスタに移行し、バックアップと復元操作のためのプリフックおよびポストフックを実行できます。バックアップのスケジュール設定や、バックアップの保持ポリシーを定義することも可能です。最後に、ウェブ管理コンソールを使用して、バックアップおよび復元操作の状況を詳細に確認することができ、多くの他の機能も利用できます。

この記事では、TVKを使用してローカルKubernetesクラスタのデプロイメントやDigitalOcean Kubernetesサービスを保護するための手順について説明します。これには、クラスタ上にデプロイされたステートフルまたはステートレスアプリケーションが含まれます。このチュートリアルでは、KubernetesクラスタにTVKをデプロイし、クラスタのバックアップを作成し、そのバックアップから復元します。

成長のために構築されたシンプルな管理されたKubernetesサービスをチェックしてみてください。マネージドKubernetesホスティングサービスを探しているなら、ぜひご覧ください。

前提条件

このチュートリアルを完了するには、以下が必要です:

  • DigitalOceanのアカウント。お持ちでない場合は、新しいアカウントにサインアップしてください。
  • 複数の名前空間を持つDigitalOceanのKubernetesクラスター。クラスターの作成方法については、クラスターを作成する方法に関するドキュメントを参照してください。
  • DigitalOcean APIとの対話に関するdoctl。始めるには、doctlのインストールと設定に関するガイドをご覧ください。
  • Kubernetesとの対話のためのKubectl。インストールと設定については、Kubernetesの製品ドキュメントのインストールツールを参照してください。
  • DigitalOcean SpacesバケットまたはS3互換のオブジェクトストレージバケットとそのaccessキーを用意します。DigitalOcean Spacesバケットを使用するには、スペースの作成方法やアクセスキーを使用した管理アクセスの管理方法に関するガイドに従ってください。accessキーとsecretキーは後で使用するために安全な場所に保管してください。また、バックアップを保存するためにNFSエクスポートを使用することもできます。
  • Helm は TrilioVault Operator のリリースとアップグレードを管理するためのものです。インストールについては、私たちのチュートリアル「Helm 3 パッケージマネージャーを使用した Kubernetes クラスターへのソフトウェアのインストール方法」のステップ1を参照してください。
  • TrilioVaultライセンスはyamlファイルとして保存されます。このチュートリアルではClusterスコープのインストールを使用しており、ライセンスを取得する際に選択する必要がある場合があります。DigitalOceanのユーザーには、TVKのインストールが5年間無料です。DigitalOceanのKubernetesクラスターを使用していない場合は、Trilioのウェブサイトに登録してTVKライセンスをリクエストする必要があります。無料トライアルと無料の基本バージョンがあります。

ステップ 1 — Kubernetes クラスターの構成

このステップでは、Kubernetesクラスターの構成を確認して、TrilioVaultが正しく動作することを確認します。

TrilioVaultが正しく動作し、PersistentVolumeClaim(PVC)をバックアップするためには、Kubernetesクラスターがコンテナーストレージインターフェース(CSI)をサポートするように構成されている必要があります。デフォルトでは、DigitalOceanのマネージドKubernetesサービスには、CSIドライバーが既にインストールされ、構成されています。次のコマンドを使用してこれを確認できます:

  1. kubectl get storageclass

出力はこのように見えるべきです。

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.linux-console.net   Delete          Immediate           true                   1d

ご覧のとおり、プロビジョナーは dobs.csi.linux-console.net です。

TrilioVaultのインストールには、成功するインストールのためにvolumeSnapshotカスタムリソース定義(CRD)が必要です。次のコマンドを使用して確認できます:

  1. kubectl get crd | grep volumesnapshot

volumeSnapshotがすでにインストールされている場合、出力は次のようになります:

volumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z
volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z
volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |

volumeSnapshotがまだインストールされていない場合は、VolumeSnapshot CRDのインストールに関するドキュメントを参照してください。

最後に、CRDがv1 APIバージョンをサポートしていることを確認してください。確認するには、次のコマンドを実行します:

  1. kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

CRDのyaml出力の最後に、v1値を含むstoredVersionsリストが表示されるはずです:

...
- lastTransitionTime: "2022-01-20T07:58:06Z"
    message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419
    reason: ApprovedAnnotation
    status: "True"
    type: KubernetesAPIApprovalPolicyConformant
  storedVersions:
  - v1

これがインストールされていない場合は、VolumeSnapshot CRDのインストールに関するドキュメントを参照してください。

このステップでは、次のステップで行うTrilioVaultのインストールのために、Kubernetesの設定が準備されていることを確認しました。

ステップ2 — Kubernetes用のTrilioVaultをインストールする

このステップでは、ローカルKubernetesクラスターにTrilioVaultをデプロイし、Helmを介してTVKインストールを管理します。バックアップデータは、前提条件の一部として作成したS3互換バケットに保存されます。

TrilioVaultアプリケーションは、Kubernetesクラスタのディストリビューションに応じて、複数の方法でインストールできます。このチュートリアルでは、triliovault-operatorチャートを使用してHelm経由でTrilioVaultをインストールします。

このチュートリアルでは、tvkアプリケーションのためにClusterスコープインストールタイプを使用します。このタイプのインストールでは、TVKはすべての名前空間をまたいでアプリケーションを保護できます。(対照的に、Namespaceスコープインストールでは、TVKはその名前空間にデプロイされたアプリケーションのみを保護できます。)

Kubernetes用のTrilioVaultをインストールするには、必要条件の一部としてリクエストしたライセンスが必要です。TVKライセンスを取得する際には、Cluster-スコープのインストールを選択する必要がある場合があります。

Helmを使用したTrilioVaultのインストール

Helmを使用してTrilioVaultをインストールするには、まずTrilioVault Helmリポジトリを追加し、次のコマンドを使用して利用可能なチャートをリストします:

  1. helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
  2. helm repo update triliovault-operator
  3. helm search repo triliovault-operator

出力は以下のように見えます:

NAME                                            CHART VERSION   APP VERSION     DESCRIPTION
triliovault-operator/k8s-triliovault-operator   2.10.3          2.10.3          K8s-TrilioVault-Operator is an operator designe...

最後に、helmを使ってKubernetes用のTrilioVaultをインストールします。

  1. helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  2. --namespace tvk \
  3. --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
  4. --create-namespace

このコマンドは、デフォルトのパラメータを使用して triliovault-operator と TriloVault Manager (TVM) カスタムリソースをインストールします。これらのデフォルトのパラメータは、TrilioVault Helm 値ファイル triliovault-values.yaml に提供されています。

  • TVKオペレーター:TVKには、TrilioVault ManagerというCRDによって管理されるHelmベースのオペレーターがあります。TVKオペレーターは、アプリケーションのライフサイクルと、アプリケーションコンポーネントの1つがダウンした場合の自動回復を担当します。

  • TVKマネージャー:TVKアプリケーションには、いくつかのCRDとそのコントローラーが含まれています。独自のWebhookサーバーを持ち、CRDインスタンスの検証と変更を管理します。コントローラーは、カスタムリソースで行われた操作によって生成されたイベントを調整します。

このチュートリアルでは、次の内容を含むTrilioVault Helmの値ファイル(triliovault-values.yaml)のデフォルト値を使用します:

  • installTVK.applicationScope: TVKのインストールスコープはClusterまたはNamespacedに設定できます。このパラメータは、アプリケーションを「クラスター」または「ネームスペース」全体で保護し、TVKライセンスもインストールスコープに基づいて生成されます。このチュートリアルではCluster-スコープのインストールを使用しています。
  • installTVK.ingressConfig.host: TVK UI のホスト名のドメイン名であり、これは demo-tutorial.tvk-doks.com です。ユーザーはこのドメイン名を通じて TVK マネジメントコンソールにアクセスします。
  • installTVK.ComponentConfiguration.ingressController.service.type: TVK UIにアクセスするためのサービスの種類、例えばNodePortやLoadBalancerのようなものです。

注意:利用可能なすべてのオプションを確認するには、TrilioVault Helmの値ファイルを調べることができます。詳細については、TVKのドキュメントで設定オプションを確認してください。

次のコマンドを実行して、tvk のデプロイメントを確認してください:

  1. helm ls -n tvk

このコマンドは、あなたが追加したhelmリポジトリを一覧表示します:

NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
triliovault-manager-tvk tvk             1               2022-08-18 08:19:50.409742366 +0000 UTC deployed        k8s-triliovault-2.10.3          2.10.3
triliovault-operator    tvk             1               2022-08-18 08:15:51.618651231 +0000 UTC deployed        k8s-triliovault-operator-2.10.3 2.10.3

列 STATUS は deployed を表示する必要があります。

次に、TrilioVault が稼働していることを確認します。以下のコマンドを実行すると、tvk インストールの状態が表示されます:

  1. kubectl get deployments -n tvk

このコマンドは、tvk 名前空間内のデプロイメントを表示します。

出力は次のようになります:

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
k8s-triliovault-admission-webhook               1/1     1            1           83s
k8s-triliovault-control-plane                   1/1     1            1           83s
k8s-triliovault-exporter                        1/1     1            1           83s
k8s-triliovault-ingress-nginx-controller        1/1     1            1           83s
k8s-triliovault-web                             1/1     1            1           83s
k8s-triliovault-web-backend                     1/1     1            1           83s
triliovault-operator-k8s-triliovault-operator   1/1     1            1           4m22s

このREADY列は、ready/desiredのパターンに従って、利用可能なデプロイメントの数を表示します。すべてのデプロイメントポッドはREADY状態にあり、これはtvkが正常にインストールされたことを意味します。次に、あなたのTrilioVaultライセンスの種類と有効性を確認します。

TrilioVaultアプリケーションライセンスの確認

前提条件の一部として、Cluster スコープのインストールタイプ用に TrilioVault ライセンスをリクエストし、それを yaml ファイルとして保存しました。このセクションでは、TrilioVault ライセンスを適用し、そのステータスを確認し、フィールドを検査します。

前提条件の一部として、Trilioのウェブサイトから無料ライセンスをダウンロードし、それをyamlファイルとして保存しました。次に、以下のコマンドを使用して適用してください。

  1. kubectl apply -f your_license_filename.yaml -n tvk

次に、ライセンスがクラスタにインストールされており、アクティブ状態であるかを確認します:

  1. kubectl get license -n tvk

出力は以下のように見えます:

NAME            STATUS   MESSAGE                                   CURRENT NODE COUNT   GRACE PERIOD END TIME   EDITION     CAPACITY   EXPIRATION TIME        MAX NODES
your_license   Active   Cluster License Activated successfully.   1                                            Basic       100        2023-04-25T00:00:00Z   1

STATUSを確認してください。Activeである必要があります。また、EDITION列でライセンスの種類を確認し、EXPIRATION TIME列でライセンスの有効期限を確認することもできます。

ライセンスは License オブジェクトと呼ばれる特別な CRD を通じて管理されます。前の出力に示されているように、強調部分をあなたのライセンス名に置き換えて、以下のコマンドを実行することで確認できます:

  1. kubectl describe license your_license -n tvk

出力は以下のように見えます:

Name:         your_license
Namespace:    tvk
Labels:       <none>
Annotations:  generation: 4
              triliovault.trilio.io/creator: trilio.user@trilio.io
              triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe
              triliovault.trilio.io/updater:
                [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-04-21T09:50:40.530365762Z"},{"username":"0c9f7f19-c4...
API Version:  triliovault.trilio.io/v1
Kind:         License
Metadata:
  Creation Timestamp:  2022-04-06T08:07:16Z
...
Status:
  Condition:
    Message:         Cluster License Activated successfully.
    Status:           Active
    Timestamp:        2022-04-06T08:07:17Z
  Current CPU Count:  6
  Max CP Us:          6
  Message:            Cluster License Activated successfully.
  Properties:
    Active:                        true
    Capacity:                     100
    Company:                       TRILIO-KUBERNETES-LICENSE-GEN-BASIC
    Creation Timestamp:            2022-04-21T00:00:00Z
    Edition:                      Basic
    Expiration Timestamp:         2027-04-25T00:00:00Z
    Kube UID:                      1350188a-9289-49ba-9086-553e8cd7cabe
    License ID:                    TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e
    Maintenance Expiry Timestamp:  2027-04-25T00:00:00Z
    Number Of Users:               -1
    Purchase Timestamp:            2022-04-21T00:00:00Z
    Scope:                         Cluster
...

メッセージおよび容量フィールド、ならびにエディションを確認してください。

上記の出力には、Expiration Timestampフィールドでライセンスがいつ期限切れになるかも表示され、Scope(今回はClusterベースです)についても記載されています。詳細については、TrilioVault for Kubernetesのライセンス文書ページを参照してください。

このステップでは、あなたはTVKライセンスを適用し、そのステータスを確認しました。次に、ターゲット、バックアップ、復元などを管理するのに役立つTVKウェブコンソールを探索します。

ステップ3 — TVK管理コンソールへのアクセス

このステップでは、TVK管理コンソールにアクセスし、ターゲットを作成し、バックアップや復元などの操作をGUIを通じて管理できます。CLIからkubectlやCRDを使用して操作を管理することもできますが、TVK管理コンソールはポイントアンドクリック操作を通じて一般的なタスクを簡素化し、TVKクラスターオブジェクトのより良い視覚化と検査を提供します。

Helmを使用してTrilioVaultをインストールする前のセクションでは、ウェブ管理コンソールのために必要なコンポーネントをインストールして構成しました。コンソールにアクセスし、提供される機能を探るために、Kubernetesクラスターのkubeconfigファイルをエクスポートし、TVKのためにイングレスコントローラーサービスをポートフォワードします。

まず、Kubernetesクラスターのkubeconfigファイルをエクスポートします。このステップは、Webコンソールがあなたを認証できるようにするために必要です。

DigitalOceanのKubernetesサービスを使用している場合、kubeconfigファイルをエクスポートするために、次の手順に従うことができます。

利用可能なクラスタをリストしてください:

  1. doctl k8s cluster list

クラスタの名前で強調表示された値を置き換えて、クラスタ構成をYAMLに保存します:

  1. doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml

注意: クラスターが1つだけの場合、以下のコマンドを使用できます:

  1. DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
  2. doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

生成されたkubeconfigファイルは、トークンやクラスターにアクセスするために使用されるユーザー詳細などの機密データを含んでいるため、安全に保管するようにしてください。ファイルは公開されていない場所に保管し、パスワード管理アプリケーションや暗号化形式の使用を検討してください。

認証のためにkubeconfigファイルが手に入ったので、管理コンソールにアクセスするためにポートフォワードを設定します。

最初に、tvk 名前空間から ingress-nginx-controller サービスを特定します。次のコマンドを実行して tvk 名前空間内のサービスの一覧を表示することでこれを行うことができます。

  1. kubectl get svc -n tvk

出力は以下のように見えます:

NAME                                                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
k8s-triliovault-admission-webhook                               ClusterIP   10.245.202.17    <none>        443/TCP                      13m
k8s-triliovault-ingress-nginx-controller                        NodePort    10.245.192.140   <none>        80:32448/TCP,443:32588/TCP   13m
k8s-triliovault-ingress-nginx-controller-admission              ClusterIP   10.3.20.89       <none>        443/TCP                      13m
k8s-triliovault-web                                             ClusterIP   10.245.214.13    <none>        80/TCP                       13m
k8s-triliovault-web-backend                                     ClusterIP   10.245.10.221    <none>        80/TCP                       13m
triliovault-operator-k8s-triliovault-operator-webhook-service   ClusterIP   10.245.186.59    <none>        443/TCP                      16m

k8s-triliovault-ingress-nginx-controller の行を検索し、PORT(s) 列でポート 80 でリッスンしていることに注意してください。

TrilioVaultのイングレスサービスは、NodePortまたはLoadBalancerで構成できます。これは、TYPE列で確認できます。NodePortに設定されている場合は、ドメインにアクセス可能であることを確認する必要があります。NodePortを使用してTVK管理コンソールにアクセスする場合、TrilioVaultのイングレスサービスは、TVKコンソールにアクセスするために使用されるドメイン名を解決せずに外部ネットワークに直接接続することができません。この問題を解決するために、ドメイン名とIPアドレスのエントリをetc/hostsファイルに追加して、ドメイン名をIPに解決します。

これを行うには、/etc/hostsファイルを編集のために開き、このエントリを追加します:

127.0.0.1 demo-tutorial.tvk-doks.com

demo-tutorial.tvk-doks.comはTrilioVault Ingress Controllerサービスに設定されたドメイン名です。このドメインを使用してTVK管理コンソールにアクセスします。

ファイルを保存して閉じてください。

次に、TVKイングレスコントローラーサービスのポートフォワードを作成します。

  1. kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &

ウェブブラウザでコンソールにアクセスするには、次のURLに移動してください:http://demo-tutorial.tvk-doks.com:8080。kubeconfigファイルを求められたら、このセクションで作成したファイルを選択してください。

注意: TVKは、認証のためにトークンを生成するためにkubeconfigファイルを使用します。kubeconfigファイルに存在するユーザーの詳細は保存されません。

このステップでは、TVK管理コンソールへのアクセスを設定します。コンソールの利用可能な機能についての詳細は、TVKウェブ管理コンソールの公式ドキュメントをご覧ください。

次のステップでは、TrilioVaultのストレージバックエンドであるtargetを定義します。

ステップ4 — バックアップを保存するためのTrilioVaultターゲットの作成

TrilioVaultはバックアップをどこに保存するかを知る必要があります。これをターゲットと呼びます。サポートされているターゲットタイプは次の通りです:S3とNFS。このチュートリアルではS3ストレージタイプを使用します。詳細はTVKドキュメントのバックアップターゲットセクションをご覧ください。

S3ストレージにアクセスするには、各ターゲットがバケットの認証情報を知っている必要があります。それらはシークレットに保存されます。このステップでは、バックアップ用のTrilioVaultターゲットと、バケットの認証情報を保存するためのシークレットを作成します。

開始するには、ターゲット S3 バケットの資格情報を含む Kubernetes シークレットを作成します。nano またはお気に入りのテキストエディタを使用して、trilio-s3-target-secret というファイルを作成し、以下のコードを追加します。強調表示された値をあなたの DigitalOcean Spaces アクセスキーとシークレットキーに置き換えることを確認してください:

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target-secret
  namespace: tvk
type: Opaque
stringData:
  accessKey: your_bucket_access_key
  secretKey: your_bucket_secret_key

秘密の名前はtrilio-s3-target-secretです。これは、次に作成するtargetマニフェストのspec.objectStoreCredentials.credentialSecretフィールドで参照されます。secretは、TrilioVaultがインストールされたのと同じnamespace(デフォルトはtvk)またはお好みの別のnamespaceに置くことができます。(使用するnamespaceが正しく参照されていることを確認してください。)

ファイルを保存して閉じてください。

このマニフェストを適用してシークレットを作成するには、次のコマンドを実行してください:

  1. kubectl apply -f trilio-s3-target-secret.yaml -n tvk

注意: また、次のコマンドを実行して、プレースホルダー値をあなたのDigitalOceanバケットのアクセスキーとシークレットキーに置き換えることで、シークレットを作成することもできます。

  1. kubectl create secret generic trilio-s3-target-secret \
  2. --namespace=tvk \
  3. --from-literal=accessKey="your_bucket_access_key" \
  4. --from-literal=secretKey="your_bucket_secret_key"

あなたの出力はこのようになります:

secret/trilio-s3-target-secret created

次に、ターゲット用のマニフェストを作成します。新しいファイルを作成し、trilio-s3-target.yamlという名前を付け、次のコードブロックを追加します。bucketName、region、およびurlのハイライトされた値を、バケットのコントロールパネルで見つけたDigitalOceanバケットに関する情報で置き換えてください。

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: your_bucket_name
    region: your_bucket_region           # e.g.: nyc1 or us-east-1
    url: https://nyc1.digitaloceanspaces.com      # update the region to match your bucket
    credentialSecret:
      name: trilio-s3-target-secret
      namespace: tvk
  thresholdCapacity: 10Gi

上記の設定についての説明です:

  • spec.type: バックアップストレージの対象のタイプ (S3はObjectStoreです).
  • spec.vendor: ターゲットをホストしているサードパーティストレージベンダー(DigitalOcean Spacesの場合は、Otherを使用する必要があります)。
  • spec.enableBrowsing: 対象のためにブラウジングを有効にします。
  • spec.objectStoreCredentials: S3ストレージにアクセスするために必要なcredentials(credentialSecretを介して)を定義し、バケットのリージョンや名前などの他のパラメータも含まれます。
  • spec.thresholdCapacity: バックアップデータを保存するための最大閾値容量。

credentialSecretの名前が、あなたが今作成したシークレットと一致することに注意してください。

マニフェストファイルを保存して閉じてください。

では、kubectlを使用してtargetオブジェクトを作成します:

  1. kubectl apply -f trilio-s3-target.yaml -n tvk

あなたの出力はこのようになります:

target.triliovault.trilio.io/trilio-s3-target created

TrilioVault は trilio-s3-target-validator という名前の worker job を生成します。これは、S3 バケットの検証(可用性、権限など)を担当します。ジョブが成功裏に終了した場合、そのバケットは健全または可用と見なされ、trilio-s3-target-validator ジョブリソースはその後削除されます。

さて、以前に作成したtargetリソースがhealthyであるかどうかを確認するために、次のコマンドを実行し、ターゲットの名前を渡してください:

  1. kubectl get target trilio-s3-target -n tvk

出力はこのようになります:

NAME               TYPE          THRESHOLD CAPACITY   VENDOR   STATUS      BROWSING ENABLED
trilio-s3-target   ObjectStore   10Gi                 Other    Available   true

STATUS列の値はAvailableであり、これは対象が健康な状態であることを意味します。

TVK管理コンソールを使用してターゲットのステータスを確認することもできます。ログイン後、バックアップとリカバリーを選択し、次にターゲットをクリックしてビューします。

ステータスが利用可能と表示されている場合、S3ターゲットオブジェクトの設定が正常に完了しています。

しかし、設定に問題がある場合、ステータスは利用不可と表示されます。その場合、S3ターゲットバリデータージョブは実行されたままになり、ログを確認して問題を特定できるようになっています。ターゲットオブジェクトが正常にならない場合は、trilio-s3-target-validatorポッドのログを確認して問題を探ることができます。

ログを確認するには、まずターゲットバリデーターを見つけることから始めます:

  1. kubectl get pods -n tvk | grep trilio-s3-target-validator

出力はこれに似た形になりますが、ユニークな識別子が付与されます。

trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s

前の出力からターゲットバリデーターを使用して、以下のコマンドでデータログを取得します:

  1. kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

出力はこのように見えるでしょう(例外に注意してください):

...
INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete.
INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete.
ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time.
ERROR:root:/triliodata is not a mountpoint. We can't proceed further.
Traceback (most recent call last):
  File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main
    utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore
    mount_s3_datastore(metadata_list, base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore
    wait_until_mount(base_path)
  File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount
    base_path))
Exception: /triliodata is not a mountpoint. We can't proceed further.
...

追加のデバッグヘルプが必要な場合や、ターゲットを作成中に問題が発生した場合は、ドキュメントのトラブルシューティングセクションを確認するか、サポートにお問い合わせください。

このステップでは、TrilioVaultのターゲットを設定し、バケットの認証情報を提供するためのシークレットを作成しました。次に、バックアップと復元操作を実行し、災害復旧シナリオをカバーします。

ステップ5 — Kubernetesクラスターのバックアップと復元

このステップでは、Kubernetes クラスターのバックアップを実行します。その後、名前空間を削除し、バックアップを使用して重要なアプリケーションをそれらの名前空間に復元します。target から location を介してクラスターの復元操作を実行します。クラスターの移行を行う必要がある場合も同じ手順が適用されます。

ここでの主な考えは、重要なアプリケーションや設定を保持するすべての重要なネームスペースを含めることにより、完全なクラスターバックアップを実行することです。これはフルクラスターのバックアップと復元ではなく、むしろマルチネームスペースのバックアップおよび復元操作です。実際には、Kubernetesではすべてがネームスペース化されているため、これだけで十分です。

Kubernetesクラスタのバックアップを作成する

このセクションでは、Kubernetesクラスターのすべての重要なネームスペースを対象としたClusterBackupPlan CRDを使用して、マルチネームスペースバックアップを作成します。

クラスタバックアップ操作を開始するには、バックアップするリソースのセットを定義するClusterBackupPlanを作成します。仕様には、バックアップスケジュール、バックアップターゲット、およびバックアップするリソースが含まれます。リソースは、Helmリリース、オペレーター、または単純なKubernetes APIリソースの形式で定義できます。

テキストエディタを使用して、k8s-cluster-backup-plan.yamlという名前のClusterBackupPlanマニフェストファイルを作成します。次に、複数の名前空間をターゲットにするための一般的なマニフェストである以下のコードブロックを追加します:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

backupComponentsにリストされている名前空間がクラスターに存在することを確認してください。

あなたは、kube-system(または他のKubernetesクラスタ関連の名前空間)がbackupComponentsに含まれていないことに気付くかもしれません。通常、特別な要件がない限り、そのレベルで設定を保持する必要はありません。

ファイルを保存して閉じてください。

さて、kubectlを使用してClusterBackupPlanリソースを作成します:

  1. kubectl apply -f k8s-cluster-backup-plan.yaml

あなたの出力はこのようになります:

clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created

では、kubectlを使用してClusterBackupPlanのステータスを確認します:

  1. kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk

出力はこのように似ています:

NAME                              TARGET             ...   STATUS
k8s-cluster-backup-plan           trilio-s3-target   ...   Available

STATUS列の値を確認してください。値はAvailableに設定されている必要があります。

TVK管理コンソールを使用してClusterBackupPlanの状態を見ることもできます。ログインした後、バックアップと復元を選択し、次にバックアッププランを選択して表示します。

この時点で、あなたはClusterBackupPlanを作成しました。次に、実際のClusterBackupPlanをspec.clusterBackupPlan.nameで指し示す構成であるClusterBackupを作成します。ClusterBackupPlanは常に同じままであり、それを複数のClusterBackupマニフェストファイルに更新することで、複数のバックアップを作成できます。

今、k8s-cluster-backup.yamlという名前のClusterBackupマニフェストファイルを作成してください。次のコードブロックを追加します:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
  name: k8s-cluster-backup
  namespace: tvk
spec:
  type: Full
  clusterBackupPlan:
    name: k8s-cluster-backup-plan
    namespace: tvk

ファイルを保存して閉じてください。

最後に、kubectlを使ってClusterBackupリソースを作成します:

  1. kubectl apply -f k8s-cluster-backup.yaml

ClusterBackup マニフェストを適用することで、バックアッププロセスがトリガーされます。

出力は以下のようになります:

clusterbackup.triliovault.trilio.io/k8s-cluster-backup created

さて、kubectlを使用してClusterBackupの状態を確認してください。

  1. kubectl get clusterbackup k8s-cluster-backup -n tvk

出力は次のように似ています:

NAME                 BACKUPPLAN               BACKUP TYPE   STATUS      ...   PERCENTAGE COMPLETE
k8s-cluster-backup   k8s-cluster-backup-plan  Full          Available   ...   100

STATUS列の値を確認してください。これはAvailableに設定されている必要があります。また、PERCENTAGE COMPLETEは100に設定されている必要があります。

TVK管理コンソールを使用してクラスターのバックアップステータスも確認できます。メインダッシュボードから、左ペインの監視を選択し、その後TrilioVault監視を選択します。

フルクラスターのバックアップが完了するまでには、プロセスに関連する名前空間、関連リソース、およびPVCに存在するデータの数によってしばらく時間がかかります。出力が上記のように見える場合、バックアッププランに含まれるすべての重要なアプリケーションの名前空間が正常にバックアップされました。

ウェブコンソールのメインダッシュボードを開き、multi-namespaceバックアップを確認することもできます。メインダッシュボードから、バックアップとリカバリを選択し、次にネームスペースを選択してください。右上では、リストビューとハニカム構造の切り替えができます:

ハニカムビューでは、バックアップの一部であったすべての重要な名前空間が強調表示されています。

このセクションでは、クラスターのバックアップを作成しました。次のセクションでは、ネームスペースを削除し、その後バックアップから復元します。

名前空間を削除する

クラスターのバックアップがあるので、後でバックアップから復元できるように、名前空間を削除します。名前空間を削除するには、以下のコマンドを実行し、必要に応じて強調表示された名前空間を置き換えてください。

  1. kubectl delete ns wordpress
  2. kubectl delete ns mysqldb
  3. kubectl delete ns etcd

あなたの出力はこのようになります:

namespace "wordpress" deleted
namespace "mysqldb" deleted
namespace "etcd" deleted

名前空間が削除されたので、バックアップを復元します。

管理コンソールを使用してバックアップを復元する

このセクションでは、TVKウェブコンソールを使用して、バックアップから重要なアプリケーションをすべて復元します。復元プロセスでは、バックアップが保存されているtargetが検証されます。TVKは、datamoverとmetamover podsを使用してバックアップファイルを取得するために、ターゲットリポジトリに接続します。TVKは、バックアップストレージから取得したKubernetesアプリケーションを作成します。

復元操作を開始するには、まずターゲットマニフェストを再作成する必要があります。既存のネームスペースが削除されたため、それらのネームスペースで作成されたターゲットカスタムリソースも削除されました。つまり、クラスター上にはターゲットカスタムリソースが存在しないということです。

「バックアップを保存するためのTrilioVaultターゲットの作成」に記載されている通りにTVKターゲットを設定し、バックアップデータがある同じS3バケットを指すようにします。また、ターゲットブラウジングが有効になっていることを確認してください。

次に、バックアップと復元に移動し、ターゲットを選択します。名前空間: すべてが選択されていることを確認してください。

利用可能なバックアップを一覧表示するには、右側のアクションボタンをクリックし、ドロップダウンメニューからブラウザを起動オプションを選択します。

これが機能するためには、ターゲットにenableBrowsingフラグがtrueに設定されている必要があります。

ブラウザを起動を選択すると、ターゲットブラウザが表示されます:

今、バックアッププランのリストからk8s-cluster-backup-plan項目をクリックしてください。バックアップに関する情報、包括してそのステータスが表示されるサブウィンドウが右側に現れます。

右のサブウィンドウからk8s-cluster-backup項目をクリックして展開します:

復元プロセスを開始するには、復元ボタンをクリックしてください。

次に、復元プロセスのオプションが表示されたポップアップウィンドウが表示されます。復元プロセスの異なるオプションを理解するために、TrilioVaultのドキュメンテーションの復元フラグセクションで各フラグの詳細を確認できます。

復元カスタムリソース作成のために復元名を入力してください。名前を提供すると、バックアップからすべての重要なネームスペースを、データを復元したいネームスペースにマッピングできます。この場合、構成ペインでネームスペース構成を選択し、希望するネームスペースを選んでください。

復元プロセスが開始されると、その進行状況を監視できます。次のような進行状況ウィンドウが表示されます:

しばらくして、進行状況が完了すると、マルチネームスペースの復元操作が正常に完了したことになります。

このセクションでは、管理コンソールを使用してバックアップを復元しました。次のセクションでは、復元操作が成功したことを確認します。

DOKSクラスタアプリケーションの状態を確認する

このセクションでは、復元操作が成功したことと、復元後にアプリケーションにアクセスできることを確認します。まず、次のコマンドを実行して、リストされている名前空間からアプリケーションに関連するすべてのオブジェクトを取得します:

  1. kubectl get all --namespace wordpress
  2. kubectl get all --namespace mysqldb
  3. kubectl get all --namespace etcd

各アプリケーションの出力は以下のようになります:

NAME                             READY   STATUS             RESTARTS   AGE
pod/wordpress-5dcf55f8fc-72h9q   1/1     Running            1          2m21s
pod/wordpress-mariadb-0          1/1     Running   			1          2m20s

NAME                        TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
service/wordpress           LoadBalancer   10.120.1.38    34.71.102.21   80:32402/TCP,443:31522/TCP   2m21s
service/wordpress-mariadb   ClusterIP      10.120.7.213   <none>         3306/TCP                     2m21s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   1/1     1            1           2m21s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/wordpress-5dcf55f8fc   1         1         1       2m21s

NAME                                 READY   AGE
statefulset.apps/wordpress-mariadb   1/1     2m21s

出力の詳細は、1/1のWordPressアプリケーションデプロイメントのコンテナがREADY状態にあることを示しています。また、WordPressアプリケーションのポッドとWordPress MariaDBのポッドはRUNNING状態にある1/1のコンテナを持っています。これらの状態は、アプリケーションが正常に復元されたことを確認しています。

次のステップでは、あなたのDOKS クラスタアプリケーションのスケジュールされた(または自動)バックアップを実行する方法を学びます。

ステップ6 — バックアップのスケジューリング

スケジュールに基づいて自動的にバックアップを作成することは非常に便利な機能です。何か問題が発生した場合に、時間を巻き戻し、システムを以前の作業状態に復元することができます。デフォルトでは、TrilioVaultは3つのスケジュールポリシーを作成します:毎日、毎週、および毎月。

TVKコンソールで、バックアップとリカバリの下にあるデフォルトポリシーを表示し、次にスケジューリングポリシーを確認できます。

スケジューリングポリシーは、BackupPlan または ClusterBackupPlan CRD に使用できます。

「scheduled-backup-every-5min.yaml」という名前のマニフェストファイルを作成し、次のコードを追加してください。これは一般的なカスタムスケジュールポリシーCRDです:

apiVersion: triliovault.trilio.io/v1
kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" # trigger every 5 minutes

このマニフェストは、tvk 名前空間の下に scheduled-backup-every-5min という呼ばれるスケジュールバックアップポリシーを作成します。これは、BackupPlan オブジェクトに応じて5分ごとにスケジュールバックアップをトリガーするために使用されます。

マニフェストを作成した後、それを使用してスケジュールポリシーを作成できます:

  1. kubectl apply -f scheduled-backup-every-5min.yaml

あなたの出力はこのようになります:

policy.triliovault.trilio.io/scheduled-backup-every-5min created

スケジューリングポリシーを適用するには、それをClusterBackupPlan CRDに追加します。ステップ5で作成したClusterBackupPlan CRDを開き、ハイライトされた行を追加します:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

ClusterBackupPlan CRDは、spec.backupConfig.schedulePolicyフィールドを介して以前に定義されたPolicy CRDを参照しています。fullまたはincrementalバックアップ用に別々のポリシーを作成することができるため、fullBackupPolicyまたはincrementalBackupPolicyをspecで指定することができます。

ファイルを保存して閉じてください。

このステップでは、バックアップをスケジュールし、ClusterBackupPlanにスケジューリングポリシーを追加しました。次のステップでは、バックアップの保持ポリシーを設定する方法を学びます。

ステップ7 — バックアップ保持ポリシーの作成

このステップでは、バックアップの保持ポリシーを作成します。このポリシーはバックアップの頻度を決定します。保持ポリシーは、ストレージが有限であるため重要であり、保持するオブジェクトが多すぎると高額になる可能性があります。

保持ポリシーは、バックアップを保持する数と、コンプライアンス要件に基づいてバックアップを削除する間隔を定義できるようにします。保持ポリシーCRDは、日、週、月、年、最新などの観点から保持するバックアップの数を定義するためのYAML仕様を提供します。

TVKにはデフォルトの保持ポリシーもあり、これはTVKコンソールのバックアップと復元の下の保持ポリシーで確認できます。

保持ポリシーは BackupPlan または ClusterBackupPlan CRDのいずれかに使用できます。 sample-retention-policy.yaml という新しいファイルを作成し、次の行を追加してください:

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-retention-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

これはRetentionタイプの典型的なPolicyマニフェストです。上記の構成に関する説明は以下の通りです:

  • spec.type: ポリシータイプを定義します: Retention または Schedule.
  • spec.retentionConfig: バックアップの保持に使用する間隔や、どれだけのバックアップを保持するかなど、保持設定について説明します。
  • spec.retentionConfig.latest: 保持される最新のバックアップの最大数。
  • spec.retentionConfig.weekly: 週間に保持されるバックアップの最大数。
  • spec.retentionConfig.dayOfWeek: 週間バックアップを維持するための曜日。
  • spec.retentionConfig.monthly: 月ごとに保持するバックアップの最大数。
  • spec.retentionConfig.dateOfMonth: 月次バックアップを維持するための日付。
  • spec.retentionConfig.monthOfYear: 年次バックアップのために保持するバックアップの月。
  • spec.retentionConfig.yearly: 年間に保持されるバックアップの最大数。

上記で設定されたリテンションポリシーでは、バックアップポリシーは、週ごとに毎水曜日に1つのバックアップを保持し、月ごとに15日に1つのバックアップを保持し、年ごとに毎3月に1つのバックアップを保持します。全体として、最新の2つのバックアップが利用可能です。

保持ポリシーリソースを作成する基本的な流れは、スケジュールされたバックアップと同じです。保持ポリシーを参照するためには、BackupPlanまたはClusterBackupPlanのCRDを定義する必要があります。そして処理をトリガーするために、BackupまたはClusterBackupオブジェクトが必要です。

保持ポリシーを適用するには、ClusterBackupPlan CRDを開き、以下のように更新してください:

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: sample-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

マニフェストは、対象のポリシーを参照するためにretentionPolicyフィールドを使用します。スケジュールされたバックアップを実行できるように、両方のタイプのポリシーが設定されたバックアッププランを持つことができます。また、保持戦略にも対応できます。

このステップでは、バックアップの保持ポリシーを設定します。

結論

このチュートリアルでは、Kubernetes用のTrilioVaultをインストールし、それを使用してクラスターのバックアップと復元を行いました。また、バックアップのスケジュールを設定し、保持ポリシーを構成しました。

あなたはKubernetesのTrilioVaultを使用してクラスターのバックアップの基本的なタスクを達成しましたので、これからTrilioVaultの製品ドキュメントからの次の内容を使用して他のトピックや資料を探求する準備が整いました。

  • TVKカスタムリソース定義APIドキュメント。
  • バックアップ操作のためのプレ/ポストフックを統合する方法、さまざまなデータベースの例を示します。
  • マルチクラスター管理
  • Helmリリースのバックアップは、Helmリリースのバックアップ戦略の例を示しています。
  • 不変バックアップは、ターゲットストレージ上のバックアップが上書きされるのを制限します。
  • バックアップの暗号化、これはターゲット(ストレージ)上の敏感なデータを暗号化し保護する方法を説明しています。
  • 変換を復元する
  • 災害復旧計画

Kubernetesに関する詳細は、DigitalOcean Kubernetes (DOKS) の製品ドキュメントや追加のチュートリアルをチェックしてください。

関連記事: