Argo CD

Argo CDのバックアップとリストア

Verrazzanoは、指定されたターゲット環境における目的のアプリケーション状態のデプロイメントを自動化するArgo CDデプロイメントを提供します。Argo CDデータをバックアップし、リストアするシナリオがあります。

Verrazzanoは、Veleroを使用してArgo CDデータのバックアップとリストアを容易にします。

ノート: アップグレード時には、アップグレード先のバージョンではなく、既存のVerrazzanoバージョンのバックアップ・ドキュメントに従ってください。

Veleroオペレータの前提条件

Argo CDのバックアップまたはリストア操作に進む前に、次の詳細が役立ちます:

  • オブジェクト・ストアのバケット名。
    • Amazon S3互換のオブジェクト・ストレージ・バケット。これには、Oracle Cloudテナンシの任意のコンパートメント内のOracle Cloud Object Storageバケットを使用できます。
      • 参照できるように、バケット名とテナンシ名を書き留めておきます。
      • オブジェクト・ストレージを使用したバケットの作成の詳細は、「バケットの管理」を参照してください。
    • プライベート・クラウド、エンタープライズ・ネットワークまたはエアギャップ環境では、MinIOまたは同等のオブジェクト・ストア・ソリューションを使用できます。
  • オブジェクト・ストアの接頭辞名。これは、バックアップ・コンポーネントによって作成されるバケット内の子フォルダになります。
  • オブジェクト・ストアのリージョン名。
  • オブジェクト・ストアの署名キー。
    • Amazon S3互換オブジェクト・ストアの認証に必要な署名キー。これはアクセス・キー/秘密キーのペアです。
    • Oracle Cloud Infrastructureでは、ユーザーまたは管理者が顧客秘密キーを作成します。
      • 関連するアクセス・キーが秘密キーに対して生成されます。
      • 顧客秘密キーを作成するには、顧客秘密キーに関する項を参照してください。

Argo CDをバックアップまたはリストアするには、まずVeleroを有効にする必要があります。

  1. 次の構成は、prodインストール・プロファイルを使用してveleroを有効にする方法を示しています。

      $ kubectl apply -f -<<EOF
        apiVersion: install.verrazzano.io/v1beta1
        kind: Verrazzano
        metadata:
          name: example-verrazzano
        spec:
          profile: prod
          components:
            velero:
              enabled: true
    EOF
    

  2. Verrazzanoのインストールが完了したら、Veleroポッドがverrazzano-backupネームスペースで実行されていることを確認します。

    $ kubectl get pod -n verrazzano-backup
    
    # Sample of pods running after enabling the velero component
    NAME                      READY   STATUS    RESTARTS   AGE
    restic-ndxfk              1/1     Running   0          21h
    velero-5ff8766fd4-xbn4z   1/1     Running   0          21h
    

  3. Veleroでは、S3互換オブジェクト・ストアと通信するためにシークレットが必要であるため、オブジェクト・ストア資格証明を保持するbackup-secret.txtファイルを作成します。

    [default]
    aws_access_key_id=<object store access key>
    aws_secret_access_key=<object store secret key>
    

  4. ネームスペースverrazzano-backupに、verrazzano-backup-credsなどのKubernetesシークレットを作成します。

    $ kubectl create secret generic -n verrazzano-backup <secret-name> --from-file=<key>=<full_path_to_creds_file>
    

    次に、例を示します。

    $ kubectl create secret generic -n verrazzano-backup verrazzano-backup-creds --from-file=cloud=backup-secret.txt
    

    ノート: 機密データの誤用を避けるため、Kubernetesシークレットを作成した後でbackup-secret.txtファイルが削除されていることを確認してください。

  5. バックアップ・コンポーネントが後続のバックアップで参照するBackupStorageLocationリソースを作成します。Oracle Cloud Object Storageを使用する次のBackupStorageLocationの例を参照してください。詳細は、Veleroのドキュメントの「Backup Storage Location」を参照してください。

     $ kubectl apply -f -<<EOF
       apiVersion: velero.io/v1
       kind: BackupStorageLocation
       metadata:
         name: verrazzano-backup-location
         namespace: verrazzano-backup
       spec:
         provider: aws
         objectStorage:
           bucket: example-verrazzano
           prefix: backup-demo
         credential:
           name: verrazzano-backup-creds
           key: cloud
         config:
           region: us-phoenix-1
           s3ForcePathStyle: "true"
           s3Url: https://<myobjstorenamespace>.compat.objectstorage.us-phoenix-1.oraclecloud.com
    EOF
    

Veleroを使用したArgo CDバックアップ

argocd以外の異なるネームスペースで実行されているリソースを持つアプリケーションを作成した場合、次の条件に基づいてArgo CDをバックアップおよびリストアできます:

  • 異なるネームスペースで実行されているアプリケーションが永続ボリュームを使用する場合、アプリケーションがPVで実行されているネームスペースをバックアップできます。
  • 異なるネームスペースで実行されているアプリケーションが永続ストレージを使用しない場合は、次のようにします:
    • ネームスペースをリストとして指定して、アプリケーションが実行されているすべてのネームスペースのバックアップを取得します。
    • argocdネームスペースのみのバックアップを取得し、異なるアプリケーションのすべてのネームスペースを作成してから、バックアップからリストアします。

