一部の属性の値が一部のファイルまたは URI のコンテンツ全体から取得される Kustomize マニフェストが必要です。
これどうやってするの?
通常、kustomizeで使用するのは、ベース ファイルにマージされたオーバーレイとパッチ(1 つまたは複数のファイル) です。パッチは属性をオーバーライドします。これら 2 つの機能を使用して、可能性のあるいくつかのマニフェスト構成を事前に定義し、クラスターに適用する直前にそれらを組み合わせるだけです。
次のようなパッチまたは kustomize サブコマンドを使用して、いくつかの特定の属性を追加または編集/設定できます。
kustomize edit set image your-registry.com:$image_tag
# just to identify version in metadata sections for service/deployment/pods - not just via image tag
kustomize edit add annotation appVersion:$image_tag
kustomize build . | kubectl -n ${your_ns} apply -f -
しかし、単一のマニフェスト ファイルを持ち、同じ属性を何度も (その場で) 操作したい場合は、helm のテンプレート メカニズムの使用を検討する必要があります。これは、変更したい単一の特定の属性を kustomize で編集できない場合のオプションでもあります。
必要なのは、values.yamlファイル (キーと値のペアを含む) とtemplate.yamlファイルだけです。values.yamlでいくつかの属性を事前に設定できます。必要に応じて、CLI ごとに上書きできます。このツールは、これらの値が組み込まれた k8s マニフェストを生成します。
テンプレート ファイル:
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ .Values.appSettings.appName }}
namespace: {{ .Values.appSettings.namespace }}
labels:
name: {{ .Values.appSettings.appName }}
spec:
replicas: 1
template:
metadata:
labels:
name: {{ .Values.appSettings.appName }}
spec:
containers:
- name: {{ .Values.appSettings.appName }}
image: "{{ .Values.appSettings.image }}"
ports:
- containerPort: 8080
[...]
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.appSettings.appName }}-svc
namespace: {{ .Values.appSettings.namespace }}
labels:
name: {{ .Values.appSettings.appName }}
spec:
ports:
- port: 8080
targetPort: 8080
selector:
name: {{ .Values.appSettings.appName }}
値ファイル:
appSettings:
appName: your-fancy-app
appDomain: please_override_via_cli
namespace: please_override_via_cli
CLI:
helm template
--set appSettings.image=your-registry.com/service:$(cat versionTag.txt)
--set appSettings.namespace=your-ns
--set appSettings.appDomain=your-domain.com
./ -f ./values.yaml | kubectl apply -f -
リモートの kustomization.yml ファイルを含めることはできますが、単一の値を含めることはできません。必要に応じて独自のトランスフォーマー プラグインを作成することもできますが、それは Kustomize の精神に沿ったものではありません。