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 重建後仍持續有效,不需修改腳本
注意事項¶
多 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/
,避免混用
相關概念¶
- EKS Node Group Migration Runbook
- jenkins-msk-iam-auth-debug----dangling-------dangling---
- K8s 多站點分支 Image 部署診斷
- MSK IAM Auth JAR Classpath 管理
相關視角¶
以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:
- Jenkins Shared Library Branch Risk — 共享:
ci-cd,jenkins,pipeline/ 獨特:credentials,shared-library - Jenkins Pipeline Silent Failure — 共享:
ci-cd,jenkins,pipeline/ 獨特:exit-code,groovy - Helm Annotation Special Character Escaping — 共享:
jenkins,pipeline/ 獨特:annotation,escaping
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-04-01 | e9680a7b-7572-4a2f-949b-d4d7c75a4e96 | 確立了 CI/CD Pipeline 中 kubectl exec 應使用 deploy/