kubeval を CI に組み込んで kubernetes の yaml をチェックする
はじめに
kubeval is これ
github.com
1 年くらい前に kubernetes の yaml の形式が正しいのか?を CI とかでチェックしたいな〜という気持ちになり色々なツールを調べはしたんですが、
その時はいまいちしっくりこなかった(記憶が曖昧)で導入を見送ったのですが下記の資料を見てイケるやんと思ったので導入した。
資料にもある通り kubectl apply --dry-run とかで似たようなことができるが、CI から cluster に接続とかするのがめんどくさかったというのもあり --dry-run も採用しておらず kustomize build が正常に終了するということだけを test していました。
しかもこの資料見る前日にまさに数字と文字列の違いで apply に失敗ということが実際に起きてたので入れとこってなった。
CI に組み込む
今回は kustomize build した結果を kubeval に送って validation をしてもらう
まずは Dockerfile
kustomize と kubeval が使える Dockerfile を用意する
FROM golang:1.12-alpine RUN apk add git gcc g++ libc-dev && \ wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.2.3/kustomize_kustomize.v3.2.3_linux_amd64 && \ chmod +x ./kustomize_kustomize.v3.2.3_linux_amd64 && \ mv kustomize_kustomize.v3.2.3_linux_amd64 /usr/local/bin/kustomize && \ wget https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-linux-amd64.tar.gz && \ tar xf kubeval-linux-amd64.tar.gz && \ cp kubeval /usr/local/bin
version とかはまぁいい感じに
drone.yaml
社では drone を使っているので drone.yaml を書いていく
--- clone: depth: 1 build: image: xxxxxxxxxx # 上記の Dockerfile を build した image を指定 auth_config: &auth_config username: xxxx password: xxxxxxx email: xxxxxx commands: - for env in `ls "overlays"` ; do # env 毎に kustomize build を行ってチェックしたい kustomize build "overlays/${env}" | kubeval; done
あとは branch を push した際に CI が走るように設定を行えば終わり.
最後
skip-kinds のオプションを使えば特定のリソースを除外することもできたりします。
そこらへんは docs に書いてあるので参考にすると良いかと