6.6.2. 異常な etcd メンバーを削除する
最初に異常な etcd メンバーを削除して、障害が発生したコントロールプレーンノードの削除を開始します。
手順
次のコマンドを実行して etcd Pod をリスト表示し、影響を受けるノード上にない Pod をメモします。
$ oc -n openshift-etcd get pods -l k8s-app=etcd -o wide出力例
etcd-openshift-control-plane-0 5/5 Running 11 3h56m 192.168.10.9 openshift-control-plane-0 <none> <none> etcd-openshift-control-plane-1 5/5 Running 0 3h54m 192.168.10.10 openshift-control-plane-1 <none> <none> etcd-openshift-control-plane-2 5/5 Running 0 3h58m 192.168.10.11 openshift-control-plane-2 <none> <none>次のコマンドを実行して、実行中の etcd コンテナーに接続します。
$ oc rsh -n openshift-etcd <etcd_pod><etcd_pod>は、正常なノードの 1 つに関連付けられている etcd Pod の名前に置き換えます。コマンドの例
$ oc rsh -n openshift-etcd etcd-openshift-control-plane-0次のコマンドを実行して、etcd メンバーのリストを表示します。異常な etcd メンバーの ID と名前をメモしてください。これらの値は後で必要になります。
sh-4.2# etcdctl member list -w table出力例
+------------------+---------+------------------------------+---------------------------+---------------------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | +------------------+---------+------------------------------+---------------------------+---------------------------+ | 6fc1e7c9db35841d | started | openshift-control-plane-2 | https://10.0.131.183:2380 | https://10.0.131.183:2379 | | 757b6793e2408b6c | started | openshift-control-plane-1 | https://10.0.164.97:2380 | https://10.0.164.97:2379 | | ca8c2990a0aa29d1 | started | openshift-control-plane-0 | https://10.0.154.204:2380 | https://10.0.154.204:2379 | +------------------+---------+------------------------------+---------------------------+---------------------------+重要etcdctl endpoint healthコマンドは、置換が完了して新しいメンバーが追加されるまで、削除されたメンバーをリスト表示します。次のコマンドを実行して、異常な etcd メンバーを削除します。
sh-4.2# etcdctl member remove <unhealthy_member_id><unhealthy_member_id>は、異常なノード上の etcd メンバーの ID に置き換えます。コマンドの例
sh-4.2# etcdctl member remove 6fc1e7c9db35841d出力例
Member 6fc1e7c9db35841d removed from cluster b23536c33f2cdd1b次のコマンドを実行してメンバーリストを再度表示し、メンバーが削除されたことを確認します。
sh-4.2# etcdctl member list -w table出力例
+------------------+---------+------------------------------+---------------------------+---------------------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | +------------------+---------+------------------------------+---------------------------+---------------------------+ | 757b6793e2408b6c | started | openshift-control-plane-1 | https://10.0.164.97:2380 | https://10.0.164.97:2379 | | ca8c2990a0aa29d1 | started | openshift-control-plane-0 | https://10.0.154.204:2380 | https://10.0.154.204:2379 | +------------------+---------+------------------------------+---------------------------+---------------------------+重要メンバーを削除した後、残りの etcd インスタンスが再起動している間、クラスターに短時間アクセスできない場合があります。
次のコマンドを実行して、etcd Pod への rsh セッションを終了します。
sh-4.2# exit次のコマンドを実行して、etcd クォーラムガードをオフにします。
$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'このコマンドにより、シークレットを正常に再作成し、静的 Pod をロールアウトできるようになります。
次のコマンドを実行して、削除された、異常な etcd メンバーのシークレットをリスト表示します。
$ oc get secrets -n openshift-etcd | grep <node_name><node_name>は、etcd メンバーを削除した障害が発生したノードの名前に置き換えます。コマンドの例
$ oc get secrets -n openshift-etcd | grep openshift-control-plane-2出力例
etcd-peer-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-metrics-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-openshift-control-plane-2 kubernetes.io/tls 2 134m削除された影響を受けるノードに関連付けられているシークレットを削除します。
次のコマンドを実行して、ピアシークレットを削除します。
$ oc delete secret -n openshift-etcd etcd-peer-<node_name><node_name>は、影響を受けるノードの名前に置き換えます。次のコマンドを実行して、サービングシークレットを削除します。
$ oc delete secret -n openshift-etcd etcd-serving-<node_name><node_name>は、影響を受けるノードの名前に置き換えます。次のコマンドを実行して、メトリクスシークレットを削除します。
$ oc delete secret -n openshift-etcd etcd-serving-metrics-<node_name>1 <node_name>は、影響を受けるノードの名前に置き換えます。