(追記)
skaffold のCPU使用率が高くなるのに困って記事を書いたのですが、改めてソース等を調べてみたところskaffoldにバグがあると分かりました・・・ということでPRを作成して送ってみたところ無事にmergeされました。
skaffold 1.28.0 以降には修正が含まれているので、同じ問題で困っている方は更新してみると解消されるかもしれません。
この記事は不要になったのですが、オプションの説明も間違っているわけではないので記事自体は残しておきます。
対象としている問題
Mac上で skaffold を dev
モードで起動すると CPU 使用率が非常に高く(CPU使用率100%に)なる場合があります。
skaffold の issue を調べてみたところ High CPU usage on Mac OS X という関係しそうな issue がありました。このissueによると、ファイルが多数ある場合に変更検知の処理で重くなっているようです。またissueはcloseされているものの、重くなること自体は解消されていないようです。
ということで変更検知の対象となるファイル数を減らせれば良い・・・のですが、そうもいかない状況で少しでもCPU使用率を減らす方法を記載しています。ちなみにいずれの方法もデメリットがあるためCPU使用率とのトレードオフとなります。
対象イメージの制限
--watch-image
オプションに artifact 名を記載すると、変更検知の対象となるイメージ(artifact)を限定できます。
skaffold dev --watch-image=artifact1
複数のイメージが含まれる場合は、このオプションで対象を絞ることでCPU使用率をある程度抑えることができます。ただ当然ながら指定しなかったイメージは変更検知の対象外となるので利便性が低下します。
変更検知方法の変更
変更検知方法は --trigger
オプションで指定することができ、デフォルトでは notify
という方法が選択されています。それ以外に polling
と manual
があり、これらを利用することでCPU使用率を低減することができます。
polling
polling
を指定すると変更検知を定期実行で行うようになります。実行間隔は --watch-poll-interval
で指定可能で、デフォルトでは1000
ミリ秒となります。
skaffold dev --trigger=polling --watch-poll-interval=3000
CPU使用率は実行間隔を大きくするほど改善されるのですが、変更検知までの時間も長くなるので利便性が低下します。ちなみに私が試した環境ではデフォルトの1000
ミリ秒ではまったく改善せず 3000
ミリ秒でやっとCPU使用率が半分くらいになる感じです。
manual
manual
を指定すると文字通り自動での変更検知を行わなくなります。変更を検知させたい時はコンソールで Enter を入力して手動実行します。
skaffold dev --trigger=manual
CPU使用率は劇的に低下するのですが、手動で更新する必要があるため利便性も劇的に低下します。