測試環境
- 阿裡雲 ACK 1.16.6 3master 3worker(4c 8g) 獨占版, kubemark 模拟 100 個 node;
- 阿裡雲 ACK 1.14.8 3master 3worker(4c 8g) 獨占版, kubemark 模拟 100 個 node。
測試名額
PodstartuplatencySaturate(飽和測試)
在 1 個 namespace 下建立 replicas 為 3000 的 deployment,記錄每個 pod 所需時間,按照時間大小排序後得到(50 90 99 百分點結果)。
Podstartuplatencylatency(存量測試)
在已建立 3000 個 pod 的場景下,連續建立 500 個 replicas 為 1 的 deployment,測試 pod 的建立時間。
吞吐量
在建立 pod 的過程中,測試每秒建立的 pod 個數。
api 響應時間
在整個測試過程(建立 pod,删除 pod)中,api-server 收到請求到響應的時間彙總,按 verb、resouce、scope、percentage 區分。
實驗結果
PodstartuplatencySaturate(ms)
1.16
PodStartupLatency | create_to_schedule | schedule_to_run | run_to_watch | schedule_to_watch | pod_startup |
---|---|---|---|---|---|
50 | 1000 | 1044.237 | 1749.131 | 1749.184 | |
90 | 1640.885 | 2401.273 | |||
99 | 2126.116 | 2958.44 |
1.14
1083.588 | 1836.33 | 1838.244 | |||
1790.928 | 2610.571 | 2611.449 | |||
2000 | 2852.53 | 4303.789 |
對比:
空載下運作3000個pod,50%pod啟動時間1.16相比1.14快5%左右。 90%的pod啟動時間,1.16啟動時間提升3%-10%,99%的pod啟動時間上1.16提升最大,速度提升25%-50%。在最壞情況下,1.16的效果明顯好于1.14.
Podstartuplatency(ms)
1004.569 | 1727.642 | 1727.662 | |||
1692.732 | 2414.719 | 2429.138 | |||
2124.746 | 2892.659 | 2897.378 |
1046.108 | 1772.073 | 1774.335 | |||
1772.192 | 2613.083 | ||||
2260.846 | 2959.74 |
對比
在存量測試下,50% pod 啟動時間上, 1.16 效率提升 3%;90% 和 99% pod 的啟動時間上,1.16 效率提升 5%。總體來說 1.16 效果略微好于 1.14。
吞吐量(個數)
版本 | average | |||
---|---|---|---|---|
19.354 | 20 | 23.6 | ||
24.2 |
- 在建立 pod 過程中,50%、90% 和平均情況下,1.14 和 1.16 建立 pod 吞吐量相同;
- 99 分位點情況,1.16 提升 3%。在最壞情況下,1.16 的效果優于 1.14。
api 響應延時(ms)
Resource | Scope | Verb | Perc50 | Perc90 | Perc99 |
---|---|---|---|---|---|
pods | namespace | DELETE | 25.279 | 45.502 | 54.906 |
GET | 25.17 | 45.307 | 49.837 | ||
LIST | 25 | 45 | 49.5 |
(Pod)
nodes | cluster | PATCH | 25.41 | 45.74 | 78.87 |
(Nodes)
25.432 | 45.779 | 76.445 | |||
namespaces | 25.018 | 45.033 | 49.536 | ||
統計整個建立 Pod 和删除 Pod 過程中 api 響應時間,将其根據時間大小排序後對 pod 和 node 操作選取時間最長的三項進行對比。
對比可以發現,對 pod 和 node 操作的 api 時間,1.14 和 1.16 基本一緻:
- 最壞情況下(99 分點)對 pod 的 delete 操作時間,1.14 相比 1.16 要快 30% 左右;
- 對 node 的 PATCH 操作,1.16 相比 1.14 要快 40% 左右;
- 對于其它 apicall(如 LIST 和 GET)二者并沒有明顯差距。
總結
總體來說,1.16 版本相對于 1.14 版本的主要提高在無狀态 Pod(Pod 不用挂載 configmap、secret 等 volume)的建立速度上:
- 1.16 和 1.14 的 pod 建立時間都滿足 Kubernetes sig-scalability 定義的 SLA((99% 的已拉取好鏡像的 pod 啟動時間在 5s 内);
- 但在最差情況下(99 分位點),1.14 版本的 Pod 建立速度接近 5s,表現差于同名額下 K8s 1.16 的 3s。
說明 1.16 版本更适用于對 pod 建立速度有要求(如彈性業務)的場景。