コンテンツにスキップ

Kustomize@マニフェスト管理

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. basesディレクトリ

kustomize.yamlファイル

kustomize.yamlファイルとは

baseディレクトリ配下にあるファイルの処理方法を設定する。

kubectlコマンドで-kオプションを有効化すると、kustomize.yamlファイルを使用できる。

kustomize.yamlファイルのあるディレクトリを指定する。

▼ resources

使用するリソース定義ファイルを設定する。

*実装例*

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ./applications/deployment.yaml

*実装例*

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - application-crd.yaml
  - appproject-crd.yaml
  - applicationset-crd.yaml


resourcesディレクトリ

リソース定義ファイル

後のoverlaysディレクトリの元になるリソース定義を設定する。

*実装例*

元になるリソース定義を設定する。

ここでは、Deploymentを設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: foo-pod
  template:
    metadata:
      labels:
        app.kubernetes.io/name: foo-pod
    spec:
      containers:
        - name: app
          image: app:1.0.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: app
              mountPath: /go/src


02. overlaysディレクトリ

kustomize.yamlファイル

kustomize.yamlファイルとは

overlaysディレクトリ配下にあるファイルの処理方法を設定する。

▼ resources

使用するリソース定義ファイルを設定する。

*実装例*

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../base
patches:
  - ./patches/deployment.replicas.yaml
  - ./patches/deployment.cpu_count.yaml


patchesディレクトリ

差分リソース定義ファイル

baseディレクトリ配下のリソース定義ファイルとの差分の実装を設定する。

*実装例*

ここでは、Deploymentの差分を設定する。

.spec.replicasキー以下はbaseディレクトリ配下のリソース定義ファイルで宣言されていないため、追加処理が実行される。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-deployment
spec:
  replicas: 3

ここでは、Deploymentの差分を設定する。

.spec.template.spec.containers[*].resourcesキー以下はbaseディレクトリ配下のリソース定義ファイルで宣言されていないため、追加処理が実行される。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-deployment
spec:
  template:
    spec:
      containers:
        - name: app
          resources:
            limits:
              cpu: 7000m


03. プラグイン

プラグインとは

Kustomizeのプラグインには、GeneratorとTransformerの種類がある。

Generator (例:SecretGenerator、ConfigMapGenerator) のプラグインは、マニフェストを作成する。

一歩でTransformerは、マニフェストを部分的に書き換える。


設定

▼ 環境変数

プラグインをおくディレクトリを環境変数で定義する必要がある。

$ export XDG_CONFIG_HOME=$HOME/.config
$ export KUSTOMIZE_PLUGIN_HOME=$XDG_CONFIG_HOME/kustomize/plugin

▼ ディレクトリ

環境変数の値に応じて、ディレクトリは変わる。

デフォルトでは、$XDG_CONFIG_HOME/kustomize/pluginディレクトリ配下にプラグインをおく必要がある。

$ ls $XDG_CONFIG_HOME/kustomize/plugin

viaduct.ai/v1/ksops/ksops


KSOPS

▼ KSOPSとは

SOPSを使用して、復号化したデータをSecretにデータを注入する。

SOPSで使用できる暗号化キー (例:AWS KMS、Google Cloud CKM、GPG、PGPなど) をKSOPSでも使用できる。

▼ セットアップ

シェルスクリプトを使用して、KSOPSに関するバイナリーをインストールする。

SOPSは内蔵されており、不要である。

$ curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash


Helmとの比較

なお、どのような要件でもHelmを推奨する。

Kustomizeは、変数や条件分岐の柔軟性が低いため、マニフェストが増えるにつれて共通化が大変になる。

一方で、Helmは柔軟性が高く、共通化しやすい。