anpanman
Published on

Kubernetes 全 Namespace Rollout 管理教學(搭配 ChatGPT 生成指令)

目標

  • 先用 kubectl get pods --all-namespaces 取得所有 Pod 清單(可包含 namespace、pod 名稱、類型資訊)
  • 把清單貼給 ChatGPT,請它幫你生成針對每個 namespace 的 rollout 重啟指令(Deployment、StatefulSet、DaemonSet 混合)
  • 執行 GPT 幫你產生的指令進行重啟
  • 檢查哪些 Pod 已重啟,哪些還沒重啟
  • 針對 StatefulSet 的 updateStrategyOnDelete,須手動刪 Pod 或改策略

Step 1:列出所有 Pod(帶 namespace)

kubectl get pods --all-namespaces

Step 2:將輸出完整貼給 ChatGPT,請求

「請幫我依照 namespace 分組,針對每個 namespace 的 Deployment、StatefulSet、DaemonSet,生成 kubectl rollout restart 指令清單,指令格式為: kubectl rollout restart <type> <name> -n <namespace>, 其中 <type> 可以是 deployment、statefulset、daemonset, 並且同一個 namespace 裡的不同資源混合產生指令。」


Step 3:執行 ChatGPT 幫你生成的 rollout 重啟指令

例如:

kubectl rollout restart deployment argocd-applicationset-controller -n argocd
kubectl rollout restart statefulset vault -n vault
kubectl rollout restart daemonset kube-proxy -n kube-system
# ...其他指令依 ChatGPT 建議

Step 4:檢查 Pod 是否真的重啟(看 AGE 和 RESTARTS)

kubectl get pods --all-namespaces -o wide

Step 5:若 StatefulSet Pod 沒重啟,檢查更新策略

kubectl get statefulset <statefulset-name> -n <namespace> -o yaml | grep updateStrategy -A 3
  • type: OnDelete → 需要手動刪除 Pod 才會生效
  • type: RollingUpdate → 可用 rollout restart 自動更新

Step 6:手動刪除 Pod(必要時)

kubectl delete pod <pod-name> -n <namespace>

Step 7(選擇性):修改 StatefulSet 策略為 RollingUpdate 方便管理

kubectl patch statefulset <statefulset-name> -n <namespace> -p '{"spec": {"updateStrategy": {"type": "RollingUpdate"}}}'

Step 8:ChatGPT 可協助

  • 從 Pod 清單解析 Deployment、StatefulSet、DaemonSet 名稱與 namespace
  • 產生完整 rollout restart 指令清單(混合 type,依 namespace 分組)
  • 分析 rollout 後 Pod 是否有重啟(根據 AGE、RESTARTS)
  • 檢查 StatefulSet 的 updateStrategy 設定
  • 寫指令批量刪除舊 Pod