このチュートリアルでは、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 によって生成されるため、元の構成ファイルに加えられた変更を確認するだけで済みます。
目標
- 既製の Helm チャートを参照する Kustomize 構成を配置したリポジトリを cert-manager 用に構成します。cert-manager は、証明書の管理に役立つ Kubernetes 用のツールです。
- 作成した構成ファイルをプレビューして検証します。
- Config Sync を使用してチャートを自動的にレンダリングし、クラスタをリポジトリに同期します。
- インストールが成功したことを確認します。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Config Sync の要件を満たし、次の Config Sync の設定を使用しているクラスタを作成するか、このクラスタにアクセスできることを確認します。
- 非構造化リポジトリを使用します。
RootSyncAPI とRepoSyncAPI が有効になっています。spec.override.enableShellInRenderingをtrueに設定し、Config Sync がレンダリング プロセスで公開リポジトリからリモートベースを pull できるようにします。
- フリートにクラスタを登録します。
nomosコマンドライン ツールをインストールします。すでにnomosツールがインストールされている場合は、バージョン 1.9.0 以降にアップグレードしてください。- Helm をインストールします。
また、Git、Kustomize、Helm にある程度習熟することも役立ちます。
リポジトリを構成する
次のタスクでは、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 basebaseディレクトリに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: trueYOUR_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 fd17dd5aHelm コンポーネントが、正常にインストールされたかどうかを確認します。
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
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
リソースを個別に削除する
リポジトリ内のマニフェストを削除する
誤って削除されないように、Config Sync では、1 回の commit ですべての Namespace やクラスタ スコープのリソースを削除することはできません。次の手順に沿って操作を行うことにより、別々の commit で適切にコンポーネントをアンインストールし、Namespace を削除します。
リポジトリから cert-manager コンポーネントを削除します。
git rm -rf manifests/cert-manager \ && git commit -m "uninstall cert-manager" \ && git push origin BRANCHBRANCHは、リポジトリを作成したブランチに置き換えます。cert-manager Namespace を削除します。
git rm manifests/namespace-cert-manager.yaml \ && git commit -m "remove the cert-manager namespace" \ && git push origin BRANCHcert-manager Namespace が存在しないことを確認します。
kubectl get namespace cert-namespace出力例:
Error from server (NotFound): namespaces "cert-namespace" not found
クラスタの削除
クラスタを削除するには、次のコマンドを実行します。
コンソール
Google Cloud コンソールを使用してクラスタを削除するには、次の操作を行います。
Google Cloud コンソールで GKE のページに移動します。
削除するクラスタの横にあるmore_vert [アクション] をクリックし、delete [削除] をクリックします。
確認するメッセージが表示されたら、もう一度 [削除] をクリックします。
gcloud
Google Cloud CLI を使用してクラスタを削除するには、次のコマンドを実行します。
gcloud container clusters delete CLUSTER_NAME
詳細については、gcloud container clusters delete のドキュメントをご覧ください。
次のステップ
- 非構造化リポジトリの操作について詳細を確認する。