K3s Cluster Nodes 重啟管理 Script

  • 順序:Server 節點 → Agent 節點 1 → Agent 節點 2
  1. 先重開 Server 節點 - 等待完全啟動(etcd + API server 就緒)
  2. 再依序重開 Agent 節點
    1. Agent 1
    2. Agent 2
  • 原因:Agent 節點啟動時需要連接到 Server 的 API server,如果 Server 還沒準備好,Agent 會一直重試連接。
  • 順序:依序重開 Server 節點,最後重開 Agent 節點
  1. Server 1 重開 - 等待加入叢集(可以看到其他 2 個 server)
  2. Server 2 重開 - 等待加入叢集(可以看到其他 2 個 server)
  3. Server 3 重開 - 等待叢集穩定(可以看到其他 3 個 server)
  4. 所有 Agent 節點依序重開
  • 關鍵:確保至少有 2 個 Server 節點在線上(etcd quorum),才重開第 3 個。
  • k3s-reboot-manager.sh 可在 Server 上執行, 但要先設定好 Server 可以使用 ssh 免密碼連上所有 Nodes
  1. 設定 SSH 免密碼登入 (在主要的 Server 上執行)

    # 生成 SSH key(如果還沒有)
    sudo ssh-keygen -t rsa -b 4096 -N "" -f /root/.ssh/id_rsa
    
    # 複製 key 到 Agent 節點(Exp. 使用 jonathan 帳號)
    sudo ssh-copy-id [email protected]
    
    # 測試連線
    sudo ssh [email protected] "echo SSH OK"

  2. 在 Agent 節點設定 sudo 免密碼
    1. SSH 到 Agent 節點:

      sudo ssh [email protected]

    2. 在 Agent 節點上執行:

      # 設定 jonathan 使用者 sudo 免密碼
      echo 'jonathan ALL=(ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/jonathan
      sudo chmod 440 /etc/sudoers.d/jonathan
      
      # 測試 sudo 免密碼
      sudo -n true && echo "Sudo OK"
      
      # 登出
      exit

  3. 從 Server 測試完整流程

    # 測試 SSH + sudo reboot
    sudo ssh [email protected] "sudo -n reboot --help"
    
    # 如果上面的命令成功,表示設定正確

  1. 下載 k3s-reboot-manager.sh

    sudo curl -o /usr/local/bin/k3s-reboot-manager.sh https://raw.githubusercontent.com/tryweb/k3s/refs/heads/main/systools/k3s-reboot-manager.sh
    sudo chmod a+x /usr/local/bin/k3s-reboot-manager.sh

    環境需要安裝 jq 套件

    sudo apt-get update && sudo apt-get install -y jq

  2. 互動式模式

    jonathan@k3s-master-171:~$ sudo k3s-reboot-manager.sh
    [INFO] === K3s Server 遠端節點重開機管理工具 ===
    
    
    [INFO] 當前叢集節點狀態:
    
    NAME             STATUS   ROLES                  AGE   VERSION        INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
    k3s-master-171   Ready    control-plane,master   18d   v1.33.6+k3s1   192.168.11.171   <none>        Ubuntu 24.04.3 LTS   6.8.0-90-generic   containerd://2.1.5-k3s1.33
    k3s-worker-172   Ready    <none>                 18d   v1.33.6+k3s1   192.168.11.172   <none>        Ubuntu 24.04.3 LTS   6.8.0-90-generic   containerd://2.1.5-k3s1.33
    k3s-worker-173   Ready    <none>                 18d   v1.33.6+k3s1   192.168.11.173   <none>        Ubuntu 24.04.3 LTS   6.8.0-90-generic   containerd://2.1.5-k3s1.33
    
    請選擇操作:
      1) 重開單一 Agent 節點
      2) 重開所有 Agent 節點(依序)
      3) 重開本地 Server 節點
      4) 顯示節點狀態
      5) 驗證叢集狀態
      0) 退出
    
    請選擇 [0-5]:

  3. 命令列模式

    # 重開單一節點
    sudo /usr/local/bin/k3s-reboot-manager.sh --reboot-agent k3s-worker-172 jonathan

  1. Server(Master) 出現 Uncordon 狀態, Exp. k3s-master-171 可以手動恢復

    kubectl uncordon k3s-master-171

  • tech/k3s/k3s-reboot-manager.txt
  • 上一次變更: 2025/12/13 16:42
  • jonathan