9.4. AWS での etcd のバックアップと復元
障害を修正するために、Amazon Web Services (AWS) 上のホステッドクラスターで etcd をバックアップおよび復元できます。
9.4.1. ホステッドクラスターの etcd のスナップショットを取得する リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの etcd をバックアップするには、etcd のスナップショットを作成する必要があります。後で、スナップショットを使用して etcd を復元できます。
この手順には、API のダウンタイムが必要です。
手順
次のコマンドを入力して、ホステッドクラスターのリコンシリエーションを一時停止します。
oc patch -n clusters hostedclusters/<hosted_cluster_name> \ -p '{"spec":{"pausedUntil":"true"}}' --type=merge
$ oc patch -n clusters hostedclusters/<hosted_cluster_name> \ -p '{"spec":{"pausedUntil":"true"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、すべての etcd-writer デプロイメントを停止します。
oc scale deployment -n <hosted_cluster_namespace> --replicas=0 \ kube-apiserver openshift-apiserver openshift-oauth-apiserver
$ oc scale deployment -n <hosted_cluster_namespace> --replicas=0 \ kube-apiserver openshift-apiserver openshift-oauth-apiserver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd スナップショットを取得するには、次のコマンドを実行して、各 etcd コンテナーで
exec
コマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow スナップショットのステータスを確認するには、次のコマンドを実行して、各 etcd コンテナーで
exec
コマンドを使用します。oc exec -it <etcd_pod_name> -n <hosted_cluster_namespace> -- \ env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status \ /var/lib/data/snapshot.db
$ oc exec -it <etcd_pod_name> -n <hosted_cluster_namespace> -- \ env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status \ /var/lib/data/snapshot.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow スナップショットデータを、S3 バケットなど、後で取得できる場所にコピーします。以下の例を参照してください。
注記次の例では、署名バージョン 2 を使用しています。署名バージョン 4 をサポートするリージョン (例:
us-east-2
リージョン) にいる場合は、署名バージョン 4 を使用してください。そうしないと、スナップショットを S3 バケットにコピーするときにアップロードが失敗します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 後で新しいクラスターでスナップショットを復元するには、ホステッドクラスターが参照する暗号化シークレットを保存します。
次のコマンドを実行してシークレットの暗号鍵を取得します。
oc get hostedcluster <hosted_cluster_name> \ -o=jsonpath='{.spec.secretEncryption.aescbc}'
$ oc get hostedcluster <hosted_cluster_name> \ -o=jsonpath='{.spec.secretEncryption.aescbc}' {"activeKey":{"name":"<hosted_cluster_name>-etcd-encryption-key"}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してシークレットの暗号鍵を保存します。
oc get secret <hosted_cluster_name>-etcd-encryption-key \ -o=jsonpath='{.data.key}'
$ oc get secret <hosted_cluster_name>-etcd-encryption-key \ -o=jsonpath='{.data.key}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいクラスターでスナップショットを復元するときに、このキーを復号化できます。
次のコマンドを入力して、すべての etcd-writer デプロイメントを再起動します。
oc scale deployment -n <control_plane_namespace> --replicas=3 \ kube-apiserver openshift-apiserver openshift-oauth-apiserver
$ oc scale deployment -n <control_plane_namespace> --replicas=3 \ kube-apiserver openshift-apiserver openshift-oauth-apiserver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ホステッドクラスターのリコンシリエーションを再開します。
oc patch -n <hosted_cluster_namespace> \ -p '[\{"op": "remove", "path": "/spec/pausedUntil"}]' --type=json
$ oc patch -n <hosted_cluster_namespace> \ -p '[\{"op": "remove", "path": "/spec/pausedUntil"}]' --type=json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
etcd スナップショットを復元します。
9.4.2. ホステッドクラスターでの etcd スナップショットの復元 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターからの etcd のスナップショットがある場合は、それを復元できます。現在、クラスターの作成中にのみ etcd スナップショットを復元できます。
etcd スナップショットを復元するには、create cluster --render
コマンドからの出力を変更し、HostedCluster
仕様の etcd セクションで restoreSnapshotURL
値を定義します。
hcp create
コマンドの --render
フラグはシークレットをレンダリングしません。シークレットをレンダリングするには、hcp create
コマンドで --render
フラグと --render-sensitive
フラグの両方を使用する必要があります。
前提条件
ホステッドクラスターで etcd スナップショットを作成している。
手順
aws
コマンドラインインターフェイス (CLI) で事前に署名された URL を作成し、認証情報を etcd デプロイメントに渡さずに S3 から etcd スナップショットをダウンロードできるようにします。ETCD_SNAPSHOT=${ETCD_SNAPSHOT:-"s3://${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db"} ETCD_SNAPSHOT_URL=$(aws s3 presign ${ETCD_SNAPSHOT})
ETCD_SNAPSHOT=${ETCD_SNAPSHOT:-"s3://${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db"} ETCD_SNAPSHOT_URL=$(aws s3 presign ${ETCD_SNAPSHOT})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の URL を参照するように
HostedCluster
仕様を変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
spec.secretEncryption.aescbc
値から参照したシークレットに、前の手順で保存したものと同じ AES キーが含まれていることを確認します。