Appendix C - Common object stores for backups
=============================================
.. raw:: html
.. Warning::
CloudNativePG 1.26の時点で、** Barman Cloudプラグイン**を優先して、**ネイティブBarman Cloudサポートは非推奨です**。現時点ではネイティブ統合は機能し続けていますが、適切なテストの後、プラグインベースのインターフェイスへの段階的な移行を開始することを強くお勧めします。 Barman Cloud Pluginドキュメントでは、
`how to use common object stores `_ について説明しています。
:ref:`Appendix B - Backup on object stores ` ファイルは、 Barman
Cloudインフラストラクチャでサポートされている任意のサービスに保存できます。つまり
- :ref:`AWS S3 `
- :ref:`Azure Blob Storage `
- :ref:`Google Cloud Storage `
サポートされているサービスの互換性のある実装を使用することもできます。
必要なセットアップは、選択したストレージプロバイダーによって異なり、以降のセクションで説明します。
AWS S3
------
`AWS Simple Storage Service (S3) `_ は、Amazonが提供する非常に人気のオブジェクトストレージサービスです。
CloudNativePGバックアップに関する限り、2つの方法でバックアップをS3バケットに保存する権限を定義できます。
- CloudNativePGがEKSで実行されている場合。
`IRSA authentication method `_ を使用することができます
- または、 ``ACCESS_KEY_ID`` および\ ``ACCESS_SECRET_KEY``
資格情報を使用できます
AWSアクセスキー
^^^^^^^^^^^^^^^
環境に関する次の情報が必要です。
- ``ACCESS_KEY_ID``
S3にファイルをアップロードするために使用されるアクセスキーのID
- ``ACCESS_SECRET_KEY`` 上記のアクセスキーのシークレット部分
- ``ACCESS_SESSION_TOKEN`` オプションのセッショントークン、必要な場合
使用されるアクセスキーには、バケットにファイルをアップロードする権限が必要です。そのため、資格情報を使用してKubernetesシークレットを作成する必要があります。これは、次のコマンドで行うことができます。
.. code:: sh
kubectl create secret generic aws-creds \
--from-literal=ACCESS_KEY_ID= \
--from-literal=ACCESS_SECRET_KEY=
## --from-literal=ACCESS_SESSION_TOKEN= # if required
資格情報はKubernetes内に保存され、インストールで保存時の暗号化が構成されている場合、暗号化されます。
そのシークレットが作成されたら、次の例のようにクラスターを構成できます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: ""
s3Credentials:
accessKeyId:
name: aws-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: aws-creds
key: ACCESS_SECRET_KEY
宛先パスには、インスタンスがWALファイルをアップロードできるフォルダーを指す任意のURLを指定できます。
``s3://BUCKET_NAME/path/to/folder`` .
サービスアカウントIRSAのIAMロール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IRSAを使用するには、Postgresクラスターの\ ``ServiceAccount``
で\ ``annotation`` を設定する必要があります。
``serviceAccountTemplate``
スタンザを使用してそれらを注入するようにCloudNativePGを構成できます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
[...]
spec:
serviceAccountTemplate:
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:[...]
[...]
S3ライフサイクルポリシー
^^^^^^^^^^^^^^^^^^^^^^^^
Barman CloudはS3にオブジェクトを書き込み、 Barman
Cloudリテンションポリシーによって削除されるまで更新しません。
S3ライフサイクルポリシーで推奨されるアプローチは、オブジェクトの現在のバージョンをBarman保持ポリシーより数日長く有効期限があり、オブジェクトのバージョニングを有効にし、数日後に非最新バージョンの有効期限を有効にすることです。このようなポリシーは、誤った削除から保護し、CloudNativePGワークロードへの権限を制限できるように、オブジェクトを完全に削除する権限を付与せずにS3からオブジェクトを削除できます。
その他のS3互換オブジェクトストレージプロバイダー
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**MinIO** や **Linode Object Storage**
のようなS3互換オブジェクトストレージを使用している場合、デフォルトのS3のものを使用する代わりにエンドポイントを指定できます。
この例では、リージョン\ ``us-east1`` の **Linode** の\ ``bucket``
を使用します。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: "s3://bucket/"
endpointURL: "https://us-east1.linodeobjects.com"
s3Credentials:
[...]
**Digital Ocean Spaces**
を使用している場合、Pathスタイルの構文を使用する必要があります。この例では、リージョン\ ``SFO3``
の **Digital Ocean Spaces** の\ ``bucket`` を使用します。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: "s3://[your-bucket-name]/[your-backup-folder]/"
endpointURL: "https://sfo3.digitaloceanspaces.com"
s3Credentials:
[...]
プライベートCAでのオブジェクトストレージの使用
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
HTTPS経由でMinIOを使用する場合など、プライベートCAで署名された証明書を使用するオブジェクトストレージプロバイダーを構成するとします。その場合、CAバンドルを含むシークレットを参照する\ ``barmanObjectStore``
内にオプション\ ``endpointCA`` を設定して、
Barmanが証明書を正しく検証できるようにする必要があります。
:ref:`Certificates ` ドキュメントの証明書ファイルを使用してシークレットを作成する手順については、
:ref:`Certificates ` ドキュメントで見つけることができます。シークレットを作成したら、次の例のように\ ``endpointCA``
を設定できます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
[...]
backup:
barmanObjectStore:
endpointURL:
endpointCA:
name: my-ca-secret
key: ca.crt
.. Note::
ConfigMapsとSecretsをインスタンスによって**自動的に**リロードしたい場合は、キー`cnpg.io/reload` のラベルをSecrets/ConfigMapsに追加できます。それ以外の場合は、 `kubectl cnpg reload` サブコマンドを使用してインスタンスをリロードする必要があります。
Azure Blob Storage
------------------
`Azure Blob Storage `_ は、Microsoftが提供するオブジェクトストレージサービスです。
CloudNativePG管理対象データベースのバックアップとリカバリーのためにストレージアカウントにアクセスするには、次の資格情報のいずれかの組み合わせが必要です。
-
`Connection String `_
- ストレージアカウント名と
`Storage account access key `_
- ストレージアカウント名と
`Storage account SAS Token `_
- ストレージアカウント名と `Azure AD Workload Identity `_
適切に構成されました。
**Azure AD Workload Identity**
を使用すると、資格情報をKubernetesシークレットに保存せず、次のように\ ``inheritFromAzureAD``
を追加するクラスター構成にすることができます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: ""
azureCredentials:
inheritFromAzureAD: true
一方、 **ストレージアカウントアクセスキー** または
**ストレージアカウントSASトークン**
の両方を使用する場合、資格情報をKubernetes
Secret内に保存し、必要な場合にのみデータエントリを追加する必要があります。次のコマンドはそれを実行します。
.. code:: sh
kubectl create secret generic azure-creds \
--from-literal=AZURE_STORAGE_ACCOUNT= \
--from-literal=AZURE_STORAGE_KEY= \
--from-literal=AZURE_STORAGE_SAS_TOKEN= \
--from-literal=AZURE_STORAGE_CONNECTION_STRING=
使用されるKubernetesクラスターでこの機能が有効になっている場合、資格情報は保存時に暗号化されます。
前述のシークレットを踏まえて、提供された資格情報をクラスター構成内に注入できます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: ""
azureCredentials:
connectionString:
name: azure-creds
key: AZURE_CONNECTION_STRING
storageAccount:
name: azure-creds
key: AZURE_STORAGE_ACCOUNT
storageKey:
name: azure-creds
key: AZURE_STORAGE_KEY
storageSasToken:
name: azure-creds
key: AZURE_STORAGE_SAS_TOKEN
Azure Blob Storageを使用する場合、\ ``destinationPath``
は次の構造を満たします。
.. code:: sh
://..core.windows.net/
```` は\ ``/`` です。
**ストレージアカウント名** とも呼ばれる **アカウント名**
は、使用されるホスト名に含まれます。
その他のAzure Blob Storage互換プロバイダー
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Azure Blob Storage
APIの別の実装を使用している場合、\ ``destinationPath``
は次の構造になります。
.. code:: sh
://://
その場合、\ ```` はパスの最初のコンポーネントです。
これは、 Azureストレージエミュレータまたは
`Azurite `_ を介してAzureサポートをテストする場合に必要です。
Google Cloud Storage
--------------------
現在、CloudNativePGオペレーターは、
`Google Cloud Storage `_ の2つの認証方法をサポートしています。
- 最初のものは、ポッドがGoogle Kubernetes
Engineクラスター内で実行されていることを前提としています
- 2つ目は、環境変数\ ``GOOGLE_APPLICATION_CREDENTIALS`` を活用します
Google Kubernetes Engine内での実行
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Google Kubernetes Engine内で実行されている場合、資格情報を設定せずに
`Workload Identity `_
に単に依存するようにバックアップを構成できます。特に、次のことを行う必要があります。
- ``.spec.backup.barmanObjectStore.googleCredentials.gkeEnvironment``
を\ ``true`` に設定します
- ``serviceAccountTemplate``
スタンザに\ ``iam.gke.io/gcp-service-account``
アノテーションを設定する
次の例を参考として使用してください。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
[...]
backup:
barmanObjectStore:
destinationPath: "gs://"
googleCredentials:
gkeEnvironment: true
serviceAccountTemplate:
metadata:
annotations:
iam.gke.io/gcp-service-account: [...].iam.gserviceaccount.com
[...]
認証を使用する
^^^^^^^^^^^^^^
`instruction from Google `_ をフォローする
認証に必要な情報をすべて含むJSONファイルを取得します。
JSONファイルのコンテンツは、次のコマンドで作成できる\ ``Secret``
を使用して提供する必要があります。
.. code:: shell
kubectl create secret generic backup-creds --from-file=gcsCredentials=gcs_credentials_file.json
これにより、次のようにyamlファイルで使用される\ ``backup-creds``
という名前で\ ``Secret`` が作成されます。
.. code:: yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
backup:
barmanObjectStore:
destinationPath: "gs://"
googleCredentials:
applicationCredentials:
name: backup-creds
key: gcsCredentials
次に、オペレーターは資格情報を使用してGoogle Cloud
Storageに対して認証します。
.. Note::
この認証方法は、Google Cloud Storageバケットにアクセスするために必要なすべての情報を含むJSONファイルをコンテナ内に作成します。つまり、誰かがポッドへのアクセスを取得すると、バケットへの書き込み権限もあります。