kubeadm reset
盡力撤銷 `kubeadm init` 或 `kubeadm join` 所做的更改。
Synopsis
盡力撤銷由“kubeadm init”或“kubeadm join”對該主機所做的更改。
“reset”命令執行以下階段:
preflight Run reset pre-flight checks
remove-etcd-member Remove a local etcd member.
cleanup-node Run cleanup node.
kubeadm reset [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
證書儲存目錄的路徑。如果指定,則清理該目錄。 | |
--cleanup-tmp-dir | |
清理 "/etc/kubernetes/tmp" 目錄 | |
--config string | |
kubeadm 配置檔案路徑。 | |
--cri-socket string | |
用於連線的 CRI 套接字路徑。如果為空,kubeadm 將嘗試自動檢測此值;僅當安裝了多個 CRI 或使用非標準 CRI 套接字時才使用此選項。 | |
--dry-run | |
不應用任何更改;僅輸出將要執行的操作。 | |
-f, --force | |
在不提示確認的情況下重置節點。 | |
-h, --help | |
重置幫助 | |
--ignore-preflight-errors strings | |
要顯示為警告的檢查錯誤列表。例如:'IsPrivilegedUser,Swap'。值 'all' 將忽略所有檢查中的錯誤。 | |
--kubeconfig string 預設值:"/etc/kubernetes/admin.conf" | |
與叢集通訊時使用的 kubeconfig 檔案。如果未設定該標誌,則會在一系列標準位置中搜索現有的 kubeconfig 檔案。 | |
--skip-phases strings | |
要跳過的階段列表 |
從父命令繼承的選項
--rootfs string | |
“真實”主機根檔案系統的路徑。這將導致 kubeadm chroot 到提供的路徑。 |
重置工作流程
`kubeadm reset` 負責清理節點本地檔案系統上由 `kubeadm init` 或 `kubeadm join` 命令建立的檔案。對於控制平面節點,`reset` 還會從 etcd 叢集中移除該節點本地的堆疊 etcd 成員。
`kubeadm reset phase` 可用於執行上述工作流的獨立階段。要跳過一系列階段,您可以使用 `--skip-phases` 標誌,該標誌的工作方式類似於 `kubeadm join` 和 `kubeadm init` 的階段執行器。
`kubeadm reset` 還支援用於傳遞 ResetConfiguration
結構 的 `--config` 標誌。
外部 etcd 成員的清理
`kubeadm reset` 不會刪除任何 etcd 資料(如果使用外部 etcd)。這意味著,如果您再次使用相同的 etcd 端點執行 `kubeadm init`,您將看到來自先前叢集的狀態。
要擦除 etcd 資料,建議使用 etcdctl 等客戶端,例如:
etcdctl del "" --prefix
有關更多資訊,請參閱 etcd 文件。
CNI 配置的清理
CNI 外掛使用 `/etc/cni/net.d` 目錄來儲存其配置。`kubeadm reset` 命令不會清理該目錄。在主機上保留 CNI 外掛的配置可能會有問題,如果該主機以後被用作新的 Kubernetes 節點,並且該叢集中部署了不同的 CNI 外掛。這可能導致 CNI 外掛之間的配置衝突。
要清理目錄,請在需要時備份其內容,然後執行以下命令:
sudo rm -rf /etc/cni/net.d
網路流量規則的清理
`kubeadm reset` 命令不會清理 kube-proxy 應用於主機的任何 iptables、nftables 或 IPVS 規則。kube-proxy 中的一個控制迴圈可確保每個節點主機上的規則同步。有關更多詳細資訊,請參閱 虛擬 IP 和服務代理。
如果不清理規則,當主機以後用作 Kubernetes 節點或用於其他目的時,不應造成任何問題。
如果您希望執行此清理,可以使用叢集中使用的與 kube-proxy 相同的容器,以及 `kube-proxy` 二進位制檔案的 `--cleanup` 標誌。
docker run --privileged --rm registry.k8s.io/kube-proxy:v1.34.0 sh -c "kube-proxy --cleanup && echo DONE"
上述命令的輸出應在結尾處顯示“DONE”。您可以使用您偏好的容器執行時來啟動容器,而不是 Docker。
清理 $HOME/.kube
`$HOME/.kube` 目錄通常包含配置檔案和 kubectl 快取。雖然不清理 `$HOME/.kube/cache` 的內容不是問題,但該目錄中有一個重要的檔案。那就是 `$HOME/.kube/config`,kubectl 使用它來向 Kubernetes API 伺服器進行身份驗證。在 `kubeadm init` 完成後,會指示使用者將 `/etc/kubernetes/admin.conf` 檔案複製到 `$HOME/.kube/config` 位置,並授予當前使用者訪問許可權。
`kubeadm reset` 命令不會清理 `$HOME/.kube` 目錄的任何內容。根據呼叫 `kubeadm reset` 後誰將訪問此主機,不刪除 `$HOME/.kube/config` 檔案可能會有問題。如果同一叢集繼續存在,強烈建議刪除該檔案,因為其中儲存的管理員憑據將繼續有效。
要清理目錄,請檢查其內容,在需要時進行備份,然後執行以下命令:
rm -rf $HOME/.kube
kube-apiserver 的優雅關機
如果您已配置 `kube-apiserver` 帶有 `--shutdown-delay-duration` 標誌,則可以在執行 `kubeadm reset` 之前執行以下命令嘗試優雅地關閉正在執行的 API 伺服器 Pod:
yq eval -i '.spec.containers[0].command = []' /etc/kubernetes/manifests/kube-apiserver.yaml
timeout 60 sh -c 'while pgrep kube-apiserver >/dev/null; do sleep 1; done' || true
下一步
- kubeadm init 用於引導 Kubernetes 控制平面節點
- kubeadm join 以引導 Kubernetes 工作節點並將其加入叢集。