具代表性的面試主題

如何設計 Kubernetes Pod 級資源請求?

後端困難
Offer.cc 編輯團隊發佈 更新

題幹

一個 Pod 包含 API 代理和兩個協作工作程序。你會如何在 Pod 級分配 CPU 與記憶體,決定哪些約束仍保留在容器級,並避免遷移後出現鄰居爭用故障?

題幹與適用場景

Kubernetes Pod 級資源允許 Pod 在容器資源之外宣告 CPU、記憶體或 hugepages 請求與限制。兩者同時存在時,Pod 級值優先,並影響調度、QoS 與 OOM 評分。發布前必須確認 PodLevelResources 功能閘和叢集版本。

假設代理和工作程序共享突發負載,但代理有延遲 SLO,工作程序可以使用剩餘容量。目標是在不讓調度器或 kubelet 強制執行錯誤預算的前提下表達這種關係。

面試官考察點

面試官關注資源所有權模型、優先順序規則是否正確,以及是否知道 Pod 級資源會改變調度和 QoS。強回答會討論總量與容器保證、限制、自動擴縮、可觀測性和遷移測試。

普通回答把容器請求相加後填入 spec.resources。強回答會說明 Pod 預算是否為共享池、哪個容器需要底線,以及如何防止工作程序占用代理延遲餘量。

回答前需要釐清的問題

  • Pod 級請求是共享預算,還是每個容器的硬性最低值?
  • 涉及哪些 Kubernetes 版本、功能閘、資源管理器和作業系統?
  • 代理是否需要獨立於工作程序的 CPU 底線或記憶體限制?
  • HPA、VPA 和驅逐策略如何觀察新的資源範圍?
  • 遷移期間同時設定 Pod 級和容器級請求會怎樣?

如果容器需要獨立擴縮或故障域,拆成不同 Pod 可能更安全。如果它們確實共享生命週期和突發預算,Pod 級資源更能表達關係。

30 秒回答框架

「我會先確認功能閘和版本,再把 Pod 建模為共享預算並明確代理底線。Pod 級請求優先,所以要避免混合設定產生意外。我會測試 QoS、OOM 和自動擴縮輸入,先灰度清單,對比延遲、節流、驅逐和成本,並保留回滾到容器級請求的路徑。」

分步驟深入解答

  1. 劃分資源角色。 測量代理延遲敏感度、工作程序突發、穩態用量和記憶體增長,決定共享預算還是隔離保證。
  2. 確認能力。 核對伺服器版本、控制平面和節點上的 PodLevelResources、支援的資源類型及作業系統限制。
  3. 設定 Pod 預算。 用請求影響調度,用限制設定總上限,並為代理延遲底線與工作程序突發留出空間。
  4. 消除優先順序歧義。 遷移期間記錄 Pod 級值覆蓋容器級值,刪除衝突設定,或明確保留兩層的目的。
  5. 檢查 QoS 與驅逐。 重新計算 QoS 和 OOM 行為,測試節點壓力、節流和工作程序爭用;總量健康仍可能掩蓋代理飢餓。
  6. 灰度觀察。 先發布一個工作負載,追蹤 p95 延遲、CPU 節流、記憶體壓力、OOM、驅逐、重啟和成本,護欄穩定後再擴大。

替代方案包括拆分 Deployment、只使用容器級請求,或給 sidecar 設定明確限制。Pod 級資源適合生命週期和突發容量有意共享的場景。

高品質示範回答

「代理需要延遲底線,工作程序可以借用剩餘 CPU。我會設定反映正常總量的 Pod 請求和突發上限,然後驗證工作程序高負載時代理不會飢餓。遷移時刪除衝突容器請求,或明確它們保留的目的,因為 Pod 級值會優先。我會在兩台節點上灰度,觀察 p95 延遲、節流、OOM、驅逐和自動擴縮行為;如果代理 SLO 退化,就回滾到舊的容器策略。」

常見錯誤

  • 錯誤表現: 認為 Pod 請求自動提供每容器保證 → 失敗原因: 預算可能是共享的 → 修正方法: 明確底線和隔離。
  • 錯誤表現: 不記錄衝突容器值 → 失敗原因: Pod 優先順序會讓運維意外 → 修正方法: 文件化並測試生效資源。
  • 錯誤表現: 只看 CPU 利用率 → 失敗原因: 記憶體壓力和 OOM 行為可能改變 → 修正方法: 聯合觀察 CPU、記憶體、QoS、驅逐和延遲。
  • 錯誤表現: 只在一個控制平面元件啟用 → 失敗原因: 所有必要節點和元件都要支援 → 修正方法: 灰度前驗證叢集能力。

追問及應對

Pod 沒達到限制但代理仍然飢餓,怎麼辦?

視為爭用故障。增加代理底線、拆分工作負載或使用容器級隔離;總量餘量不保證延遲。

Pod 級請求如何影響 QoS?

兩層同時存在時 Pod 級值優先,並影響 Pod QoS 與 OOM 計算。遷移時重新計算類別並測試節點壓力。

Windows Pod 能使用 Pod 級資源嗎?

檢查對應版本限制。Kubernetes 1.35 文件不支援 Windows Pod 的 Pod 級資源,因此應繼續使用容器級策略。

什麼時候應該拆 Pod?

當容器需要獨立擴縮、失敗處理或 SLO 時拆分。只有在共享生命週期和突發預算有意且可觀測時才保留同一 Pod。

公開來源

同類題目