Config Sync のインストールをカスタマイズする

Config Sync を使用すると、Git リポジトリ、OCI イメージ、Helm チャートなどの信頼できる一元的な情報源から構成を同期して、Kubernetes リソースを管理できます。デフォルトのインストール手順がニーズに合わない場合は、Config Sync のインストールをカスタマイズする必要があります。

このページでは、Config Sync の高度なインストールと構成を行う方法について説明します。インストール プロセスには次の手順が含まれます。

  • Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して、個々のクラスタに Config Sync をインストールする。
  • ルート リポジトリの構成(ソースタイプ、形式、認証など)。
  • Config Sync のインストールと構成が正常に完了したことを確認する。

制限事項

Config Sync では、 Google Cloud コンソールまたは Google Cloud CLI を使用した、ソースタイプとして helm を構成することはサポートされていません。Kubernetes API を使用して Helm リポジトリから同期するように RootSync オブジェクトまたは RepoSync オブジェクトを構成するか、別の信頼できるソースで宣言できます。詳細については、Helm リポジトリの構成をご覧ください。

始める前に

Config Sync をインストールする前に、信頼できる情報源と適切なクラスタを準備します。

Config Sync に信頼できる情報源へのアクセス権を付与する

信頼できる情報源からクラスタに構成を同期するには、Config Sync にリポジトリに対する読み取り専用権限が必要です。Config Sync が構成を読み取れるように承認するには、次の操作を行います。

クラスタ要件を確認する

クラスタを作成する前に、クラスタの要件を確認してください。

Config Sync のインストール

Google Cloud コンソールまたは Google Cloud CLI を使用して Config Sync をインストールすると、root-sync という名前の RootSync オブジェクトが自動的に作成されます。kubectl コマンドを使用して root-sync を変更し、Config Sync の構成を追加できます。詳細については、kubectl コマンドを使用して Config Sync を構成するをご覧ください。

コンソール

Config Sync のインストール

Config Sync をインストールするには、すべてのクラスタをフリートに登録する必要があります。 Google Cloud コンソールで Config Sync をインストールするときに、個々のクラスタを選択すると、それらのクラスタがフリートに自動的に登録されます。

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

    [構成] に移動

  2. [ Config Sync のインストール] をクリックします。
  3. 使用する Config Sync のバージョンを選択します。
  4. [インストール オプション] で、次のいずれかのオプションを選択します。
    • フリート全体に Config Sync をインストールする(推奨): フリート内のすべてのクラスタに Config Sync がインストールされます。
    • 個々のクラスタに Config Sync をインストールする: 選択したクラスタに Config Sync がインストールされます。選択したクラスタは、フリートに自動的に登録されます。
  5. 個々のクラスタに Config Sync をインストールする場合は、使用可能なクラスタ テーブルで、Config Sync をインストールするクラスタを選択します。
  6. [Config Sync のインストール] をクリックします。数分後、[設定] タブで、フリート内のクラスタの [ステータス] 列が「有効」になっていることを確認します。

パッケージをデプロイする

クラスタをフリートに登録し、Config Sync をインストールしたら、信頼できる情報源からクラスタにパッケージをデプロイするように Config Sync を構成できます。同じパッケージを複数のクラスタにデプロイする、または異なるパッケージを異なるクラスタにデプロイできます。パッケージ名や同期タイプなどの設定を除き、パッケージはデプロイ後に編集できます。詳細については、パッケージを管理するをご覧ください。

パッケージをデプロイする手順は次のとおりです。

  1. Google Cloud コンソールで、Config Sync のダッシュボードに移動します。

    Config Sync のダッシュボードに移動

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

  3. [Select clusters for package deployment] テーブルで、パッケージをデプロイするクラスタを選択し、[続行] をクリックします。

  4. ソースタイプとして [Package hosted on Git] または [Package hosted on OCI] を選択し、[続行] をクリックします。

  5. [Package details] セクションで、パッケージ名を入力します。この名前は RootSync オブジェクトまたは RepoSync オブジェクトを表します。

  6. [同期タイプ] フィールドで、同期タイプとして [クラスタ スコープの同期] または [Namespace スコープの同期] を選択します。

    クラスタ スコープの同期では RootSync オブジェクトが作成され、Namespace スコープの同期では RepoSync オブジェクトが作成されます。これらのオブジェクトの詳細については、Config Sync のアーキテクチャをご覧ください。

  7. [ソース] セクションで、次の操作を行います。

    • Git リポジトリでホストされているソースの場合は、次のフィールドを入力します。

      1. [リポジトリの URL] に、信頼できる情報源として使用する Git リポジトリの URL を入力します。
      2. 省略可: [リビジョン] フィールドを更新して、デフォルトの HEAD を使用していないかどうかを確認します。
      3. 省略可: ルート リポジトリから同期しない場合は、[パス] フィールドを更新します。
      4. 省略可: デフォルトの main ブランチを使用していない場合は、[ブランチ] フィールドを更新します。
    • OCI イメージでホストされているソースの場合は、次のフィールドを入力します。

      1. [イメージ] に、信頼できる情報源として使用する OCI イメージの URL を入力します。
      2. [ディレクトリ] に、同期元となるディレクトリのパスをルート ディレクトリからの相対パスとして入力します。
  8. (省略可): [詳細設定] セクションを開いて、次の操作を行います。

    1. 認証タイプを選択します。Config Sync がソースの構成ファイルを読み取り、クラスタに適用するには、信頼できる情報源に対する読み取り専用アクセス権が必要です。ソースに公開リポジトリなどの認証が不要な場合を除き、Config Sync に、Git リポジトリOCI イメージ、または Helm チャート(gcloud CLI のみ)に対する読み取り専用アクセス権を付与してください。Config Sync のインストール時に構成したのと同じ認証タイプを選択します。

      • なし: 認証を使用しない
      • SSH: SSH 認証鍵ペアを使用して認証を行います。
      • Cookiefile: cookiefile を使用して認証します。
      • トークン: アクセス トークンまたはパスワードを使用して認証します。
      • Google Cloud Repository: Google サービス アカウントを使用して Cloud Source Repositories にアクセスします。このオプションは、Workload Identity Federation for GKE がクラスタで有効になっていない場合にのみ選択してください。
      • Workload Identity: Google サービス アカウントを使用して、Cloud Source Repositories のリポジトリにアクセスします。
    2. 同期の待機時間を秒単位で入力します。これにより、Config Sync が信頼できる情報源から pull を試みてから再度試行するまでの待機時間が決定されます。

    3. 信頼できる情報源との通信時に使用する HTTPS プロキシの Git プロキシ URL を入力します。

    4. [階層] を選択して [ソース形式] を変更します。

      ほとんどの場合は、デフォルト値の「Unstructured」をおすすめします。これにより、信頼できる情報源を必要に応じて整理できます。

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

    Config Sync の [パッケージ] ページにリダイレクトされます。数分後、構成したクラスタの [同期ステータス] 列に「同期済み」と表示されます。

gcloud

続行する前に、クラスタをフリート登録していることを確認してください。

  1. ConfigManagement フリート機能を有効にします。

    gcloud beta container fleet config-management enable
    
  2. apply-spec.yaml という名前のファイルを作成し、次の YAML ファイルをそのファイルにコピーして、構成を準備します。

    マニフェストを作成するときに、必要な spec.configSync オプション フィールドをすべて設定して、後で kubectl コマンドを使用して構成を行うことができます。また、spec.configSync.enabled フィールドを true に設定して、オプション フィールドを省略することもできます。後で kubectl コマンドを使用して追加の RootSync オブジェクトを作成できます。また、後で kubectl コマンドで完全に管理できる RepoSync を作成することもできます。

    # apply-spec.yaml
    
         applySpecVersion: 1
         spec:
           configSync:
             enabled: true
             # If you don't have a source of truth yet, omit the
             # following fields. You can configure them later.
             sourceType: SOURCE_TYPE
             sourceFormat: FORMAT
             syncRepo: REPO
             syncRev: REVISION
             secretType: SECRET_TYPE
             gcpServiceAccountEmail: EMAIL
             metricsGcpServiceAccountEmail: METRICS_EMAIL
             policyDir: DIRECTORY
             preventDrift: false
    

    次のように置き換えます。

    • SOURCE_TYPE: Git リポジトリから同期する場合は git、OCI イメージから同期する場合は oci、Helm チャートから同期する場合は helm を追加します。値を指定しない場合、デフォルトの git が使用されます。
    • FORMAT: 非構造化リポジトリを使用するには unstructured を追加し、階層型リポジトリを使用するには hierarchy を追加します。この値では大文字と小文字が区別されます。このフィールドは省略可能で、デフォルト値は hierarchy です。unstructured を追加することをおすすめします。この形式では、自分が一番使いやすい方法で構成ファイルを整理できます。
    • REPO: 信頼できる情報源の URL を追加します。Git リポジトリと Helm リポジトリの URL は、HTTPS または SSH プロトコルを使用します。例: https://github.com/GoogleCloudPlatform/anthos-config-management-samplessecretType として SSH を使用する場合は、SSH プロトコルを使用して URL を入力します。このフィールドは必須です。プロトコルを入力しない場合、URL は HTTPS URL として扱われます。

      OCI URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME です。デフォルトでは、イメージは latest タグから取得されますが、TAG または DIGEST を使用してイメージを pull することもできます。PACKAGE_NAMETAG または DIGEST を指定します。

      • TAG で pull するには: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST で pull するには: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • REVISION: 同期元となる Git リビジョン(タグまたはハッシュ)またはブランチ名。ハッシュを使用する場合は、省略形ではなく完全なハッシュにする必要があります。

    • SECRET_TYPE: 以下の secretTypes のいずれかです。

      git

      • none: 認証なし。
      • ssh: SSH 認証鍵ペアを使用。
      • cookiefile: cookiefile を使用。
      • token: トークンを使用。
      • gcpserviceaccount: Google サービス アカウントを使用して Cloud Source Repositories または Secure Source Manager リポジトリにアクセス。この認証タイプを選択した場合は、Config Sync の構成を完了した後に IAM ポリシー バインディングを作成する必要があります。詳しくは、Google サービス アカウントを使用して Config Sync に Git へのアクセス権を付与するの「Google サービス アカウント」タブをご覧ください。
      • gcenode: Google サービス アカウントを使用して Cloud Source Repositories にアクセス。このオプションは、Workload Identity Federation for GKE がクラスタで有効になっていない場合にのみ選択してください。
      • githubapp: GitHub アプリを使用して GitHub リポジトリの認証を行う。

      この認証のタイプの詳細については、Config Sync に Git へのアクセス権を付与するをご覧ください。

      oci

      • none: 認証なし
      • gcenode: Compute Engine のデフォルト サービス アカウントを使用して、Artifact Registry のイメージにアクセスします。このオプションは、Workload Identity Federation for GKE がクラスタで有効になっていない場合にのみ選択してください。
      • gcpserviceaccount: Google サービス アカウントを使用してイメージにアクセスします。

      helm

      • token: トークンを使用します。
      • gcenode: Compute Engine のデフォルト サービス アカウントを使用して、Artifact Registry のイメージにアクセスします。このオプションは、Workload Identity Federation for GKE がクラスタで有効になっていない場合にのみ選択してください。
      • gcpserviceaccount: Google サービス アカウントを使用してイメージにアクセスします。
      • EMAIL: secretType として gcpserviceaccount を追加した場合は、Google サービス アカウントのメールアドレスを追加します。例: acm@PROJECT_ID.iam.gserviceaccount.com

      • METRICS_EMAIL: Config Sync の指標を Cloud Monitoring にエクスポートする際に使用される Google Cloudサービス アカウント(GSA)のメールアドレス。GSA には、モニタリング指標の書き込み(roles/monitoring.metricWriter)IAM ロールが必要です。Namespace config-management-monitoring の Kubernetes ServiceAccount default は、GSA にバインドされている必要があります。

      • DIRECTORY: 同期元となるディレクトリのパスであり、Git リポジトリのルートからの相対パス。指定したディレクトリのすべてのサブディレクトリがクラスタと同期されます。デフォルト値は、リポジトリのルート ディレクトリです。

    spec フィールドに追加できるフィールドの一覧については、gcloud フィールドをご覧ください。

  3. apply-spec.yaml ファイルを適用します。既存のマニフェストを使用している場合は、前のコマンドで取得した設定を使用して、構成するクラスタにファイルを適用する必要があります。

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML_PATH \
        --project=PROJECT_ID
    

    次のように置き換えます。

    • MEMBERSHIP_NAME: クラスタの登録時に選択したフリート メンバーシップ名。名前は gcloud container fleet memberships list で確認できます。
    • CONFIG_YAML_PATH: apply-spec.yaml ファイルのパス。
    • PROJECT_ID: プロジェクト ID。

Terraform

Config Sync を構成するクラスタごとに、configmanagement ブロックと config_sync ブロックを含む google_gkehub_feature_membership リソース ブロックを適用します。次の例をご覧ください。

git

data "google_project" "default" {}

resource "google_container_cluster" "default" {
  name     = "gke-autopilot-basic"
  location = "us-central1"

  fleet {
    project = data.google_project.default.project_id
  }

  enable_autopilot = true
}

resource "google_gke_hub_feature" "configmanagement_feature" {
  name     = "configmanagement"
  location = "global"
}

resource "google_gke_hub_feature_membership" "configmanagement_feature_member" {
  location = "global"

  feature             = google_gke_hub_feature.configmanagement_feature.name
  membership          = google_container_cluster.default.fleet[0].membership_id
  membership_location = google_container_cluster.default.fleet[0].membership_location

  configmanagement {
    config_sync {
      # The field `enabled` was introduced in Terraform version 5.41.0, and
      # needs to be set to `true` explicitly to install Config Sync.
      enabled = true
      git {
        sync_repo   = "REPO"
        sync_branch = "BRANCH"
        policy_dir  = "DIRECTORY"
        secret_type = "SECRET"
      }
    }
  }
}

次のように置き換えます。

  • REPO: 構成ファイルを含む Git リポジトリの URL。
  • BRANCH: リポジトリ ブランチ。例: main
  • DIRECTORY: 同期するリポジトリの最上位レベルを表す Git リポジトリ内のパス。
  • SECRET: Secret 認証タイプ。

oci

data "google_project" "default" {}

resource "google_container_cluster" "default" {
  name     = "gke-autopilot-basic"
  location = "us-central1"

  fleet {
    project = data.google_project.default.project_id
  }

  enable_autopilot = true
}

resource "google_gke_hub_feature" "configmanagement_feature" {
  name     = "configmanagement"
  location = "global"
}

resource "google_gke_hub_feature_membership" "configmanagement_feature_member" {
  location = "global"

  feature             = google_gke_hub_feature.configmanagement_feature.name
  membership          = google_container_cluster.default.fleet[0].membership_id
  membership_location = google_container_cluster.default.fleet[0].membership_location

  configmanagement {
    config_sync {
      # The field `enabled` was introduced in Terraform version 5.41.0, and
      # needs to be set to `true` explicitly to install Config Sync.
      enabled = true
      oci {
        sync_repo   = "REPO"
        policy_dir  = "DIRECTORY"
        secret_type = "SECRET"
      }
    }
  }
}

次のように置き換えます。

  • REPO: 構成ファイルを含む OCI イメージ リポジトリの URL。
  • DIRECTORY: 同期するリソースを含むディレクトリの絶対パス。ルート ディレクトリを使用する場合は、このフィールドを空白のままにします。
  • SECRET: Secret 認証タイプ。

同期するクラスタごとに、この手順を繰り返します。

Terraform の使用方法の詳細については、Config Sync での Terraform サポートをご覧ください。

ルート リポジトリを構成したら、必要に応じて、他のルート リポジトリや Namespace リポジトリなど、複数のリポジトリからの同期を構成することもできます。Namespace リポジトリは、クラスタ全体で特定の Namespace に同期される Namespace スコープの構成ファイルを 1 つのリポジトリに保存する場合に役立ちます。

インストールを確認する

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

gcloud

次のコマンドを実行します。

nomos status

インストールが正常に完了すると、ステータスは SYNCED または PENDING になります。

報告されたエラーなど、nomos status によって提供される情報の詳細については、nomos コマンドライン ツールのドキュメントの Config Sync のステータスを確認するをご覧ください。

コンソール

次の手順を行います。

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

    [構成] に移動

  2. [パッケージ] タブで、クラスタ テーブルの [同期ステータス] 列を確認します。Config Sync が正常にインストールされると、ステータスは「インストール済み」になります。正常に構成されている信頼できる情報源のステータスは「同期済み」になります。

次のステップ