Closed8

HNCとAccurateのパフォーマンス比較

zoetrozoetro

Hierarchical Namespace Controller (HNC)は、スケールさせるために独自のインメモリキャッシュを持っている。

https://github.com/kubernetes-sigs/hierarchical-namespaces/blob/master/docs/user-guide/faq.md#how-does-hnc-scale

一方Accurateは、そういったキャッシュ機構は持っていない。

HNCにはベンチマークテストが用意されているので、これを利用して性能比較をしてみようと思う。

利用するバージョン

  • HNC: v0.9.0
  • Accurate: v0.1.0
zoetrozoetro

まずはHNCの性能計測。

事前にkubectl-hnsプラグインをインストールしておく。

kubectl krew install hns

また、config/manager/manager.yamlのimageを変更しておく。

image: gcr.io/k8s-staging-multitenancy/hnc-manager:v0.9.0

kindを立ち上げ、READMEの手順通りにテストを実行してみる。

しかし、デフォルトのままだといつまで経っても終わらない…。

zoetrozoetro

Nを減らして実行してみる。

topology-wide(N=200)

************Starting up the controllers on topology 1************
HNC startup time : 2021-10-23T03:37:04
Current time : 2021-10-23T03:37:35
Controllers start working time : 2021-10-23T03:37:08
Controllers finish working time : 2021-10-23T03:37:34
Controllers working time for HNC startup: 26s
Total HierConfig reconciles: 420
Total Object reconciles: 1852
Total HierConfig writes: 32
Total Namespace writes: 216
Total Object writes: 400
************Restarting the controllers on topology 1************
HNC startup time : 2021-10-23T03:37:35
Current time : 2021-10-23T03:38:08
Controllers start working time : 2021-10-23T03:37:38
Controllers finish working time : 2021-10-23T03:38:07
Controllers working time for HNC startup: 29s
Total HierConfig reconciles: 361
Total Object reconciles: 2259
Total HierConfig writes: 158
Total Namespace writes: 156
Total Object writes: 14

topology-full(N=10)

************Starting up the controllers on topology 2************
HNC startup time : 2021-10-23T03:41:44
Current time : 2021-10-23T03:42:18
Controllers start working time : 2021-10-23T03:41:48
Controllers finish working time : 2021-10-23T03:42:18
Controllers working time for HNC startup: 30s
Total HierConfig reconciles: 366
Total Object reconciles: 2029
Total HierConfig writes: 251
Total Namespace writes: 250
Total Object writes: 420
************Restarting the controllers on topology 2************
HNC startup time : 2021-10-23T03:42:18
Current time : 2021-10-23T03:42:49
Controllers start working time : 2021-10-23T03:42:22
Controllers finish working time : 2021-10-23T03:42:49
Controllers working time for HNC startup: 27s
Total HierConfig reconciles: 345
Total Object reconciles: 2115
Total HierConfig writes: 232
Total Namespace writes: 226
Total Object writes: 2

最後のtopology-skewer(N=50)が終わらない。
ログを見ると、CurObjReconcilesが1のままなので終了条件に入らないみたいだ。

{"level":"info","ts":1634961115.4359264,"logger":"reconcileCounter","msg":"Activity","Action":1,"Status":"continue","HierConfigWrites":137,"NamespaceWrites":136,"ObjectWrites":2450,"TotalHierConfigReconciles":189,"CurHierConfigReconciles":0,"TotalObjReconciles":5758,"CurObjReconciles":1,"ObjectOverwrites":5455}
zoetrozoetro

うまく終了条件に引っかからないことがあるんだけど、kubectl logs deployment/hogeってやったときにPodが複数あると、1個目のPodのログしかでない?

zoetrozoetro

Accurateの実行結果

topology-wide(N=200)

************Starting up the controllers on topology 1************
Accurate startup time : 2021-10-23T06:43:05
Current time : 2021-10-23T06:43:47
Controllers start working time : 2021-10-23T06:43:24
Controllers finish working time : 2021-10-23T06:43:46
Controllers working time for Accurate startup: 22s
Total reconciles: 1169
************Restarting the controllers on topology 1************
Accurate startup time : 2021-10-23T06:43:47
Current time : 2021-10-23T06:44:06
Controllers start working time : 2021-10-23T06:44:04
Controllers finish working time : 2021-10-23T06:44:05
Controllers working time for Accurate startup: 1s
Total reconciles: 600

topology-full(N=10)

************Starting up the controllers on topology 2************
Accurate startup time : 2021-10-23T06:44:46
Current time : 2021-10-23T06:45:19
Controllers start working time : 2021-10-23T06:45:03
Controllers finish working time : 2021-10-23T06:45:19
Controllers working time for Accurate startup: 16s
Total reconciles: 1330
************Restarting the controllers on topology 2************
Accurate startup time : 2021-10-23T06:45:19
Current time : 2021-10-23T06:45:38
Controllers start working time : 2021-10-23T06:45:37
Controllers finish working time : 2021-10-23T06:45:37
Controllers working time for Accurate startup: 0s
Total reconciles: 820

topology-skewer(N=50)

************Starting up the controllers on topology 3************
Accurate startup time : 2021-10-23T06:45:58
Current time : 2021-10-23T06:48:04
Controllers start working time : 2021-10-23T06:46:15
Controllers finish working time : 2021-10-23T06:48:03
Controllers working time for Accurate startup: 108s
Total reconciles: 3419
************Restarting the controllers on topology 3************
Accurate startup time : 2021-10-23T06:48:05
Current time : 2021-10-23T06:48:25
Controllers start working time : 2021-10-23T06:48:23
Controllers finish working time : 2021-10-23T06:48:24
Controllers working time for Accurate startup: 1s
Total reconciles: 3270
zoetrozoetro

HNCのPerformanceテストは、HNCのボトルネックであるコントローラの起動・再起動時の時間を計るためのもの。
じゃあ、通常のリソースの伝搬速度はどうなのか。

N=20のfull topology (421namespaces) の構成にして、Role/RoleBindingをrootから全namespaceに伝搬させる時間を計ってみる。

HNC: 約24秒
Accurate: 約45秒

確かにHNCの方が速いけど、Accurateも実用上問題になるほどの遅さではないと思う。

またAPI Serverへのリクエスト数制限は、HNCが50qps, Accurateが10qpsなので、その設定を変えれば差は縮まるかもしれない。

zoetrozoetro

AccurateのAPI Serverへのリクエスト制限を50qpsに変更して実行したところ、9秒で伝搬が完了した。
qpsが5倍なので、処理時間は1/5になったということ。

このスクラップは2021/10/23にクローズされました