2.3. クラスターの直前の状態への復元
クラスターを直前の状態に復元するには、スナップショットを作成して、事前に etcd データのバックアップを行っている必要があります。このスナップショットを使用して、クラスターの状態を復元します。
2.3.1. クラスターの直前の状態への復元
保存された etcd スナップショットを使用して、クラスターの以前の状態に戻すことができます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてのクラスターへのアクセスがあること。 - マスターホストへの SSH アクセス。
etcd スナップショットのバックアップ。
注記クラスター内のすべてのマスターホストに同じ etcd スナップショットファイルを使用する必要があります。
手順
復元するクラスター内のそれぞれのマスターホストを準備します。
短期間でマスターホストのすべてに復元スクリプトを実行し、クラスターのメンバーがほぼ同時に起動し、クォーラム(定足数) を構成できるようにする必要がありなす。そのため、それぞれのマスターホストを別々のターミナルに分け、復元スクリプトをそれぞれに対して迅速に開始できるようにすることが推奨されます。
etcd スナップショットをマスターホストにコピーします。
この手順では、
snapshot.db
というスナップショットを、マスターホストの/home/core/
ディレクトリーにコピーしていることを前提とします。- マスターホストにアクセスします。
INITIAL_CLUSTER
変数を、<name>=<url>
形式でメンバー一覧に追加します。この変数は復元スクリプトに渡され、各メンバーに同一の変数が使用される必要があります。[core@ip-10-0-143-125 ~]$ export INITIAL_CLUSTER="etcd-member-ip-10-0-143-125.ec2.internal=https://etcd-0.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-35-108.ec2.internal=https://etcd-1.clustername.devcluster.openshift.com:2380,etcd-member-ip-10-0-10-16.ec2.internal=https://etcd-2.clustername.devcluster.openshift.com:2380"
- これらの手順を他のマスターホストで繰り返し実行します。 その際、各マスターホストをそれぞれのターミナルで処理します。各マスターホストで同じ etcd スナップショットファイルを使用するようにしてください。
すべてのマスターホストで復元スクリプトを実行します。
最初のマスターホストで
etcd-snapshot-restore.sh
スクリプトを開始します。スナップショットファイルのパスと、INITIAL_CLUSTER
変数で定義されるメンバーの一覧の 2 つのパラメーターを渡します。[core@ip-10-0-143-125 ~]$ sudo /usr/local/bin/etcd-snapshot-restore.sh /home/core/snapshot.db $INITIAL_CLUSTER Creating asset directory ./assets Downloading etcdctl binary.. etcdctl version: 3.3.10 API version: 3.3 Backing up /etc/kubernetes/manifests/etcd-member.yaml to ./assets/backup/ Stopping all static pods.. ..stopping kube-scheduler-pod.yaml ..stopping kube-controller-manager-pod.yaml ..stopping kube-apiserver-pod.yaml ..stopping etcd-member.yaml Stopping etcd.. Waiting for etcd-member to stop Stopping kubelet.. Stopping all containers.. bd44e4bc942276eb1a6d4b48ecd9f5fe95570f54aa9c6b16939fa2d9b679e1ea d88defb9da5ae623592b81619e3690faeb4fa645440e71c029812cb960ff586f 3920ced20723064a379739c4a586f909497a7b6705a5b3cf367d9b930f23a5f1 d470f7a2d962c90f3a21bcc021970bde96bc8908f317ec70f1c21720b322c25c Backing up etcd data-dir.. Removing etcd data-dir /var/lib/etcd Restoring etcd member etcd-member-ip-10-0-143-125.ec2.internal from snapshot.. 2019-05-15 19:03:34.647589 I | pkg/netutil: resolving etcd-0.clustername.devcluster.openshift.com:2380 to 10.0.143.125:2380 2019-05-15 19:03:34.883545 I | mvcc: restore compact to 361491 2019-05-15 19:03:34.915679 I | etcdserver/membership: added member cbe982c74cbb42f [https://etcd-0.clustername.devcluster.openshift.com:2380] to cluster 807ae3bffc8d69ca Starting static pods.. ..starting kube-scheduler-pod.yaml ..starting kube-controller-manager-pod.yaml ..starting kube-apiserver-pod.yaml ..starting etcd-member.yaml Starting kubelet..
- 復元が開始されたら、他のマスターホストでスクリプトを実行します。
マシン設定 (Machine Config) が適用されていることを確認します。
クラスターにアクセスできるターミナルで、
cluster-admin
ユーザーとして以下のコマンドを実行します。$ oc get machineconfigpool NAME CONFIG UPDATED UPDATING master rendered-master-50e7e00374e80b767fcc922bdfbc522b True False
スナップショットが適用されると、マスターの
currentConfig
は etcd スナップショットの取られた時点の ID に一致します。マスターのcurrentConfig
名はrendered-master-<currentConfig>
形式の名前になります。すべてのマスターホストが起動しており、クラスターに参加していることを確認します。
マスターホストにアクセスし、実行中の etcd コンテナーに接続します。
[core@ip-10-0-143-125 ~] id=$(sudo crictl ps --name etcd-member | awk 'FNR==2{ print $1}') && sudo crictl exec -it $id /bin/sh
etcd コンテナーで、etcd に接続するために必要な変数をエクスポートします。
sh-4.2# export ETCDCTL_API=3 ETCDCTL_CACERT=/etc/ssl/etcd/ca.crt ETCDCTL_CERT=$(find /etc/ssl/ -name *peer*crt) ETCDCTL_KEY=$(find /etc/ssl/ -name *peer*key)
etcd コンテナーで、
etcdctl member list
を実行し、3 つのメンバーが起動済みであることを確認します。sh-4.2# etcdctl member list -w table +------------------+---------+------------------------------------------+------------------------------------------------------------------+---------------------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | +------------------+---------+------------------------------------------+------------------------------------------------------------------+---------------------------+ | 29e461db6be4eaaa | started | etcd-member-ip-10-0-164-170.ec2.internal | https://etcd-2.clustername.devcluster.openshift.com:2380 | https://10.0.164.170:2379 | | cbe982c74cbb42f | started | etcd-member-ip-10-0-143-125.ec2.internal | https://etcd-0.clustername.devcluster.openshift.com:2380 | https://10.0.143.125:2379 | | a752f80bcb0da3e8 | started | etcd-member-ip-10-0-156-2.ec2.internal | https://etcd-1.clustername.devcluster.openshift.com:2380 | https://10.0.156.2:2379 | +------------------+---------+------------------------------------------+------------------------------------------------------------------+---------------------------+
それぞれの新規メンバーが起動するまで最長 10 分の時間がかかる可能性があることに注意してください。