This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.2.8. ボリュームスナップショットを使用した永続ストレージ
本書では、OpenShift Container Platform で VolumeSnapshot を使用してデータ損失から保護する方法を説明します。永続ボリュームについてある程度理解していることが推奨されます。
ボリュームのスナップショットはテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、https://access.redhat.com/ja/support/offerings/techpreview/ を参照してください。
2.8.1. スナップショット リンクのコピーリンクがクリップボードにコピーされました!
ボリュームスナップショットは、クラスター内のストレージボリュームから作成されたスナップショットです。外部のスナップショットコントローラーおよびプロビジョナーは、この機能を OpenShift Container Platform クラスターで使用して OpenShift Container Platform API を使用してボリュームスナップショットを処理します。
ボリュームのスナップショットを使用して、クラスター管理者は以下を行うことができます。
- PersistentVolumeClaim にバインドされる PersistentVolume のスナップショットを作成します。
- 既存の VolumeSnapshot を一覧表示します。
- 既存の VolumeSnapshot を削除します。
- 既存の VolumeSnapshot から PersistentVolume を新たに作成します。
サポートされている PersistentVolume タイプ:
- AWS Elastic Block Store (EBS)
- Google Compute Engine (GCE) Persistent Disk (PD)
2.8.2. 外部のコントローラーおよびプロビジョナー リンクのコピーリンクがクリップボードにコピーされました!
コントローラーおよびプロビジョナーは、ボリュームのスナップショットを提供します。これらの外部コンポーネントはクラスターで実行されます。
ボリュームのスナップショットを提供する外部コンポーネントが 2 つあります。
- 外部コントローラー
- ボリュームスナップショットのイベントを作成、削除、および報告します。
- 外部プロビジョナー
- VolumeSnapshot から新規の PersistentVolume を作成します。
外部のコントローラーおよびプロビジョナーサービスはコンテナーイメージとして配布され、OpenShift Container Platform クラスターで通常どおり実行できます。
2.8.2.1. 外部のコントローラーおよびプロビジョナーの実行 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、外部コントローラーおよびプロビジョナーを実行するようにアクセスを設定する必要があります。
手順
API オブジェクトを管理しているコンテナーを許可するには、以下の手順を実行します。
ServiceAccount と ClusterRole を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター管理者として、
hostNetwork
SCC (security context constraint) を提供します。oc adm policy add-scc-to-user hostnetwork -z snapshot-controller-runner
# oc adm policy add-scc-to-user hostnetwork -z snapshot-controller-runner
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この SCC は、Pod が使用している
snapshot-controller-runner
サービスアカウントへのアクセスを制御します。ClusterRoleBinding でルールをバインドします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- snapshot-controller が置かれているプロジェクト名を指定します。
2.8.2.2. AWS および GCE 認証 リンクのコピーリンクがクリップボードにコピーされました!
外部のコントローラーおよびプロビジョナーを認証するには、クラウドプロバイダーの管理者がシークレットを提供する必要があります。
2.8.2.2.1. AWS 認証 リンクのコピーリンクがクリップボードにコピーされました!
外部のコントローラーおよびプロビジョナーを Amazon Web Services (AWS) にデプロイしている場合、AWS はアクセスキーを使用して認証できる必要があります。
認証情報を Pod に提供するために、クラスター管理者は以下のように新規のシークレットを作成します。
awskeys
シークレットに必要な base64 値を生成する際に、以下のように末尾の改行文字を削除します。
echo -n "<aws_access_key_id>" | base64 echo -n "<aws_secret_access_key>" | base64
$ echo -n "<aws_access_key_id>" | base64
$ echo -n "<aws_secret_access_key>" | base64
以下の例は、外部コントローラーおよびプロビジョナーコンテナーの AWS デプロイメントを表示しています。これら両方の Pod コンテナーはシークレットを使用して AWS API にアクセスします。
2.8.2.2.2. GCE 認証 リンクのコピーリンクがクリップボードにコピーされました!
Google Compute Engine (GCE) の場合、GCE API にアクセスするためにシークレットを使用する必要はありません。
管理者は、以下の例で示すようにデプロイメントに進むことができます。
2.8.2.3. スナップショットユーザーの管理 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの設定によっては、管理者以外のユーザーが API サーバーで VolumeSnapshot オブジェクトを操作できるようにする必要があります。これは、特定のユーザーまたはグループにバインドされる ClusterRole を作成して実行できます。
たとえば、ユーザー「alice」がクラスター内のスナップショットを操作する必要があるとします。クラスター管理者は以下の手順を実行します。
新規の ClusterRole を定義します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterRole バインドオブジェクトを作成してクラスターロールをユーザー「alice」にバインドします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これは API アクセス設定の一例にすぎません。VolumeSnapshot オブジェクトは他の OpenShift Container Platform API オブジェクトと同様に動作します。API RBAC の管理についての詳細は、API アクセス制御についてのドキュメントを参照してください。
2.8.3. スナップショットの作成および削除 リンクのコピーリンクがクリップボードにコピーされました!
Persistent Volume Claim (永続ボリューム要求、PVC) を永続ボリューム (PV) にバインドしてボリュームをプロビジョニングする方法と同様に、VolumeSnapshotData と VolumeSnapshot はボリュームスナップショットの作成に使用されます。
ボリュームスナップショットは、サポートされる PersistentVolume のタイプを使用する必要があります。
2.8.3.1. スナップショットの作成 リンクのコピーリンクがクリップボードにコピーされました!
PV のスナップショットを作成するには、以下の例のように VolumeSnapshot に基づいて VolumeSnapshotData オブジェクトを作成します。
PV のタイプによっては、反映される VolumeSnapshot の状態に応じ、スナップショットの作成操作は複数の段階にわたる場合があります。
- 新規 VolumeSnapshot オブジェクトを作成します。
- コントローラーを起動します。スナップショット対象の PersistentVolume をフリーズし、アプリケーションを一時停止する必要が生じる場合があります。
-
スナップショットを作成します。スナップショット対象の PersistentVolume は通常の操作に戻りますが、スナップショット自体は準備状態ではありません(status=
True
、type=Pending
)。 - 実際のスナップショットを表す VolumeSnapshotData オブジェクトを作成します。
-
スナップショットが完了し、使用できる状態になります(status=
True
、type=Ready
)。
データの整合性はユーザーの責任で確保してください (Pod またはアプリケーションの停止、キャッシュのフラッシュ、ファイルシステムのフリーズなど)。
エラーの場合は、VolumeSnapshot の状態にエラー状態が追加されます。
VolumeSnapshot の状態を表示するには、以下を実行します。
oc get volumesnapshot -o yaml
$ oc get volumesnapshot -o yaml
以下の例が示すように、ステータスが表示されます。
- 1
- snapshot-controller が置かれているプロジェクト名を指定します。
2.8.3.2. スナップショットの復元 リンクのコピーリンクがクリップボードにコピーされました!
PVC は、スナップショットの復元に使用されます。最初に、管理者は既存の VolumeSnapshot から PersistentVolume を復元するために StorageClass を作成する必要があります。
StorageClass を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
gp2 encryption
が設定された状態で AWS EBS ストレージを使用している場合、encrypted
およびtype
のパラメーターを設定する必要があります。
PVC を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規の PersistentVolume が作成されて PersistentVolumeClaim にバインドされます。PV のタイプによっては処理に数分の時間がかかることがあります。
2.8.3.3. スナップショットの削除 リンクのコピーリンクがクリップボードにコピーされました!
VolumeSnapshot を削除するには、以下を実行します。
oc delete volumesnapshot/<snapshot-name>
$ oc delete volumesnapshot/<snapshot-name>
VolumeSnapshot にバインドされている VolumeSnapshotData が自動的に削除されます。