1. HPA 介紹
Kubernetes Horizontal Pod Autoscaler (HPA) 通過(guò)監(jiān)控 Pod 的資源使用情況(如 CPU、內(nèi)存、自定義指標(biāo)等),自動(dòng)調(diào)整 Pod 的副本數(shù)量,以保持應(yīng)用的高可用性和資源利用率。
2. HPA 擴(kuò)縮容機(jī)制
2.1 擴(kuò)容機(jī)制(Scaling Up)
-
檢查間隔:默認(rèn)每 15 秒 采樣一次(可配置
--horizontal-pod-autoscaler-sync-period)。 - 觸發(fā)條件:當(dāng)負(fù)載指標(biāo) 超過(guò) 設(shè)定的目標(biāo)值,HPA 立即 擴(kuò)容。
-
計(jì)算邏輯:
- HPA 計(jì)算 每個(gè) Pod 需要的資源,并決定需要多少個(gè) Pod 來(lái)滿足目標(biāo)值。
- Pod 副本數(shù)取向上取整的計(jì)算值。
- 計(jì)算時(shí),取 過(guò)去若干采樣周期內(nèi)的最大值 以確保負(fù)載高峰能夠被正確處理。
?? 示例:
當(dāng)前 Pod 數(shù)量:3
CPU 目標(biāo)值:50%
當(dāng)前 CPU 使用率(取最近幾次采樣的最大值):75%
計(jì)算公式:
新Pod數(shù) = 當(dāng)前Pod數(shù) * (當(dāng)前CPU使用率 / 目標(biāo)CPU使用率) = 3 * (75 / 50) = 4.5,向上取整為 5最終決定:擴(kuò)容到 5 個(gè) Pod
-
時(shí)間消耗:
- 采樣時(shí)間:15 秒
- 觸發(fā)擴(kuò)容:立即
- Pod 啟動(dòng)時(shí)間:30s - 1min(取決于鏡像大小、調(diào)度速度等)
- 最終擴(kuò)容完成時(shí)間 ≈ 30s - 1min
-
擴(kuò)容穩(wěn)定性窗口(可選):
- 默認(rèn) 無(wú)穩(wěn)定性窗口(
--horizontal-pod-autoscaler-upscale-stabilization=0)。 - 可配置一個(gè)時(shí)間窗口,在該窗口內(nèi)取 最小 Pod 需求值,防止瞬時(shí)流量峰值導(dǎo)致過(guò)度擴(kuò)容。
- 默認(rèn) 無(wú)穩(wěn)定性窗口(
2.2 縮容機(jī)制(Scaling Down)
- 檢查間隔:默認(rèn)每 15 秒 采樣一次。
- 觸發(fā)條件:當(dāng)負(fù)載指標(biāo) 低于 設(shè)定目標(biāo)值,HPA 需要觀察 穩(wěn)定性窗口(默認(rèn) 5 分鐘) 后才會(huì)縮容。
-
計(jì)算邏輯:
- HPA 在 過(guò)去 5 分鐘窗口內(nèi) 計(jì)算 最大 Pod 需求值,以決定是否縮容。
- 避免負(fù)載短時(shí)間下降導(dǎo)致不必要的縮容。
- 計(jì)算時(shí),取 過(guò)去若干采樣周期內(nèi)的最小值,確??s容不會(huì)導(dǎo)致應(yīng)用不可用。
?? 示例:
當(dāng)前 Pod 數(shù)量:5
CPU 目標(biāo)值:50%
當(dāng)前 CPU 使用率(取最近幾次采樣的最小值):25%
計(jì)算公式:
新Pod數(shù) = 當(dāng)前Pod數(shù) * (當(dāng)前CPU使用率 / 目標(biāo)CPU使用率) = 5 * (25 / 50) = 2.5,向下取整為 3最終決定:縮容到 3 個(gè) Pod
-
時(shí)間消耗:
- 采樣時(shí)間:15 秒
- 觀察窗口:默認(rèn) 5 分鐘(可配置
--horizontal-pod-autoscaler-downscale-stabilization=300) - 優(yōu)雅終止 Pod(默認(rèn)
terminationGracePeriodSeconds=30秒) - 最終縮容完成時(shí)間 ≈ 5min 30s
3. HPA 配置參數(shù)
| 參數(shù) | 作用 | 默認(rèn)值 |
|---|---|---|
--horizontal-pod-autoscaler-sync-period |
HPA 采樣間隔 | 15s |
--horizontal-pod-autoscaler-downscale-stabilization |
縮容穩(wěn)定性窗口,過(guò)去 N 秒內(nèi)取最大 Pod 需求值 | 300s(5 分鐘) |
--horizontal-pod-autoscaler-upscale-stabilization |
擴(kuò)容穩(wěn)定性窗口,過(guò)去 N 秒內(nèi)取最小 Pod 需求值 | 0s(立即擴(kuò)容) |
4. 結(jié)論
| 操作 | 觸發(fā)條件 | 觸發(fā)所需時(shí)間 | 額外等待 | 總時(shí)間 |
|---|---|---|---|---|
| 擴(kuò)容 | 指標(biāo) 高于 目標(biāo)值 | 15 秒內(nèi) | Pod 啟動(dòng)時(shí)間(30s-1min) | 30s - 1min |
| 縮容 | 指標(biāo) 低于 目標(biāo)值 持續(xù) 5 分鐘 | 5 分鐘 | Pod 終止時(shí)間(30s) | 5min 30s |
5. 調(diào)優(yōu)建議
-
減少擴(kuò)容抖動(dòng):可設(shè)置
--horizontal-pod-autoscaler-upscale-stabilization避免瞬時(shí)峰值導(dǎo)致過(guò)度擴(kuò)容。 -
優(yōu)化縮容響應(yīng)速度:適當(dāng)降低
--horizontal-pod-autoscaler-downscale-stabilization,減少縮容等待時(shí)間。 - Pod 啟動(dòng)優(yōu)化:確保應(yīng)用啟動(dòng)時(shí)間較短,避免擴(kuò)容時(shí)影響可用性。
通過(guò)合理配置 HPA,可實(shí)現(xiàn)自動(dòng)化擴(kuò)縮容,保障應(yīng)用的穩(wěn)定性和資源利用率。