HNCとAccurateのパフォーマンス比較
Hierarchical Namespace Controller (HNC)は、スケールさせるために独自のインメモリキャッシュを持っている。
一方Accurateは、そういったキャッシュ機構は持っていない。
HNCにはベンチマークテストが用意されているので、これを利用して性能比較をしてみようと思う。
利用するバージョン
- HNC: v0.9.0
- Accurate: v0.1.0
まずは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の手順通りにテストを実行してみる。
しかし、デフォルトのままだといつまで経っても終わらない…。
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}
うまく終了条件に引っかからないことがあるんだけど、kubectl logs deployment/hoge
ってやったときにPodが複数あると、1個目のPodのログしかでない?
HNCと同じパフォーマンステストを流せるように、Accurateに雑に手を加えてみた。
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
HNCのPerformanceテストは、HNCのボトルネックであるコントローラの起動・再起動時の時間を計るためのもの。
じゃあ、通常のリソースの伝搬速度はどうなのか。
N=20のfull topology (421namespaces) の構成にして、Role/RoleBindingをrootから全namespaceに伝搬させる時間を計ってみる。
HNC: 約24秒
Accurate: 約45秒
確かにHNCの方が速いけど、Accurateも実用上問題になるほどの遅さではないと思う。
またAPI Serverへのリクエスト数制限は、HNCが50qps, Accurateが10qpsなので、その設定を変えれば差は縮まるかもしれない。
AccurateのAPI Serverへのリクエスト制限を50qpsに変更して実行したところ、9秒で伝搬が完了した。
qpsが5倍なので、処理時間は1/5になったということ。