Kubernetes : ノードを削除する2025/11/07 |
|
既存の Kubernetes クラスターからノードを削除する場合は以下のように設定します。 |
|
| [1] | Control Plane ノードを削除する場合のみ、事前に Etcd の削除やロードバランス設定の削除を実行します。 |
|
ctrl:~ # kubectl get nodes NAME STATUS ROLES AGE VERSION dlp-1.srv.world Ready control-plane 11m v1.34.1 dlp.srv.world Ready control-plane 77m v1.34.1 node01.srv.world Ready <none> 68m v1.34.1 node02.srv.world Ready <none> 64m v1.34.1 node03.srv.world Ready <none> 2m44s v1.34.1ctrl:~ # kubectl get pods -n kube-system | grep etcd etcd-dlp-1.srv.world 1/1 Running 0 12m etcd-dlp.srv.world 1/1 Running 1 (26m ago) 78m # 例として [dlp-1.srv.world] を削除する # 削除しない方の Control Plane で起動している Etcd へアクセスして # 削除対象ノードの設定を削除する ctrl:~ # kubectl -n kube-system exec -it etcd-dlp.srv.world -- sh sh-5.2# sh-5.2# etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member list b070136c0691a28a, started, dlp-1.srv.world, https://10.0.0.31:2380, https://10.0.0.31:2379, false dd4b95995dc266b1, started, dlp.srv.world, https://10.0.0.30:2380, https://10.0.0.30:2379, false # 削除したいノードのメンバーを削除 sh-5.2# etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key member remove b070136c0691a28a Member b070136c0691a28a removed from cluster 63678238411c70a3 sh-5.2# exit exit
ctrl:~ #
vi /etc/nginx/nginx.conf # 対象ノードの設定を削除 stream { upstream k8s-api { server 10.0.0.30:6443; ###server 10.0.0.31:6443; } server { listen 6443; proxy_pass k8s-api; } }ctrl:~ # systemctl reload nginx
|
| [2] | ノードをクラスターから削除します。 以降は Control Plane / Worker 共に同じ手順です。 |
|
ctrl:~ # kubectl get nodes NAME STATUS ROLES AGE VERSION dlp-1.srv.world Ready control-plane 13m v1.34.1 dlp.srv.world Ready control-plane 79m v1.34.1 node01.srv.world Ready <none> 70m v1.34.1 node02.srv.world Ready <none> 66m v1.34.1 node03.srv.world Ready <none> 5m2s v1.34.1 # 対象ノードを安全に削除するための事前準備 # --ignore-daemonsets ⇒ DeamonSet の Pod は無視 # --delete-emptydir-data ⇒ emptyDir ボリュームを持つ Pod は無視 # --force ⇒ 単体で作成された Pod も削除 ctrl:~ # kubectl drain dlp-1.srv.world --ignore-daemonsets --delete-emptydir-data --force node/dlp-1.srv.world cordoned Warning: ignoring DaemonSet-managed Pods: calico-system/calico-node-ls6jc, calico-system/csi-node-driver-bzm98, kube-system/kube-proxy-hbsdf node/dlp-1.srv.world drained # 一定時間経過後に確認 # 時間は環境によって異なる ctrl:~ # kubectl get nodes dlp-1.srv.world NAME STATUS ROLES AGE VERSION dlp-1.srv.world NotReady,SchedulingDisabled control-plane 14m v1.34.1 # 削除処理を実行 ctrl:~ # kubectl delete node dlp-1.srv.world node "dlp-1.srv.world" deletedctrl:~ # kubectl get nodes NAME STATUS ROLES AGE VERSION dlp.srv.world Ready control-plane 81m v1.34.1 node01.srv.world Ready <none> 72m v1.34.1 node02.srv.world Ready <none> 68m v1.34.1 node03.srv.world Ready <none> 6m33s v1.34.1 |
| [3] | 削除したノードで、kubeadm の設定をリセットしておきます。 |
|
dlp-1:~ # kubeadm reset
[reset] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
[reset] Use 'kubeadm init phase upload-config kubeadm --config your-config-file' to re-upload it.
W1107 10:19:38.922008 7856 reset.go:137] [reset] Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get node registration: failed to get corresponding node: nodes "dlp-1.srv.world" not found
W1107 10:19:38.923912 7856 preflight.go:55] [reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y
[preflight] Running pre-flight checks
W1107 10:19:40.944544 7856 removeetcdmember.go:105] [reset] No kubeadm config, using etcd pod spec to get data directory
[reset] Deleted contents of the etcd data directory: /var/lib/etcd
[reset] Stopping the kubelet service
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Deleting contents of directories: [/etc/kubernetes/manifests /var/lib/kubelet /etc/kubernetes/pki]
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/super-admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]
The reset process does not perform cleanup of CNI plugin configuration,
network filtering rules and kubeconfig files.
For information on how to perform this cleanup manually, please see:
https://k8s.io/docs/reference/setup-tools/kubeadm/kubeadm-reset/
|
| Sponsored Link |
|
|