Kustomize 構成と Helm チャートが配置されたリポジトリを使用する
Config Sync を使用すると、Git リポジトリに配置した Kustomize 構成と Helm チャートが自動的にレンダリングされます。自動レンダリングには、次の利点があります。
外部ハイドレーション パイプラインが不要になります。自動レンダリングを使用しない場合は、ワークステーションで Kustomize と Helm を使用して構成を手動でレンダリングするか、CI システムでハイドレーション プロセスをトリガーするステップを設定する必要があります。自動レンダリングでは、Config Sync がこの実行を処理します。
メンテナンス費用が削減されます。自動レンダリングを使用しない場合は、元の Kustomize 構成と Helm チャートを格納した Git リポジトリと、外部ハイドレーションによって生成された出力を格納した Git リポジトリを各一つ維持する必要があります。次に、レンダリングされた出力を格納した Git リポジトリから同期するように Config Sync を構成する必要があります。自動レンダリングを使用する場合は、元の構成ファイルを含むリポジトリを一つ維持するだけで済みます。
開発ワークフローが簡易化されます。自動レンダリングを使用しない場合、元の構成ファイルに変更を加えると、マージする前に 2 回確認する必要があります。1 回目は元のリポジトリで、2 回目はレンダリングされたリポジトリで確認が必要です。自動レンダリングを使用する場合は、レンダリングされた構成ファイルは Config Sync によって生成されるため、元の構成ファイルに加えられた変更を確認するだけで済みます。
要件
Kustomize 構成と Helm チャートを自動的にレンダリングするには、環境が次の要件を満たしていることを確認してください。
- 非構造化リポジトリを使用します。階層リポジトリでは、自動レンダリングはサポートされていません。
RootSync
API とRepoSync
API を有効にする必要があります。kubectl
を使用して手動で Config Sync をインストールし、RootSync
API とRepoSync
API を有効にしていない場合は、ConfigManagement オブジェクトを移行する必要があります。- レンダリング プロセスをトリガーするには、Git リポジトリは、Git ディレクトリのルートに Kustomization 構成ファイル(
kustomization.yaml
、kustomization.yml
、Kustomization
のいずれか)が必要です。ルート ディレクトリに Kustomization 構成ファイルがない場合、Config Sync はレンダリングなしで構成ファイルをそのまま同期します。 - Anthos Config Management バージョン 1.12.0 以降では、
spec.override.enableShellInRendering
をtrue
に設定して、レンダリング プロセスで Config Sync が一般公開リポジトリからリモートベースを pull できるようにする必要があります。 kustomization.yaml
に構成ファイルを含めます。これらの構成ファイルを含めないと、クラスタに同期されません。
バンドルされている Helm と Kustomize のバージョン
Config Sync は、実行可能ファイル Helm と Kustomize を利用して、内部で構成をレンダリングします。次の表に、レンダリング機能をサポートする Config Sync のバージョンと、バンドルされている Helm と Kustomize のバージョンを示します。
Config Sync のバージョン | Helm のバージョン | Kustomize のバージョン |
---|---|---|
1.11.0 以降 | v3.6.3 | v4.5.2 |
1.9.0~1.10.2 | v3.6.3 | v4.3.0 |
Kustomize 構成のリポジトリ アーキテクチャの例
次のサンプル リポジトリは、自動レンダリングで Kustomize 構成を使用するようにリポジトリを設定する方法を示しています。このリポジトリには、同じベースを参照する 3 つのオーバーレイ(team-a
、team-b
、team-c
)が含まれています。
次の図にディレクトリ構造を示します。
├── base
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ ├── networkpolicy.yaml
│ ├── rolebinding.yaml
│ └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│ └── kustomization.yaml
├── team-b
│ └── kustomization.yaml
└── team-c
└── kustomization.yaml
次の kustomization.yaml
ファイルは、リポジトリのルートにあり、参照する 3 つのオーバーレイが含まれています。
# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c
次の kustomize.yaml
は team-a
ディレクトリにあり、team-a
のオーバーレイです。
# ./team-a/kustomization.yaml
namespace: team-a
resources:
- ../base
patches:
- target:
kind: RoleBinding
name: team-admin-rolebinding
patch: |-
- op: replace
path: /subjects/0/name
value: team-a-admin@mydomain.com
- target:
kind: Namespace
name: default
patch: |-
- op: replace
path: /metadata/name
value: team-a
次の kustomization.yaml
は base
ディレクトリにあり、Kustomize ベースです。
# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml
このリポジトリは、Anthos Config Management サンプル リポジトリの名前空間の固有のポリシーの構成ディレクトリで確認できます。
Helm チャートを自動的にレンダリングする
kustomization.yaml
ファイルで helmGlobals
フィールドと helmCharts
フィールドを使用すると、Helm チャートを自動的にレンダリングできます。
Helm チャートのフィールド
Config Sync では、kustomization.yaml
ファイルへの次のフィールドの追加がサポートされます。
フィールド | 説明 |
---|---|
helmGlobals |
すべての Helm チャートに適用されるパラメータ |
helmGlobals.chartHome
|
文字列で記述します。Kustomization のルートに相対的で、Kustomization に含める各チャートのサブディレクトリを含んだディレクトリへのファイルパス。このフィールドのデフォルト値は charts です。 |
helmGlobals.configHome
|
文字列で記述します。Kustomize が HELM_CONFIG_HOME 環境変数で Helm に渡す値を定義します。Kustomize では、このディレクトリの読み取りや書き込みは試行されません。省略した場合は TMP_DIR/helm が使用されます。ここで、TMP_DIR は Kustomize for Helm によって作成される一時ディレクトリです。 |
helmCharts
|
Helm チャート パラメータの配列 |
helmCharts.name
|
文字列で記述します。チャートの名前。この欄は必須です。 |
helmCharts.version
|
文字列で記述します。チャートのバージョン |
helmCharts.repo
|
文字列で記述します。チャートの検索に使用される URL |
helmCharts.releaseName
|
文字列で記述します。チャート テンプレート出力の RELEASE_NAME を置き換えます。 |
helmCharts.namespace
|
文字列で記述します。リリースのターゲット名前空間を設定します(テンプレート内の Release.Namespace) |
helmCharts.valuesInline
|
チャートに付随するデフォルト値の代わりに使用する値 |
helmCharts.valuesFile
|
文字列で記述します。ValuesFile は、チャートに付随するデフォルト値の代わりに使用する、値ファイルへのローカル ファイル パスまたはリモート URL です。デフォルト値は CHART_HOME/NAME/values.yaml にあります。 |
helmCharts.valuesMerge
|
merge 、override 、(default) または replace を指定します。ValuesMerge では、値に関する ValuesInline の処理方法が指定されます。 |
helmCharts.includeCRDs
|
true または false を指定します。Helm が CustomResourceDefinitions も生成するかどうかを指定します。デフォルト値は false です。 |
Helm チャートの例
次のセクションの例では、Helm チャートを活用するいくつかの異なる方法を示しています。
リモート Helm チャートをレンダリングする
Config Sync では、公共のインターネット アクセスがあるクラスタ上のリモート Helm チャートのレンダリングがサポートされます。
次の kustomization.yaml
では、次の helmCharts
フィールドを設定して、リモートの cert-manager がレンダリングされます。
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
repo: https://charts.jetstack.io
version: v1.5.3
releaseName: my-cert-manager
namespace: cert-manager
...
ローカル Helm チャートをレンダリングする
Config Sync では、ローカル Helm チャートのレンダリングがサポートされます。カスタマイズされたバージョンの Helm チャートを使用するには、リリースされたバージョンを Helm チャート リポジトリ(ArtifactHub など)から pull して、ローカルで変更を行い、その変更をリポジトリに push できます。
次の kustomization.yaml
では、ローカルの cert-manager
チャートがレンダリングされます。Helm チャート用のデフォルトのディレクトリは charts
です。このチャートは charts
ディレクトリにチェックインされているため、.helmCharts.repo
や .helmCharts.version
を指定する必要はありません。
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
...
複数の Helm チャートをレンダリングする
Config Sync では、チャートがリモートかローカルかに関係なく、1 つの kustomization.yaml
ファイルで複数の Helm チャートのレンダリングがサポートされます。
次の kustomization.yaml
では、ローカル Helm チャート(cert-manager
)がレンダリングされます。
# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
releaseName: my-cert-manager
namespace: cert-manager
- name: prometheus
repo: https://prometheus-community.github.io/helm-charts
version: 14.3.0
releaseName: my-prometheus
namespace: monitoring
...
サポートされるフィールド
次の例に、kustomization.yaml
ファイルでサポートされているフィールドを示します。
helmGlobals:
chartHome: string
configHome: string
helmCharts:
- name: string
version: string
repo: string
releaseName: string
namespace: string
valuesInline: map[string]interface{}
valuesFile: string
valuesMerge: string
includeCRDs: bool
次のステップ
- Kustomize と Helm で Config Sync を使用する方法を示すチュートリアルをご覧ください。