新增與維護節點
用 zeabur-installer 加入新節點,停止排程,用 kubectl 移走副本與移除節點,並在需要時安全地開啟節點終端機。
到 叢集 → 概覽 的 節點 查看每台主機的狀況。要多一台主機執行服務,見加入節點。主機要停機維護時,在該節點的操作選單選 停止排程,需要移走副本時再用 kubectl 的 drain。
- 只有用 Zeabur Installer(RKE2)安裝的叢集能用
zeabur-installer node add加節點。其他叢集用原本的安裝工具。 - 準備一台能用 root 操作的新 VM,以及安裝第一台伺服器時用的同一個
zeabur-installer執行檔。 - 所有節點放在同一家主機服務商的同一個區域,同區域內不同的可用區域沒有問題。跨服務商或跨區域時,延遲會拖慢 etcd、Kubernetes API 和儲存。
- 停止排程和恢復排程需要修改 Node 的權限。
drain和delete node在 kubectl 終端機執行,用的是你自己的權限。節點終端機要用管理員帳號開啟。
節點之間的防火牆要開放:
| 方向 | 連接埠 |
|---|---|
| 連到 RKE2 伺服器 | TCP 9345、6443 |
| 所有節點之間 | TCP 10250、9099,UDP 8472(Canal VXLAN) |
| RKE2 伺服器之間 | TCP 2379–2381 |
UDP 8472 只對叢集節點開放,不要對網際網路開放。Installer 的連線檢查測不到 UDP 8472,如果它被擋住,不同節點上的 Pod 會連不到彼此。
加入節點的指令都在 zeabur-installer,完整選項見 Installer 指令。
在現有的伺服器產生加入設定
Section titled “在現有的伺服器產生加入設定”以 root 登入現有的伺服器,執行:
sudo zeabur-installer node add --ttl 1h指令印出新 VM 要執行的內容:寫入 /etc/zeabur-installer/config.yaml 的設定,以及 plan 和 apply。輸出裡的權杖等同密碼,不要貼到公開的地方。
加入工作節點用會過期的 bootstrap 權杖,--ttl 預設 1 小時,最長 24 小時。要加入伺服器(控制平面),加上 --role server,用的是叢集的 server 權杖,不會過期。新 VM 連不到伺服器的內部位址時,用 --address 指定它連得到的位址。
叢集跑 Longhorn 或 zot 鏡像時,輸出會自動帶上對應的設定。設定檔還寫著 profile: single-node 時,輸出會提醒你改成 multi-node 並重新 apply。
在新 VM 執行
Section titled “在新 VM 執行”把安裝第一台伺服器用的 zeabur-installer 複製到新 VM,以 root 貼上上一步的輸出。它會寫好設定檔,再執行:
zeabur-installer planzeabur-installer applyplan 只列出網路檢查和警告,不改任何東西。有警告時先處理再繼續。apply 安裝 RKE2,等節點就緒才結束。
回到伺服器確認
Section titled “回到伺服器確認”sudo zeabur-installer node syncsudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes -o widenode sync 把新節點的位址加進 Installer 建立的基準網路政策。新加入的伺服器會自己同步。工作節點加入後,一定要在伺服器手動執行一次,在這之前網路政策會擋掉新節點的流量。看到新節點 Ready 後,撤銷工作節點的權杖,把 <ID> 換成 node add 輸出最後一行裡的 ID:
sudo /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml \ -n kube-system delete secret bootstrap-token-<ID>已加入的節點不受影響,之後也不能再用這份權杖加入。
etcd 需要過半數的伺服器才能運作。要在少一台時繼續運作,至少要三台伺服器。只有兩台時,任一台停機整個叢集就會停擺。
讓節點停機維護
Section titled “讓節點停機維護”在節點選單選 停止排程,節點列就會標示已停止排程。這會阻止新的 Pod 排到這台節點,已經在跑的 Pod 會留在原處。只是要重開機,做到這一步就夠了,不需要執行 drain。
也可以在 Zeabur 叢集 頁標題旁點 開啟 kubectl 終端機,執行:
kubectl cordon <node>把 <node> 換成節點名稱。重開機完成後,再恢復排程。
要先移走副本再維護
Section titled “要先移走副本再維護”到 Zeabur 叢集 頁標題旁點 開啟 kubectl 終端機,先列出這台節點上的 Pod,以及它們使用的 PVC:
kubectl get pods -A --field-selector spec.nodeName=<node> -o custom-columns=NS:.metadata.namespace,POD:.metadata.name,PVC:.spec.volumes[*].persistentVolumeClaim.claimName對照清單中的 PVC,確認哪些使用這台節點的 local-path 磁碟區。這些磁碟區的資料只存在這台節點上,不會跟著 Pod 搬到其他節點。
確認後,執行:
kubectl drain <node> --ignore-daemonsets --delete-emptydir-datadrain 會停止這台節點的排程,並驅逐 Pod,讓控制器在其他節點重新建立副本。DaemonSet 管理的 Pod 會留在原處。執行時請注意:
drain會遵守 PodDisruptionBudget;被擋住時會一直重試,直到允許驅逐。- 遇到不屬於任何控制器的 Pod,
drain會停下來。這類 Pod 刪掉後不會自動啟動,確認可以刪除後,才在指令末尾加上--force。 --delete-emptydir-data會清空被驅逐 Pod 的emptyDir暫存資料。- 使用這台節點
local-path磁碟區的 Pod 也會被驅逐。重新建立的 Pod 無法在其他節點使用這些磁碟區,會維持Pending,直到原節點回來。資料不會因為drain遺失;對這些 Pod 來說,結果跟直接停機一樣,都得等這台節點恢復。
如果 Zeabur 自己也跑在這台節點上,drain 時頁面會斷線約一分鐘。請重新整理頁面並重新登入;kubectl 終端機也會斷線,需要重新開啟。
等 drain 完成後,再將節點停機維護。
維護完成、節點恢復運作後,在節點選單選 恢復排程。
也可以到 Zeabur 叢集 頁標題旁點 開啟 kubectl 終端機,執行:
kubectl uncordon <node>恢復排程後,新的 Pod 就能排到這台節點。
不要移除叢集唯一的節點,也不要移除最後一台控制節點。
先到 Zeabur 叢集 頁標題旁點 開啟 kubectl 終端機,確認控制節點數量:
kubectl get nodes -l node-role.kubernetes.io/control-plane如果只剩一台控制節點,不要刪除它。移除後如果剩不到三台 server 節點,控制平面再少一台就無法運作。
local-path 磁碟區的資料只在這台 VM 上。節點移除後,使用這些磁碟區的 Pod 沒有地方可以啟動。依照「讓節點停機維護」的步驟檢查 Pod 與磁碟區,再執行 drain,完成後才刪除節點:
kubectl drain <node> --ignore-daemonsets --delete-emptydir-datakubectl delete node <node>接著登入被移除的那台 VM,以 root 執行:
/usr/local/bin/rke2-uninstall.shzeabur-installer uninstall --purge刪除 Kubernetes 節點後,還要完成 VM 上的解除安裝。 在執行解除安裝前,只要 RKE2 重新啟動,這台 VM 就會再次加入叢集。
/var/lib/zeabur/storage 底下的磁碟區會留在 VM 上。確認不再需要這些資料後,再手動刪除。
最後,回到執行 Zeabur Installer 的伺服器,執行:
sudo zeabur-installer node sync這會把已移除節點的位址從基準網路政策中拿掉。
開啟節點終端機
Section titled “開啟節點終端機”節點終端機 會在主機上開一個完整的 root shell。用管理員帳號登入,在節點列按 節點終端機,看過要建立的終端機 Pod 和時限,再按 開啟終端機。
節點會記下一筆事件,寫明是誰在什麼時候開啟的。畫面顯示 其他人也能進入這個終端機 時,表示有角色綁定讓叢集管理員以外的人能在終端機所在的 Namespace 建立 Pod。移除列出的角色綁定後再重新檢查。
關閉終端機時,Zeabur 會移除終端機 Pod,Pod 最多保留 30 分鐘。如果 Pod 留了下來,在節點下方的終端機 Pod 清單按 移除終端機 Pod,檢查後確認。
- 加入時連不到伺服器:確認新 VM 連得到
node add印出的伺服器位址的 TCP 9345、6443,以及上面表格的其他連接埠。 - 新節點已就緒,但不同節點上的服務連不到彼此:檢查 UDP 8472,以及網路政策是否已放行新節點。
drain一直停著:它在等 PodDisruptionBudget 放行,或停在不屬於任何控制器的 Pod 上。用kubectl get pdb -A看哪個預算擋住了,處理後再執行一次。- 副本在新節點
Pending:它用的是舊節點的local-path磁碟區,要等舊節點回來。 - 終端機 Pod 無法啟動:看該 Pod 的事件,常見原因是映像檔下載失敗。