このチュートリアルでは、Helm チャートを参照する Kustomize の構成をリポジトリに追加し、Config Sync を使用してクラスタをリポジトリと同期します。
Config Sync を使用すると、Git リポジトリに配置した Kustomize 構成と Helm チャートが自動的にレンダリングされます。自動レンダリングには、次の利点があります。
外部ハイドレーション パイプラインが不要になります。自動レンダリングを使用しない場合は、ワークステーションで Kustomize と Helm を使用して構成を手動でレンダリングするか、CI システムでハイドレーション プロセスをトリガーするステップを設定する必要があります。自動レンダリングでは、Config Sync がこの実行を処理します。
メンテナンス費用が削減されます。自動レンダリングを使用しない場合は、元の Kustomize 構成と Helm チャートを格納した Git リポジトリと、外部ハイドレーションによって生成された出力を格納した Git リポジトリを各一つ維持する必要があります。次に、レンダリングされた出力を格納した Git リポジトリから同期するように Config Sync を構成する必要があります。自動レンダリングを使用する場合は、元の構成ファイルを含むリポジトリを一つ維持するだけで済みます。
開発ワークフローが簡易化されます。自動レンダリングを使用しない場合、元の構成ファイルに変更を加えると、マージする前に 2 回確認する必要があります。1 回目は元のリポジトリで、2 回目はレンダリングされたリポジトリで確認が必要です。自動レンダリングを使用する場合は、レンダリングされた構成ファイルは Config Sync によって生成されるため、元の構成ファイルに加えられた変更を確認するだけで済みます。
リポジトリを構成する
次のタスクでは、Kustomize 構成と Helm チャートを組み合わせた構成ファイルを使用して、Git リポジトリを準備する方法を示します。
Git リポジトリを作成するか、Git リポジトリにアクセスできることを確認します。リポジトリでは Kustomize と Helm を使用しているため、これは非構造化リポジトリである必要があります。
Git リポジトリのルートで、
kustomization.yaml
という名前のファイルを作成して次のコードを貼り付けます。# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deployment
このファイルは Kustomize ベースを指す Kustomize オーバーレイです。このオーバーレイには、すべての Deployment オブジェクトに
client.lifecycle.config.k8s.io/mutation: ignore
アノテーションを追加する、Helm チャートのベースに対するパッチが含まれています。アノテーションが作成されると、Config Sync はクラスタ内のオブジェクトに対して競合する変更を無視するようになります。Git リポジトリに
base
という名前のディレクトリを作成します。mkdir base
base
ディレクトリにkustomization.yaml
という名前の別のファイルを作成して次のコードを貼り付けます。# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-manager
このファイルは Kustomize ベースで、リモート Helm チャートをレンダリングします。
Git リポジトリのルートに戻り、
ignore-deployment-mutation-patch.yaml
という名前のファイルを作成して次のコードを貼り付けます。# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignore
このファイルは、ベースの Helm チャートに適用されるパッチです。
client.lifecycle.config.k8s.io/mutation: ignore
アノテーションがベース ディレクトリ内のすべての Deployment に追加されます。変更をリポジトリに commit します。
git add . git commit -m 'Set up manifests.' git push
サンプル リポジトリには、このようなリポジトリのサンプルがあります。
レンダリングされた構成ファイルをプレビューして検証する
Config Sync が構成ファイルをレンダリングしてクラスタに同期する前に、構成ファイルが正確であることを確認します。それには、nomos hydrate
を実行してレンダリングされた構成ファイルをプレビューし、nomos vet
を実行して形式が正しいことを検証します。
次のフラグを使用して、次の
nomos hydrate
を実行します。nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORY
コマンドの内容:
--source-format=unstructured
を使用すると、nomos hydrate
は非構造化リポジトリで機能できます。Kustomize の構成と Helm チャートを使用しているため、非構造化リポジトリを使用してこのフラグを追加する必要があります。--output=OUTPUT_DIRECTORY
を使用すると、レンダリングされた構成ファイルのパスを定義できます。OUTPUT_DIRECTORY
は、出力を保存する場所に置き換えます。
次のフラグを指定して
nomos vet
を実行し、構成ファイルの構文と有効性を確認します。nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORY
コマンドの内容:
--source-format=unstructured
を使用すると、nomos vet
は非構造化リポジトリで機能できます。--keep-output=true
ではレンダリングされた構成ファイルが保存されます。--output=OUTPUT_DIRECTORY
はレンダリングされた構成ファイルのパスです。
Git リポジトリからの同期を構成する
使用する構成ファイルでリポジトリが作成されたので、クラスタからリポジトリへの同期を構成できます。
RootSync
オブジェクトを構成するには、root-sync.yaml
ファイルを作成します。# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: true
YOUR_GIT_REPOSITORY
は、Git リポジトリの URL に置き換えます。root-sync.yaml
ファイルをクラスタに適用します。kubectl apply -f root-sync.yaml
インストールを確認する
Config Sync をインストールして構成したら、インストールが正常に完了したことを確認します。
nomos status
を使用して、他にエラーがないことを確認します。nomos status
出力例:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5a
Helm コンポーネントが、正常にインストールされたかどうかを確認します。
kubectl get all -n cert-manager
出力例:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m