次の例は、Argo CDバックアップを開始するために作成できるサンプルのVelero Backup APIリソースを示しています。

  $ kubectl apply -f - <<EOF
  apiVersion: velero.io/v1
  kind: Backup
  metadata:
    name: verrazzano-argocd-backup
    namespace: verrazzano-backup
  spec:
    includedNamespaces:
    - argocd
    defaultVolumesToRestic: false
    storageLocation:  verrazzano-backup-location
EOF

上の例では、Argo CDコンポーネントがバックアップされます:

  • Veleroが関連するPVCを無視するように、defaultVolumesToResticfalseに設定されます。
  • デプロイされたアプリケーションがデータベースまたは永続ボリュームを参照する場合は、バックアップを手動で作成する必要があります。
Argo CDのバックアップ・ステータス
# To display the status of the backup, run the following command
$ kubectl get backup.velero.io -n verrazzano-backup verrazzano-argocd-backup -o yaml
# Sample output showing just the status portion of the backup
status:
  completionTimestamp: ...
  expiration: ...
  formatVersion: 1.1.0
  phase: Completed
  progress:
    itemsBackedUp: 232
    totalItems: 232
  startTimestamp: ...
  version: 1

Argo CDスケジュール済みバックアップ

VeleroではSchedule APIがサポートされます。これは、指定のcron表記のバックアップを実行するためにVeleroサーバーに送信される繰り返し可能なリクエストです。Scheduleオブジェクトが作成されると、Veleroサーバーがバックアップ・プロセスを開始します。その後、指定のcron式の次の有効なポイントまで待機し、バックアップ・プロセスを繰返し実行します。

Veleroを使用したArgo CDリストア

Argo CDリストア操作を開始するには、最初に、システムで実行されている既存のArgo CDおよびすべての関連データを削除します。削除するデータが不要であることを確認してください。リストア操作では、指定されたバックアップからのみデータがリストアされ、そのバックアップ以降のすべての追加データは削除によって破棄されます。

Argo CDを別のクラスタにリストアする場合は、元のクラスタで構成された同じバックアップ記憶域の場所を指すVelero BackupStorageLocationリソースを新しいクラスタに作成します。これにより、元のクラスタのバックアップによって作成されたVeleroリソースが新しいクラスタに自動的に同期されます。同期が完了すると、新しいクラスタ上の元のクラスタからバックアップにアクセスできます。BackupStorageLocation仕様でaccessModeReadOnlyに設定して、新しいクラスタのBackupStorageLocationを読取り専用として構成することをお薦めします。これにより、オブジェクト・ストア内のバックアップが新しいクラスタから変更されなくなります。詳細は、Veleroのドキュメントの「Backup Storage Location」を参照してください。

  1. Argo CDコンポーネントとネームスペースを削除します。

    # These are sample commands to demonstrate the Argo CD restore process
    $ kubectl delete sts -l app.kubernetes.io/part-of=argocd -n argocd
    $ kubectl delete deploy -l app.kubernetes.io/part-of=argocd -n argocd
    $ kubectl delete pvc -n argocd <pvc name>
    $ kubectl delete ns argocd
    

  2. Argo CDリストア操作を実行するために、次のVelero Restore APIオブジェクトの例を呼び出すことができます。

    ノート: Argo CDの場合、includedNamespacesはアプリケーションがデプロイされているすべてのネームスペースをリストします。

     $ kubectl apply -f - <<EOF
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: verrazzano-argocd-restore
        namespace: verrazzano-backup
      spec:
        backupName: verrazzano-argocd-backup
        includedNamespaces:
        - argocd
    EOF
    

    上の例は、既存のバックアップからArgo CDクラスタをリストアします。

  3. すべてのArgo CDポッドがRUNNING状態になるまで待ちます。

      $ kubectl wait -n argocd --for=condition=ready pod -l app.kubernetes.io/instance=argocd
    

    サンプル出力:

        pod/argocd-application-controller-0 condition met
        pod/argocd-applicationset-controller-8489bfbb8-4f686 condition met
        pod/argocd-notifications-controller-c4f5c9684-8qzl8 condition met
        pod/argocd-redis-548968fdd9-4jcrf condition met
        pod/argocd-repo-server-5889c8cc68-5n8j6 condition met
        pod/argocd-server-67b6994987-j9z99 condition met
    

Argo CDのリストア・ステータス
# To display the status of the restore, run the following command
$ kubectl get restore -n verrazzano-backup verrazzano-argocd-restore -o yaml
# Sample output showing just the status portion of the restore
status:
  completionTimestamp: ...
  phase: Completed
  progress:
    itemsRestored: 75
    totalItems: 75
  startTimestamp: ...