目的
walnuts.devのk8sクラスタは、FluxCDを使って管理されています。
多くのアプリケーションはFluxCD特有のHelm用設定ファイルやdeployment.yamlなどのManifestをコミットすることで本番環境に自動適用される、という運用になっています。
しかし、Helmに対応しておらず、kubectl apply -f https://github.com/<org>/<repo>/releases/download/<version>/<hoge>.yaml
を実行してインストールしなさい、的なアプリケーションも意外とあります。(flannel、kubevirtなど)
そこで今回は、そのようなアプリケーションにおいて、手動による操作を省きFluxCDの管理下に置く、さらにRenovateで更新まで自動化することを目標にします。
Kustomize
FluxCDではkind: Kustomization
のManifestを置くことで、kustomize build
をflux上で行うことができます。
Kustomizeでは、resources
に適用するファイルの相対パスを書いていきますが、ここに直接URLを書くことができます。
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/flannel-io/flannel/releases/download/v0.24.2/kube-flannel.yml
こうすることで、リモートのファイルをわざわざwget
して、コミットして...といった手間が生じなくなります。楽~
Renovate
このままでは一生更新されないので、Renovateを用いて先ほどのresources内のタグを自動更新します。Renovateというとnpmなどパッケージマネージャーの依存関係を更新する、というイメージがありますが、調べてみるといろいろなDataSourceを用いることができることがわかります。
この中にgithub-tags
というものがありました。今回の用途にマッチしそうですね。
customManagers
customManagersのcustomType: "regex"
を用いることで、自前で対象ファイルをパースし、パッケージ名(今回は<user|org>/
{ ... customManagers: [ { customType: "regex", fileMatch: "^k8s/apps/.*/kustomization.yaml$", matchStringsStrategy: "any", matchStrings: [ "https:\\/\\/github\\.com\\/(?<depName>.*?)\\/releases\\/download\\/(?<currentValue>\\S+)\\/.*\\s*", ], datasourceTemplate: "github-tags", }, ], ... }
この設定を入れると、リポジトリ内の、/k8s/apps/<hoge>/kustomization.yaml
ファイルにおいてhttps://github.com/<depName>/releases/download/<currentValue>/<hoge>
という文字列を探し出し、github-tags
という名前のdatasourceTemplateにおけるdepName
・currentValue
に対応付けてくれます。
このrenovate設定をリポジトリに入れることで、自動的にPullRequestを作ってくれます。便利ですね~~~~
https://github.com/walnuts1018/infra/pull/96
packageRules
packageRulesを定義することで、特定の条件下での振る舞いを変えることができます。 これを用いることでパッチバージョンについてはAutoMergeを有効化する、といった設定が行えます。
{ ... packageRules: [ { matchUpdateTypes: ["patch"], matchDatasources: ["github-tags"], automerge: true, }, ], ... }
この辺りはご自宅のテスト環境とお好み次第、といった感じですね~
renovate.jsonの完全版はこちら
最後に
flannelとkubevirtくらいしか影響がないので正直そこまで困っていなかったですが、世界がちょっとだけ平和になった気がします。
HelmReleaseの自動更新はid:nonyleneさんの Renovate で Flux 配下の Helm Chart をアップデートする - Unyablog. が大変役に立ったのでみなさんも是非。