Argo CD
Verrazzanoは、指定されたターゲット環境における目的のアプリケーション状態のデプロイメントを自動化するArgo CDデプロイメントを提供します。Argo CDデータをバックアップし、リストアするシナリオがあります。
Verrazzanoは、Veleroを使用してArgo CDデータのバックアップとリストアを容易にします。
Veleroオペレータの前提条件
Argo CDのバックアップまたはリストア操作に進む前に、次の詳細が役立ちます:
- オブジェクト・ストアのバケット名。
- Amazon S3互換のオブジェクト・ストレージ・バケット。これには、Oracle Cloudテナンシの任意のコンパートメント内のOracle Cloud Object Storageバケットを使用できます。
- 参照できるように、バケット名とテナンシ名を書き留めておきます。
- オブジェクト・ストレージを使用したバケットの作成の詳細は、「バケットの管理」を参照してください。
- プライベート・クラウド、エンタープライズ・ネットワークまたはエアギャップ環境では、MinIOまたは同等のオブジェクト・ストア・ソリューションを使用できます。
- Amazon S3互換のオブジェクト・ストレージ・バケット。これには、Oracle Cloudテナンシの任意のコンパートメント内のOracle Cloud Object Storageバケットを使用できます。
- オブジェクト・ストアの接頭辞名。これは、バックアップ・コンポーネントによって作成されるバケット内の子フォルダになります。
- オブジェクト・ストアのリージョン名。
- オブジェクト・ストアの署名キー。
- Amazon S3互換オブジェクト・ストアの認証に必要な署名キー。これはアクセス・キー/秘密キーのペアです。
- Oracle Cloud Infrastructureでは、ユーザーまたは管理者が顧客秘密キーを作成します。
- 関連するアクセス・キーが秘密キーに対して生成されます。
- 顧客秘密キーを作成するには、顧客秘密キーに関する項を参照してください。
Argo CDをバックアップまたはリストアするには、まずVeleroを有効にする必要があります。
-
次の構成は、
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
-
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
-
Veleroでは、S3互換オブジェクト・ストアと通信するためにシークレットが必要であるため、オブジェクト・ストア資格証明を保持する
backup-secret.txt
ファイルを作成します。[default] aws_access_key_id=<object store access key> aws_secret_access_key=<object store secret key>
-
ネームスペース
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
ファイルが削除されていることを確認してください。 -
バックアップ・コンポーネントが後続のバックアップで参照する
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を無視するように、
defaultVolumesToRestic
はfalse
に設定されます。 - デプロイされたアプリケーションがデータベースまたは永続ボリュームを参照する場合は、バックアップを手動で作成する必要があります。
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
仕様でaccessMode
をReadOnly
に設定して、新しいクラスタのBackupStorageLocation
を読取り専用として構成することをお薦めします。これにより、オブジェクト・ストア内のバックアップが新しいクラスタから変更されなくなります。詳細は、Veleroのドキュメントの「Backup Storage Location」を参照してください。
-
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
-
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クラスタをリストアします。
-
すべての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: ...