kubeconform@文法の誤りテスト¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. kubeconformの仕組み¶
検出項目¶
Kubernetesリソースのスキーマ (カスタムリソースであればCRD) に基づいて、マニフェストの文法の誤りを検出する。
02. セットアップ¶
インストール¶
$ brew install kubeconform
カスタムリソースのスキーマの用意¶
▼ CRDのマニフェストのインストール¶
CRDのマニフェストをインストールする。
# リポジトリからCRDを取得する
$ wget https://github.com/hiroki-hasegawa/foo-repository/crds.yaml
あるいは、json
形式のスキーマを直接インストールしてもよい。
この場合、後述のスキーマの作成は不要になる。
▼ スキーマの作成¶
openapi2jsonschema
を使い、CRDのマニフェストから各カスタムリソースのスキーマをjson
形式で作成する。
# 各カスタムリソースのJSONスキーマのファイル形式を設定する
$ export FILENAME_FORMAT='{kind}-{version}'
# 各カスタムリソースのスキーマをjson形式で作成する
$ ./openapi2jsonschema.py crds.yaml
# ファイル形式は {kind}-{version} になっている
JSON schema written to foo-v1.json
JSON schema written to foo-v1alpha2.json
JSON schema written to foo-v1alpha3.json
JSON schema written to foo-v1beta1.json
オプション¶
標準入力¶
標準入力からマニフェストを渡す。
CI上でこれを実行する場合、リポジトリ内のマニフェストを渡しさえすれば良く、特にGitOpsでCI/CDを分離している場合は、必ずしもkube-apiserverと通信する必要はない。
$ helm template . -f foo-values.yaml -f foo-secrets.yaml \
| kubeconform -kubernetes-version <Kubernetesのバージョン> -
-kubernetes-version¶
▼ -kubernetes-versionとは¶
Kubernetesのバージョンを指定する。
マイナーバージョン (例:1.24.0
) まで指定する必要がある。
$ kubeconform \
-kubernetes-version <Kubernetesのバージョン> \
-strict \
-summary \
-output text \
manifest.yaml
▼ 現在のバージョンと次のバージョンを指定¶
現在と次のKubernetesバージョンを指定した処理を自動化すれば、アップグレードに備えられる。
継続的に検出できるように、CI上で自動化すると良い。
$ kubeconform \
-kubernetes-version <Kubernetesの現在のバージョン> \
-strict \
-summary \
-output text \
manifest.yaml
$ kubeconform \
-kubernetes-version <Kubernetesの次のバージョン> \
-strict \
-summary \
-output text \
manifest.yaml
-schema-location¶
▼ -schema-locationとは¶
json
形式のスキーマの場所を明示的に設定する。
Goテンプレートのように、マニフェスト内の値をスキーマのパスに出力できる。
$ kubeconform \
-schema-location default \
-schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{ .Group }}/{{ .ResourceKind }}_{{ .ResourceAPIVersion }}.json' \
manifest.yaml
Kubernetesリソースのスキーマは、default
エイリアス (https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/{{.NormalizedKubernetesVersion}}-standalone{{.StrictSuffix}}/{{.ResourceKind}}{{.KindSuffix}}.json
) にある。
kubeconform
コマンドは、-kubernetes-version
オプションで渡したKubernetesのバージョンを{{.NormalizedKubernetesVersion}}
に出力する。
CRDのスキーマは、https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json
にある。