skaffoldというKubernetesでbuild〜push〜deployを一気通貫にやってくれるツールがあります。 GitHub Workflowでskaffoldを叩いてdeployする運用をやっているのですが、これが最近とても遅く(1時間とかかかってた…)改善するべく2つのことをやったのでメモ。
BuildKitを有効化する
これを有効化するとリモートキャッシュが有効化されてビルド時間が短くなりました。例えば、staging環境でbuild〜deployしたものをそのままproduction環境でdeployする、といった場合はリモートキャッシュのデータをそのまま使ったりしてbuild自体スキップしたりします。
skaffold.yamlに以下の設定を入れるだけです。
artifacts: - image: containers.repo.com/example/package context: ../ + local: + useBuildkit: true
↓のようなログが出てくれば、リモートキャッシュが使われている証拠。
- containers.repo.com/example/package: Found Remotely
deploy完了後のステータスチェックをやめる
skaffold run
コマンドでbuild〜push〜deployまで一気通貫にできるのですが、デフォルトだとdeployした後Podがすべてupdateされるまで待ち、ステータスチェックをします。
この場合、たとえば100Pod立っていてローリングアップデートを少しずつ(5%とか…)するような運用にしている場合、延々と完了を待つことになります。
これがむちゃくちゃに時間がかかっていたのでやめました。
skaffold run -f ./skaffold.yaml -p $SKAFFOLD_ENV --status-check=false
↑このstatus-check=false
の部分
これでCIで延々とdeploy終わらん〜〜という状況は無くなりました。(1時間→5分くらいになった)
CI完了=ローリングアップデート完了 ではなくなる点は留意が必要。でもやってよかったです。