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 工作節點並將其加入叢集。
最後修改日期:2025 年 1 月 15 日太平洋標準時間下午 3:49:kubeadm-reset:新增有關更多手動清理步驟的說明 (fc222599a9)