跳轉到

Jenkins Pipeline kubectl exec Target

概念概覽

kubectl exec 目標格式對比

核心知識

kubectl exec 目標格式對比

在 Jenkins Pipeline 等自動化腳本中,kubectl exec 的目標格式直接影響長期穩定性:

  • 裸 Pod 名稱(錯誤)kubectl exec kafka-client -- ...
  • 實際 Pod 名稱形如 kafka-client-d948649db-ml6gn,裸名稱直接失敗
  • Pod 因 rollout、重建、節點遷移後名稱改變,腳本立即失效
  • 錯誤訊息:Error from server (NotFound): pods "kafka-client" not found

  • Deployment 引用(正確)kubectl exec deploy/kafka-client -- ...

  • kubectl 自動選擇一個 Ready 的 Pod 執行
  • Pod 重建後仍持續有效,不需修改腳本
# 正確寫法
kubectl exec -i -n ps --context gamania-ps-dev deploy/kafka-client -- kafka-topics.sh ...

注意事項

多 replica Deployment 使用 deploy/<name> exec 時,kubectl 隨機選擇一個 Pod,多 replica 場景下行為可能不一致(例如狀態查詢類指令)。StatefulSet 則使用 statefulset/<name> 格式。

經驗教訓

  • CI/CD Pipeline 中任何硬編碼裸 Pod 名稱都是定時炸彈,Pod 重建後立即失效

  • 統一規範:所有自動化腳本的 kubectl exec 一律使用 deploy/ 或 statefulset/

  • NotFound 錯誤先檢查是否用了裸名稱,不要直接懷疑 namespace 或 context 問題

常見陷阱

  • 舊 Pipeline 可能曾因 Pod 名稱碰巧未改變而長期「正常」,直到某次 rollout 才爆發

  • 多 replica 下 deploy/ exec 會隨機選 Pod,狀態不一致的場景需額外注意

最佳實踐

  • kubectl exec 一律使用 deploy/,禁止硬編碼裸 Pod 名稱

  • Pipeline 腳本中加入 kubectl get deploy/ 前置確認,讓錯誤更早暴露

  • StatefulSet 用 statefulset/,避免混用

相關概念

相關視角

以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:

來源 Sessions

日期 Session 貢獻摘要

| 2026-04-01 | e9680a7b-7572-4a2f-949b-d4d7c75a4e96 | 確立了 CI/CD Pipeline 中 kubectl exec 應使用 deploy/ 而非裸 Pod 名稱的最佳實踐,並記錄了裸名稱造成 NotFound 的完整除錯過程。 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-04-01