9.4. 管理クラスター上の etcd のバックアップと復元
管理クラスター上の etcd をバックアップおよび復元することで、障害を修復できます。
9.4.1. ホステッドクラスターの etcd のスナップショットを取得する リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの etcd をバックアップするには、etcd のスナップショットを作成する必要があります。後で、スナップショットを使用して etcd を復元できます。
この手順には、API のダウンタイムが必要です。
手順
次のコマンドを入力して、ホステッドクラスターのリコンシリエーションを一時停止します。
$ oc patch -n clusters hostedclusters/<hosted_cluster_name> \ -p '{"spec":{"pausedUntil":"true"}}' --type=merge次のコマンドを入力して、すべての etcd-writer デプロイメントを停止します。
$ oc scale deployment -n <hosted_cluster_namespace> --replicas=0 \ kube-apiserver openshift-apiserver openshift-oauth-apiserveretcd スナップショットを取得するには、次のコマンドを実行して、各 etcd コンテナーで
execコマンドを使用します。$ oc exec -it <etcd_pod_name> -n <hosted_cluster_namespace> -- \ env ETCDCTL_API=3 /usr/bin/etcdctl \ --cacert /etc/etcd/tls/etcd-ca/ca.crt \ --cert /etc/etcd/tls/client/etcd-client.crt \ --key /etc/etcd/tls/client/etcd-client.key \ --endpoints=localhost:2379 \ snapshot save /var/lib/data/snapshot.dbスナップショットのステータスを確認するには、次のコマンドを実行して、各 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スナップショットデータを、S3 バケットなど、後で取得できる場所にコピーします。以下の例を参照してください。
注記次の例では、署名バージョン 2 を使用しています。署名バージョン 4 をサポートするリージョン (例:
us-east-2リージョン) にいる場合は、署名バージョン 4 を使用してください。そうしないと、スナップショットを S3 バケットにコピーするときにアップロードが失敗します。例
BUCKET_NAME=somebucket CLUSTER_NAME=cluster_name FILEPATH="/${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db" CONTENT_TYPE="application/x-compressed-tar" DATE_VALUE=`date -R` SIGNATURE_STRING="PUT\n\n${CONTENT_TYPE}\n${DATE_VALUE}\n${FILEPATH}" ACCESS_KEY=accesskey SECRET_KEY=secret SIGNATURE_HASH=`echo -en ${SIGNATURE_STRING} | openssl sha1 -hmac ${SECRET_KEY} -binary | base64` HOSTED_CLUSTER_NAMESPACE=hosted_cluster_namespace oc exec -it etcd-0 -n ${HOSTED_CLUSTER_NAMESPACE} -- curl -X PUT -T "/var/lib/data/snapshot.db" \ -H "Host: ${BUCKET_NAME}.s3.amazonaws.com" \ -H "Date: ${DATE_VALUE}" \ -H "Content-Type: ${CONTENT_TYPE}" \ -H "Authorization: AWS ${ACCESS_KEY}:${SIGNATURE_HASH}" \ https://${BUCKET_NAME}.s3.amazonaws.com/${CLUSTER_NAME}-snapshot.db後で新しいクラスターでスナップショットを復元するには、ホステッドクラスターが参照する暗号化シークレットを保存します。
次のコマンドを実行してシークレットの暗号鍵を取得します。
$ oc get hostedcluster <hosted_cluster_name> \ -o=jsonpath='{.spec.secretEncryption.aescbc}' {"activeKey":{"name":"<hosted_cluster_name>-etcd-encryption-key"}}次のコマンドを実行してシークレットの暗号鍵を保存します。
$ oc get secret <hosted_cluster_name>-etcd-encryption-key \ -o=jsonpath='{.data.key}'新しいクラスターでスナップショットを復元するときに、このキーを復号化できます。
次のコマンドを入力して、すべての etcd-writer デプロイメントを再起動します。
$ oc scale deployment -n <control_plane_namespace> --replicas=3 \ kube-apiserver openshift-apiserver openshift-oauth-apiserver次のコマンドを入力して、ホステッドクラスターのリコンシリエーションを再開します。
$ oc patch -n <hosted_cluster_namespace> \ -p '[\{"op": "remove", "path": "/spec/pausedUntil"}]' --type=json
次のステップ
etcd スナップショットを復元します。