11.6. 正常でないクラスターのコントロールプレーンノードの置き換え
3 - 5 個のコントロールプレーンノードを持つ OpenShift Container Platform クラスター内の正常ではないコントロールプレーン (マスター) ノードを置き換えることができます。
正常なクラスター内のコントロールプレーンノードを置き換える方法の詳細は、正常なクラスター内のコントロールプレーンノードの置き換え を参照してください。
11.6.1. 正常でないコントロールプレーンノードの削除 リンクのコピーリンクがクリップボードにコピーされました!
正常でないコントロールプレーンノードをクラスターから削除します。これは、以下の例では node-0 です。
前提条件
- 少なくとも 3 つのコントロールプレーンノードを持つクラスターをインストールした。
- コントロールプレーンノードの少なくとも 1 つが準備状態ではない。
手順
ノードのステータスをチェックして、コントロールプレーンノードが準備状態にないことを確認します。
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcd-Operatorログでクラスターが正常でないことを確認します。oc logs -n openshift-etcd-operator etcd-operator deployment/etcd-operator
$ oc logs -n openshift-etcd-operator etcd-operator deployment/etcd-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
E0927 08:24:23.983733 1 base_controller.go:272] DefragController reconciliation failed: cluster is unhealthy: 2 of 3 members are available, node-0 is unhealthy
E0927 08:24:23.983733 1 base_controller.go:272] DefragController reconciliation failed: cluster is unhealthy: 2 of 3 members are available, node-0 is unhealthyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
etcdメンバーを確認します。コントロールプレーンノードへのリモートシェルセッションを開きます。
oc rsh -n openshift-etcd node-1
$ oc rsh -n openshift-etcd node-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcdctlメンバーをリスト表示します。etcdctl member list -w table
# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
etcdctlエンドポイントのヘルスレポートでクラスターの異常なメンバーが報告されていることを確認します。etcdctl endpoint health
# etcdctl endpoint healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"level":"warn","ts":"2022-09-27T08:25:35.953Z","logger":"client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc000680380/192.168.111.25","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.111.25: connect: no route to host\""} 192.168.111.28 is healthy: committed proposal: took = 12.465641ms 192.168.111.26 is healthy: committed proposal: took = 12.297059ms 192.168.111.25 is unhealthy: failed to commit proposal: context deadline exceeded Error: unhealthy cluster{"level":"warn","ts":"2022-09-27T08:25:35.953Z","logger":"client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc000680380/192.168.111.25","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.111.25: connect: no route to host\""} 192.168.111.28 is healthy: committed proposal: took = 12.465641ms 192.168.111.26 is healthy: committed proposal: took = 12.297059ms 192.168.111.25 is unhealthy: failed to commit proposal: context deadline exceeded Error: unhealthy clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow Machineカスタムリソース (CR) を削除して、異常なコントロールプレーンを削除します。oc delete machine -n openshift-machine-api node-0
$ oc delete machine -n openshift-machine-api node-0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記MachineCR とNodeCR はファイナライザーによって保護されているため、削除されない可能性があります。これが発生した場合は、すべてのファイナライザーを削除してMachineCR を手動で削除する必要があります。etcd-operatorログで、異常なマシンが削除されたかどうかを確認します。oc logs -n openshift-etcd-operator etcd-operator deployment/ettcd-operator
$ oc logs -n openshift-etcd-operator etcd-operator deployment/ettcd-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
I0927 08:58:41.249222 1 machinedeletionhooks.go:135] skip removing the deletion hook from machine node-0 since its member is still present with any of: [{InternalIP } {InternalIP 192.168.111.25}]I0927 08:58:41.249222 1 machinedeletionhooks.go:135] skip removing the deletion hook from machine node-0 since its member is still present with any of: [{InternalIP } {InternalIP 192.168.111.25}]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のログの例のように、削除がスキップされたことがわかった場合は、異常な
etcdctlメンバーを手動で削除します。コントロールプレーンノードへのリモートシェルセッションを開きます。
oc rsh -n openshift-etcd node-1
$ oc rsh -n openshift-etcd node-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcdctlメンバーをリスト表示します。etcdctl member list -w table
# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcdctlエンドポイントのヘルスレポートでクラスターの異常なメンバーが報告されていることを確認します。etcdctl endpoint health
# etcdctl endpoint healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"level":"warn","ts":"2022-09-27T10:31:07.227Z","logger":"client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0000d6e00/192.168.111.25","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.111.25: connect: no route to host\""} 192.168.111.28 is healthy: committed proposal: took = 13.038278ms 192.168.111.26 is healthy: committed proposal: took = 12.950355ms 192.168.111.25 is unhealthy: failed to commit proposal: context deadline exceeded Error: unhealthy cluster{"level":"warn","ts":"2022-09-27T10:31:07.227Z","logger":"client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0000d6e00/192.168.111.25","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp 192.168.111.25: connect: no route to host\""} 192.168.111.28 is healthy: committed proposal: took = 13.038278ms 192.168.111.26 is healthy: committed proposal: took = 12.950355ms 192.168.111.25 is unhealthy: failed to commit proposal: context deadline exceeded Error: unhealthy clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターから異常な
etcdctlメンバーを削除します。etcdctl member remove 61e2a86084aafa62
# etcdctl member remove 61e2a86084aafa62Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Member 61e2a86084aafa62 removed from cluster 6881c977b97990d7
Member 61e2a86084aafa62 removed from cluster 6881c977b97990d7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、異常な
etcdctlメンバーが削除されたことを確認します。etcdctl member list -w table
# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.6.2. 新しいコントロールプレーンノードの追加 リンクのコピーリンクがクリップボードにコピーされました!
削除した異常なノードを置き換えるために、新しいコントロールプレーンノードを追加します。以下の例では、新しいノードは node-5 です。
前提条件
- Day 2 のコントロールプレーンノードがインストールされている。詳細は、Web コンソールを使用したホストの追加 または API を使用したホストの追加 を参照してください。
手順
新しい Day 2 コントロールプレーンノードの保留中の証明書署名要求 (CSR) を取得します。
oc get csr | grep Pending
$ oc get csr | grep PendingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
csr-5sd59 8m19s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending csr-xzqts 10s kubernetes.io/kubelet-serving system:node:node-5 <none> Pending
csr-5sd59 8m19s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending csr-xzqts 10s kubernetes.io/kubelet-serving system:node:node-5 <none> PendingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいノード (この例では
node-5) の保留中の CSR をすべて承認します。oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記インストールを完了するには、CSR を承認する必要があります。
コントロールプレーンノードが
Readyステータスであることを確認します。oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターが Machine API を使用して実行される場合、
etcdOperator には新しいノードを参照するMachineCR が必要です。クラスターに 3 つのコントロールプレーンノードがある場合、Machine API は自動的にアクティブ化されます。BareMetalHostおよびMachineCR を作成し、それらを新しいコントロールプレーンのNodeCR にリンクします。重要Boot-it-yourself では
BareMetalHostおよびMachineCR は作成されないため、これらを作成する必要があります。BareMetalHostおよびMachineCR の作成に失敗すると、etcdOperator でエラーが発生します。一意の
.metadata.nameの値を使用してBareMetalHostCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow BareMetalHostCR を適用します。oc apply -f <filename>
$ oc apply -f <filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <filename> は
BareMetalHostCR の名前に置き換えます。
一意の
.metadata.name値を使用してMachineCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MachineCR を適用します。oc apply -f <filename>
$ oc apply -f <filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <filename> は
MachineCR の名前に置き換えます。
link-machine-and-node.shスクリプトを実行して、BareMetalHost、Machine、およびNodeをリンクします。以下の
link-machine-and-node.shスクリプトをローカルマシンにコピーします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトを実行可能にします。
chmod +x link-machine-and-node.sh
$ chmod +x link-machine-and-node.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトを実行します。
bash link-machine-and-node.sh node-5 node-5
$ bash link-machine-and-node.sh node-5 node-5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記最初の
node-5インスタンスはマシンを表し、2 番目のインスタンスはノードを表します。
次のコマンドを実行して、
etcdのメンバーを確認します。コントロールプレーンノードへのリモートシェルセッションを開きます。
oc rsh -n openshift-etcd node-1
$ oc rsh -n openshift-etcd node-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow etcdctlメンバーをリスト表示します。etcdctl member list -w table
# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
etcdOperator の設定プロセスが完了するまで監視します。oc get clusteroperator etcd
$ oc get clusteroperator etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例 (完了時)
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE etcd 4.11.5 True False False 22h
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE etcd 4.11.5 True False False 22hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
etcdctlの健全性を確認します。コントロールプレーンノードへのリモートシェルセッションを開きます。
oc rsh -n openshift-etcd node-1
$ oc rsh -n openshift-etcd node-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow エンドポイントの健全性を確認します。
etcdctl endpoint health
# etcdctl endpoint healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
192.168.111.26 is healthy: committed proposal: took = 9.105375ms 192.168.111.28 is healthy: committed proposal: took = 9.15205ms 192.168.111.29 is healthy: committed proposal: took = 10.277577ms
192.168.111.26 is healthy: committed proposal: took = 9.105375ms 192.168.111.28 is healthy: committed proposal: took = 9.15205ms 192.168.111.29 is healthy: committed proposal: took = 10.277577msCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ノードの正常性を確認します。
oc get Nodes
$ oc get NodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター Operator がすべて利用可能であることを確認します。
oc get ClusterOperators
$ oc get ClusterOperatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターのバージョンが正しいことを確認します。
oc get ClusterVersion
$ oc get ClusterVersionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.11.5 True False 22h Cluster version is 4.11.5
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.11.5 True False 22h Cluster version is 4.11.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow