Kustomize と Helm で Config Sync を使用する

Config Sync を使用して既製の Helm コンポーネントをインストールする方法について説明します。

このチュートリアルでは、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 は、証明書の管理に役立つ Kubernetes 用のツールです。
  • 作成した構成ファイルをプレビューして検証します。
  • Config Sync を使用してチャートを自動的にレンダリングし、クラスタをリポジトリに同期します。
  • インストールが成功したことを確認します。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

準備

  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトで課金が有効になっていることを確認します

  3. Config Sync の要件を満たし、次の Config Sync の設定を使用しているクラスタを作成するか、このクラスタにアクセスできることを確認します。
  4. フリートクラスタを登録します。
  5. nomos コマンドライン ツールをインストールします。すでに nomos ツールがインストールされている場合は、バージョン 1.9.0 以降にアップグレードしてください。
  6. Helm をインストールします。

また、Git、Kustomize、Helm にある程度習熟することも役立ちます。

リポジトリを構成する

次のタスクでは、Kustomize 構成と Helm チャートを組み合わせた構成ファイルを使用して、Git リポジトリを準備する方法を示します。

  1. Git リポジトリを作成するか、Git リポジトリにアクセスできることを確認します。リポジトリでは Kustomize と Helm を使用しているため、これは非構造化リポジトリである必要があります。

  2. 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 はクラスタ内のオブジェクトに対して競合する変更を無視するようになります。

  3. Git リポジトリに base という名前のディレクトリを作成します。

    mkdir base
    
  4. 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 チャートをレンダリングします。

  5. 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 に追加されます。

  6. 変更をリポジトリに commit します。

    git add .
    git commit -m 'Set up manifests.'
    git push
    

サンプル リポジトリには、このようなリポジトリのサンプルがあります。

レンダリングされた構成ファイルをプレビューして検証する

Config Sync が構成ファイルをレンダリングしてクラスタに同期する前に、構成ファイルが正確であることを確認します。それには、nomos hydrate を実行してレンダリングされた構成ファイルをプレビューし、nomos vet を実行して形式が正しいことを検証します。

  1. 次のフラグを使用して、次の nomos hydrate を実行します。

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    コマンドの内容:

    • --source-format=unstructured を使用すると、nomos hydrate は非構造化リポジトリで機能できます。Kustomize の構成と Helm チャートを使用しているため、非構造化リポジトリを使用してこのフラグを追加する必要があります。
    • --output=OUTPUT_DIRECTORY を使用すると、レンダリングされた構成ファイルのパスを定義できます。OUTPUT_DIRECTORY は、出力を保存する場所に置き換えます。
  2. 次のフラグを指定して 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 リポジトリからの同期を構成する

使用する構成ファイルでリポジトリが作成されたので、クラスタからリポジトリへの同期を構成できます。Config Sync がすでにインストールされている場合は、同期ステータスを確認するに進みます。

  1. Google Cloud コンソールで、GKE Hub API を有効にします。

    GKE Hub API に移動

  2. Google Cloud コンソールで、[機能] セクションの [構成] ページに移動します。

    [構成] に移動

  3. [ Config Sync のインストール] をクリックします。

  4. [自動アップグレード] を選択して、Config Sync がバージョンを自動的にアップグレードできるようにします。

  5. [インストール オプション] で、[個々のクラスタに Config Sync をインストールする] を選択します。

  6. [使用可能なクラスタ] テーブルで、cs-cluster を選択し、[Config Sync をインストールする] をクリックします。数分後に、[設定] タブで cs-cluster のステータスが [有効] になっていることを確認する必要があります。

  7. Config Sync ダッシュボードで、[パッケージをデプロイ] をクリックします。

  8. [パッケージ デプロイ用のクラスタを選択] テーブルで、cs-cluster を選択し、[続行] をクリックします。

  9. [Git でホストされているパッケージ] を選択したままにして、[続行] をクリックします。

  10. [パッケージ名] フィールドに「sample-repository」と入力します。

  11. [Repository URL] フィールドに「https://github.com/GoogleCloudPlatform/anthos-config-management-samples」と入力します。

  12. [パス] フィールドに「config-sync-quickstart/multirepo/root」と入力します。

  13. 他のフィールドはデフォルト値のままにしておきます。

  14. [パッケージをデプロイ] をクリックします。

    数分後、cs-cluster の [同期ステータス] 列に「同期済み」と表示されます。

インストールを確認する

Config Sync をインストールして構成したら、インストールが正常に完了したことを確認します。

  1. nomos status を使用して、他にエラーがないことを確認します。

    nomos status
    

    出力例:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  2. 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
    

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

リソースを個別に削除する

リポジトリ内のマニフェストを削除する

誤って削除されないように、Config Sync では、1 回の commit ですべての Namespace やクラスタ スコープのリソースを削除することはできません。次の手順に沿って操作を行うことにより、別々の commit で適切にコンポーネントをアンインストールし、Namespace を削除します。

  1. リポジトリから cert-manager コンポーネントを削除します。

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    BRANCH は、リポジトリを作成したブランチに置き換えます。

  2. cert-manager Namespace を削除します。

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. cert-manager Namespace が存在しないことを確認します。

    kubectl get namespace cert-namespace
    

    出力例:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

クラスタの削除

クラスタを削除するには、次のコマンドを実行します。

コンソール

Google Cloud コンソールを使用してクラスタを削除するには、次の操作を行います。

  1. Google Cloud コンソールで、GKE ページに移動します。

    GKE に移動

  2. 削除するクラスタの横にある [アクション] をクリックし、 [削除] をクリックします。

  3. 確認するメッセージが表示されたら、もう一度 [削除] をクリックします。

gcloud

Google Cloud CLI を使用してクラスタを削除するには、次のコマンドを実行します。

gcloud container clusters delete CLUSTER_NAME

詳細については、gcloud container clusters delete のドキュメントをご覧ください。

次のステップ