Kekeの日記

エンジニア、読書なんでも

HelmからKustomizeに乗り換える!軽量で、シンプルで、使いやすい!

kustomizeを使ってみる

kustomizeとは

YAMLファイルを再利用可能で設定変更のしやすい宣言的管理をします。

インストール方法

以下のようにインストールできます。

brew install kustomize

kustomizationファイルとresourceファイル

前提としてデプロイに必要なものが全て入ったものをtargetといいます。 また、一つのまとまりとしてApplcacitonを呼びます。

KustomizeではApplicationをtargetとしてOverlayしてVariantとしてApplicationを作成できます。

まずはkustomizationファイルである'kustomization.yaml`を作成します。

ここで一つ説明を入れるとkustomizeではkustomizationファイルとリソースが基本のセットです。

https://github.com/kubernetes-sigs/kustomize/raw/v1.0.3/docs/base.jpg

また、同じディレクトリにdeployment.yamlservice.yamlingress.yamlも作成します。これらはKubernetesAPIのオブジェクトでありリソースファイルと呼ばれます。

なので以下のようなディレクトリ構造ができあがるはずです。

~/someApp
├── deployment.yaml
├── kustomization.yaml
└── service.yaml

以下の様にしてビルドすることができます。

kustomize build ~/someApp

直接デプロイすることもできます。

kustomize build ~/someApp | kubectl apply -f -

Helmとの対応関係を書くと以下の通りでしょう。

helm kustomize
chart target
value.yaml kustomization.yaml
templates/ resourceファイル

Helmが現在は主流なので一回試すといいかもしれません。

helm.sh

ここでkustomization.yamlには以下の項目を追加しておきます。

# List of resources to manage by kustomize
resources:
- deployment.yaml
- configMap.yaml
- service.yaml

またいくつかAPIが用意されています。

object 説明
namespace すべてのresouces[]に`namespaceを適用する
namePrefix すべてのresouces[].nameにPrefixを追加する。
commonLabels すべてのresouces[]にlabelを付与する
commonAnnotations すべてのresouces[]にannotationを付与する
resources このbase(target)に含まれるresouces一覧
configMapGenerator マニフェストファイルなしでConfigMapを作る
secretGenerator マニフェストファイルなしでSecretを作る
bases Overlayするbase(target)を指定
patches Overlayをするpatchファイルを指定
patchesJson6902 Overlayをするpatchファイルをjsonで渡す
crds CustomResourceDefinitionを作成。
vars env`として渡せる。DownwardAPIも同様に使える
imageTags patchを作成せずにimageTagを編集する

例えばresourcesにつけられる共通したlabelannotationを記述できたりします。

commonLabels:
  variant: staging
  org: acmeCorporation
commonAnnotations:
  note: Hello, I am staging!

OverlayとVariant

https://github.com/kubernetes-sigs/kustomize/raw/master/docs/overlay.jpg

一つのBase(kustomization.yaml + resouce(s) fileを元に、Overlay(=設定を覆いかぶせる)でVariant(=baseの変形系)を出力することができます。

また、以下の様なディレクトリ構成になっています。

~/someApp
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── development
    │   ├── cpu_count.yaml
    │   ├── kustomization.yaml
    │   └── replica_count.yaml
    └── production
        ├── cpu_count.yaml
        ├── kustomization.yaml
        └── replica_count.yaml

ここでOverlaykustomization.yamlには元となるファイルを

  • bases[]

で配列を指定します。そして

  • patches[]

patch.yamlを指定します。

ここではproductionVariantを生成します。

kustomize build ~/someApp/overlays/production

たとえばVariantには

  • staging
  • production
  • dev

などいくつも作られます。

Overlayでは特定のtargetを上書きするtargetです。

所感

Helmよりも軽量であるイメージで、これが標準のCLIとして組み込まれるために開発中とのことで、非常に先が明るく、マスターしておくことは重要だと思いました。

ディレクトリもk8s/以下にbaseoverlayをつけていると使いやすいかもしれない。