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 チャートを自動的にレンダリングするには、環境が次の要件を満たしていることを確認してください。

  • Anthos Config Management のバージョンが 1.9.0 以降。必要に応じて、Anthos Config Management をアップグレードします。
  • マルチリポジトリ モードが有効。Google Cloud Console または gcloud コマンドライン ツールを使用して Config Sync をインストールした場合、1.7.0 以降のバージョンでは、マルチリポジトリ モードはデフォルトで有効になります。
  • レンダリング プロセスをトリガーするには、Git リポジトリは、Git ディレクトリのルートに Kustomization 構成ファイル(kustomization.yamlkustomization.ymlKustomization のいずれか)が必要です。ルート ディレクトリに Kustomization 構成ファイルがない場合、Config Sync はレンダリングなしで構成ファイルをそのまま同期します。
  • kustomization.yaml に構成ファイルを含めます。これらの構成ファイルを含めないと、クラスタに同期されません。

Kustomize 構成のリポジトリ アーキテクチャの例

次のサンプル リポジトリは、自動レンダリングで Kustomize 構成を使用するようにリポジトリを設定する方法を示しています。このリポジトリには、同じベースを参照する 3 つのオーバーレイ(team-ateam-bteam-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.yamlteam-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.yamlbase ディレクトリにあり、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 mergeoverride(default) または replace を指定します。ValuesMerge では、値に関する ValuesInline の処理方法が指定されます。
helmCharts.includeCRDs true または false を指定します。Helm が CustomResourceDefinitions も生成するかどうかを指定します。デフォルト値は false です。

Helm チャートの例

次のセクションの例では、Helm チャートを活用するいくつかの異なる方法を示しています。

リモート Helm チャートをレンダリングする

Config Sync では、公共のインターネット アクセスがあるクラスタ上のリモート Helm チャートのレンダリングがサポートされます。

次のように、kustomization.yaml では、helmCharts フィールドを設定して、リモートの cert-manager がレンダリングされます。

# ./kustomizaiton.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 を指定する必要はありません。

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

複数の Helm チャートをレンダリングする

Config Sync では、チャートがリモートかローカルかに関係なく、1 つの kustomiztion.yaml ファイルで複数の Helm チャートのレンダリングがサポートされます。

次の kustomization.yaml では、ローカル Helm チャート(cert-manager)がレンダリングされます。

# ./kustomizaiton.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
...

形式例:

次の例をご覧ください。

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

次のステップ