Kubernetes の Job で動かす特定の Image tag を使っている Deployment を再起動する君を作った
作りました。
仕組みとしては kubectl rollout restart
と全く同じものを使ってます。(kubectl のソースを普通に呼んでる)
なんでこんなの作ったの ?
今は Argo CD を使って GitOps でゴリゴリ Kubernetes 環境を整備しています。
日時でアプリケーションの最新の Image をデプロイしたいみたいなモチベーションがあって、 本来であれば GitOps なのでレジストリから最新の Image を拾ってきて YAML を書き換えて Git に Commit して PR を投げるみたいなフローをちゃんと踏みたいんですけど、それを Operator として実装するのも大変そうだなあと思いとりあえずの逃げとしてこんなのを作ってしまいました。
client-go を初めてまともにいじったついでに Kubernetes のソースもそこそこ読む機会になったので色々勉強になりました。
latest image 運用はやめよう!
今後について
とりあえずテスト書いてなかったりとか、 DemonSet とか StatefulSet とかも仕組みに組み込むのが可能なのにやってなかったりするので、 そこらへんからやりたいなって思ってます。
あとは patch の計算してないのでタイミングよっては不都合ありそうなので (よくわからない) Server side apply の実装とか入れたい。なお EKS が現段階の最新のバージョンでも v1.13 なので使えない模様。悲しい。