ノードが破損して、修復または交換のためにクラスタから削除する必要がある場合、クラスタから強制的に削除できます。
ワーカーノードの強制削除
ベアメタル版 Anthos クラスタでは、ノードに強制削除対象のマークを付けるアノテーションを追加できます。
親ノードプールからノードを削除した後、次のコマンドを実行して、対応する障害が発生したマシンに baremetal.cluster.gke.io/force-remove
アノテーションを付けます。アノテーション自体の値は重要ではありません。
kubectl --kubeconfig ADMIN_KUBECONFIG -n CLUSTER_NAMESPACE \ annotate machine 10.200.0.8 baremetal.cluster.gke.io/force-remove=true
ベアメタル版 Anthos クラスタはノードを正常に削除します。
コントロール プレーン ノードの強制削除
コントロール プレーン ノードの強制削除は、コントロール プレーン ノードで kubeadm reset
を実行する場合と同様ですが、手順を追加する必要があります。
コントロール プレーン ノードをノードプールから強制削除するには、障害が発生したコントロール プレーン ノードが属するクラスタに対して、次の操作を行う必要があります。
- 障害が発生したノードで実行されている障害のある
etcd
メンバーをetcd
クラスタから削除する - kube の
ClusterStatus
を更新して、対応するapiEndpoint
を削除する
障害のある etcd
メンバーを削除する
障害のあるコントロール プラン ノードを削除するには、まず残りの正常な etcd
Pod で etcdctl
を実行します。この操作の概要については、この Kubernetes ドキュメントをご覧ください。
以下の手順では、CLUSTER_KUBECONFIG はクラスタの kubeconfig
ファイルのパスです。
次のコマンドで
etcd
Pod を検索します。kubectl --kubeconfig CLUSTER_KUBECONFIG get \ pod -n kube-system -l component=etcd -o wide
このコマンドは、次のノードのリストを返します。この例では、ノード 10.200.0.8 にアクセスできないことと、復元不能なことを前提としています。
NAME READY STATUS RESTARTS AGE IP NODE etcd-357b68f4ecf0 1/1 Running 0 9m2s 10.200.0.6 357b68f4ecf0 etcd-7d7c21db88b3 1/1 Running 0 33m 10.200.0.7 7d7c21db88b3 etcd-b049141e0802 1/1 Running 0 8m22s 10.200.0.8 b049141e0802
残りの正常な
etcd
Pod のいずれかに対してコマンドを実行します。kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it -n \ kube-system etcd-357b68f4ecf0 -- /bin/sh
現在のメンバーを検索して、障害のあるメンバーの ID を探します。コマンドはリストを返します。
etcdctl --endpoints=https://10.200.0.6:2379,https://10.200.0.7:2379 --key=/etc/kubernetes/pki/etcd/peer.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member list
このコマンドが返すリストの例を以下に示します。
23da9c3f2594532a, started, 7d7c21db88b3, https://10.200.0.6:2380, https://10.200.0.6:2379, false 772c1a54956b7f51, started, 357b68f4ecf0, https://10.200.0.7:2380, https://10.200.0.7:2379, false f64f66ad8d3e7960, started, b049141e0802, https://10.200.0.8:2380, https://10.200.0.8:2379, false
障害のあるメンバーを削除します。
etcdctl --endpoints=https://10.200.0.6:2379,https://10.200.0.7:2379 --key=/etc/kubernetes/pki/etcd/peer.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt \ member remove f64f66ad8d3e7960
ClusterStatus
の更新と障害のある apiEndpoint
の削除
以下の手順では、CLUSTER_KUBECONFIG はクラスタの kubeconfig
ファイルのパスです。
kubeadm-config
構成マップ内のClusterStatus
セクションを検索します。kubectl --kubeconfig CLUSTER_KUBECONFIG describe configmap -n \ kube-system kubeadm-config
このコマンドは次のような結果を返します。
... ClusterStatus: ---- apiEndpoints: 7d7c21db88b3: advertiseAddress: 10.200.0.6 bindPort: 6444 357b68f4ecf0: advertiseAddress: 10.200.0.7 bindPort: 6444 b049141e0802: advertiseAddress: 10.200.0.8 bindPort: 6444 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterStatus ...
構成マップを編集して、障害が発生した IP が含まれるセクションを削除します(この例では、
kubectl edit
コマンドを使用して10.200.0.8
を削除した結果を示します)。kubectl --kubeconfig CLUSTER_KUBECONFIG edit configmap \ -n kube-system kubeadm-config
編集後の構成マップは次のようになります。
... ClusterStatus: | apiEndpoints: 7d7c21db88b3: advertiseAddress: 10.200.0.6 bindPort: 6444 357b68f4ecf0: advertiseAddress: 10.200.0.7 bindPort: 6444 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterStatus ...
編集した構成マップを保存すると、障害が発生したノードがクラスタから削除されます。