Config Sync では、信頼できる情報源に保存された構成ファイルを使用して、Kubernetes リソースを管理できます。Config Sync は、信頼できる情報源として Git リポジトリ、OCI イメージ、Helm チャートをサポートしています。このページでは、Config Sync を有効にして、ルート リポジトリから同期するように構成する方法について説明します。Config Sync は、Google Kubernetes Engine(GKE)Enterprise エディションで利用できます。
Google Cloud コンソールまたは Google Cloud CLI で Config Sync をインストールすると、デフォルトで RootSync
API と RepoSync
API が有効になります。これにより、複数のリポジトリからの同期や、Kustomize と Helm の構成の同期などの追加機能を実行できます。
始める前に
Config Sync をインストールする前に、環境を準備し、クラスタの要件を満たしていることを確認して、適切なユーザーロールを付与します。
ローカルの環境を準備する
次のタスクを行ってローカル環境を準備します。
- 信頼できる情報源を作成するか、信頼できる情報源にアクセスできることを確認します。ここに、Config Sync が同期する構成ファイルを追加します。構成ファイルと信頼できる情報源の設定方法については、次のいずれかのガイドをご覧ください。
- Google Cloud CLI をインストールして初期化します。これにより、
gcloud
コマンドとnomos
コマンドが提供されます。Cloud Shell を使用する場合、Google Cloud CLI がプリインストールされています。すでに Google Cloud CLI をインストールしている場合は、gcloud components update
を実行して最新バージョンを取得します。
クラスタ要件を確認する
クラスタに Config Sync をインストールする前に、クラスタ構成の推奨事項と要件を確認してください。
クラスタを準備する
適切なクラスタを作成したら、次の操作を行います。
Google Cloud CLI を使用して Config Sync を構成する場合、または Google Cloud 外のクラスタを使用する場合は、GKE クラスタまたは Google Cloud 外のクラスタがフリートに登録されている必要があります。Google Cloud コンソールを使用する場合は、Config Sync の構成時に GKE クラスタを登録できます。
Config Sync をインストールする
以下のセクションでは、Config Sync に次のいずれかの信頼できる情報源へのアクセス権を付与します。
アクセス権を付与すると、Config Sync を構成できます。
Git へのアクセス権を付与する
Config Sync には、Git リポジトリに対する読み取り専用権限が必要です。この権限により、Config Sync はリポジトリに commit された構成ファイルを読み取り、クラスタに適用できるようになります。
読み取り専用アクセスに対してリポジトリによる認証が不要な場合は、引き続き Config Sync を構成し、認証タイプとして none
を使用できます。たとえば、ログインせずにウェブ インターフェースでリポジトリを参照できる場合は認証の必要はありません。また、認証情報を指定することや、保存済みの認証情報を使用することなく、git
clone
を使用してリポジトリのクローンをローカルに作成できる場合も認証は不要です。この場合、Secret を作成する必要はありません。
ただし、ほとんどのユーザーは、リポジトリへの読み取りアクセスが制限されているため、認証情報を作成する必要があります。認証情報が必要な場合は、各登録済みクラスタの git-creds
Secret に認証情報が保存されています(Google サービス アカウントを使用している場合を除く)。Secret は固定値であるため、git-creds
という名前にする必要があります。
Config Sync は、次の認証メカニズムに対応しています。
- SSH 認証鍵ペア(
ssh
) - Cookiefile(
cookiefile
) - トークン(
token
) - Google サービス アカウント(
gcpserviceaccount
) - Compute Engine のデフォルトのサービス アカウント(
gcenode
) - GitHub アプリ(
githubapp
)
どのメカニズムを選択するかは、リポジトリによって異なります。通常は、SSH 認証鍵ペアを使用することをおすすめします。GitHub と Bitbucket はどちらも SSH 認証鍵ペアの使用に対応しています。ただし、Cloud Source Repositories のリポジトリを使用している場合は、プロセスがよりシンプルであるため、SSH 認証鍵ペアではなく、Google サービス アカウントの使用をおすすめします。組織でリポジトリをホストしていて、どの認証方法に対応しているかがわからない場合は、管理者にお問い合わせください。
Cloud Source Repositories のリポジトリを Config Sync リポジトリとして使用するには、次の手順で Cloud Source Repositories の URL を取得します。
すべてのリポジトリを一覧取得します。
gcloud source repos list
使用するリポジトリの URL を出力からコピーします。例:
REPO_NAME PROJECT_ID URL my-repo my-project https://source.developers.google.com/p/my-project/r/my-repo-csr
この URL は、次のセクションで Config Sync を構成するときに必要になります。Google Cloud コンソールを使用して Config Sync を構成する場合は、URL を [URL] フィールドに追加します。Google Cloud CLI を使用して Config Sync を構成する場合は、構成ファイルの
syncRepo
フィールドに URL を追加します。
SSH 認証鍵ペア
SSH 認証鍵ペアは、公開鍵と秘密鍵の 2 つのファイルから構成されています。通常、公開鍵の拡張子は .pub
です。
SSH 認証鍵ペアを使用するには、次の手順に従います。
SSH 認証鍵ペアを作成し、Config Sync が Git リポジトリに対して認証されるようにします。この手順は、リポジトリのクローンを作成するか、リポジトリの内容を読み取る際にリポジトリに対する認証が必要になる場合に必要になります。鍵ペアがセキュリティ管理者から提供される場合は、この手順を省略します。自社のセキュリティとコンプライアンスの要件に応じて、すべてのクラスタに対して単一の鍵ペアを使用するか、クラスタごとに 1 つの鍵ペアを使用するかを選びます。
次のコマンドは 4,096 ビットの RSA 鍵を作成します。これよりビット数の少ない鍵はおすすめできません。
ssh-keygen -t rsa -b 4096 \ -C "GIT_REPOSITORY_USERNAME" \ -N '' \ -f /path/to/KEYPAIR_FILENAME
次のように置き換えます。
GIT_REPOSITORY_USERNAME
: Config Sync がリポジトリに対する認証で使用するユーザー名。/path/to/KEYPAIR_FILENAME
: 鍵ペアへのパス。
GitHub などのサードパーティ Git リポジトリ ホストを使用している場合や、Cloud Source Repositories でサービス アカウントを使用する場合は、別のアカウントを使用することをおすすめします。
新しく作成した公開鍵を認識するようにリポジトリを構成します。ご使用の Git ホスティング プロバイダのドキュメントをご覧ください。よく使われる Git ホスティング プロバイダの手順へのリンクを以下に示します。
- Cloud Source Repositories
- Bitbucket
- GitHub 単一の GitHub リポジトリへの読み取り専用アクセスを提供するために、個別のデプロイキーを作成することをおすすめします。
- GitLab
秘密鍵をクラスタ内の新しい Secret に追加します。
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
は、秘密鍵の名前に置き換えます(.pub
拡張子は付けません)。(推奨)SSH 認証を使用して既知のホストのチェックを構成するには、
git_creds
Secret のdata.known_hosts
フィールドに既知のホストキーを追加します。known_hosts
のチェックを無効にするには、Secret からknown_hosts
フィールドを削除します。既知のホスト鍵を追加するには、次のコマンドを実行します。kubectl edit secret git-creds \ --namespace=config-management-system
次に、
data
の下に、既知のホストのエントリを追加します。known_hosts: KNOWN_HOSTS_KEY
ローカル ディスクから秘密鍵を削除するか、秘密鍵を保護します。
Config Sync を構成して Git リポジトリの URL を追加する場合は、SSH プロトコルを使用します。Cloud Source Repositories のリポジトリを使用している場合は、URL を入力する際に次の形式を使用する必要があります。
ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
次のように置き換えます。
EMAIL
: Google Cloud ユーザー名PROJECT_ID
: リポジトリが配置されている Google Cloud プロジェクトの IDREPO_NAME
: リポジトリの名前
Cookiefile
cookiefile
を取得するプロセスは、リポジトリの構成によって異なります。サンプルについては、Cloud Source Repositories のドキュメントの静的認証情報を生成するをご覧ください。認証情報は通常、ユーザーのホーム ディレクトリにある .gitcookies
ファイルに保存されますが、セキュリティ管理者から提供されることもあります。
cookiefile
を作成するには、次の手順を行います。
cookiefile
を作成して取得したら、クラスタの新しい Secret に追加します。HTTPS プロキシを使用しない場合は、次のコマンドを使用して Secret を作成します。
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE
HTTPS プロキシを使用する必要がある場合は、次のコマンドを実行して、
cookiefile
と一緒に Secret に追加します。kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE \ --from-literal=https_proxy=HTTPS_PROXY_URL
次のように置き換えます。
/path/to/COOKIEFILE
: 適切なパスとファイル名HTTPS_PROXY_URL
: Git リポジトリとの通信時に使用する HTTPS プロキシの URL
引き続きローカルで必要な場合は、
cookiefile
の内容を保護します。必要でなければ削除します。
トークン
組織で SSH 認証鍵の使用が許可されていない場合は、トークンを使用することをおすすめします。Config Sync では、トークンとして GitHub の個人アクセス トークン(PAT)、GiLab の PAT、デプロイキー、Bitbucket のアプリ パスワードを使用できます。
トークンを使用して Secret を作成するには、次の手順を行います。
GitHub または Bitbucket を使用してトークンを作成します。
- GitHub: PAT を作成します。トークンに
repo
スコープを付与し、非公開リポジトリから読み取れるようにします。PAT を GitHub アカウントにバインドするため、マシンユーザーを作成し、PAT をそのマシンユーザーにバインドすることをおすすめします。 - GitLab: PAT を作成するか、デプロイ トークンを作成します。
- Bitbucket: アプリ パスワードを作成します。
- GitHub: PAT を作成します。トークンに
トークンを作成して取得したら、それをクラスタの新しい Secret に追加します。
HTTPS プロキシを使用しない場合は、次のコマンドを使用して Secret を作成します。
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace="config-management-system" \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN
次のように置き換えます。
USERNAME
: 使用するユーザー名。TOKEN
: 前のステップで作成したトークン。
HTTPS プロキシを使用する必要がある場合は、次のコマンドを実行して、
username
およびtoken
と一緒に Secret に追加します。kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN \ --from-literal=https_proxy=HTTPS_PROXY_URL
次のように置き換えます。
USERNAME
: 使用するユーザー名。TOKEN
: 前のステップで作成したトークン。HTTPS_PROXY_URL
: Git リポジトリとの通信時に使用する HTTPS プロキシの URL。
ローカルでのトークンが必要な場合は、トークンを保護します。必要でなければ削除します。
Google サービス アカウント
リポジトリが Cloud Source Repositories にあり、クラスタが GKE Workload Identity Federation for GKE またはフリートの Workload Identity Federation for GKE を使用している場合は、Google サービス アカウントを使用して、マネージド クラスタと同じプロジェクト内のリポジトリに対するアクセス権を Config Sync に付与できます。
サービス アカウントがない場合は、サービス アカウントを作成します。
Google サービス アカウントに Cloud Source Repositories 読み取り(
roles/source.reader
)IAM ロールを付与します。Cloud Source Repositories のロールと権限の詳細については、リポジトリの表示権限を付与するをご覧ください。同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト全体の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/source.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
サービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ固有の権限を付与します。
gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
Google Cloud コンソールを使用して Config Sync を構成する場合は、[認証タイプ] で [Workload Identity Federation for GKE] を選択し、サービス アカウントのメールアドレスを追加します。
Google Cloud CLI を使用して Config Sync を構成する場合は、
gcpserviceaccount
をsecretType
として追加し、サービス アカウントのメールアドレスをgcpServiceAccountEmail
に追加します。Config Sync の構成が完了したら、Kubernetes サービス アカウントと Google サービス アカウントの間に IAM ポリシー バインディングを作成します。Config Sync を初めて構成するまで、Kubernetes サービス アカウントは作成されません。
フリートに登録されたクラスタを使用している場合は、フリートごとに 1 回だけポリシー バインディングを作成する必要があります。フリートに登録されたすべてのクラスタは、同じ Workload Identity Federation for GKE プールを共有します。フリートのコンセプトである同一性により、1 つのクラスタの Kubernetes サービス アカウントに IAM ポリシーを追加すると、同じフリート内の他のクラスタでも同じ Namespace の Kubernetes サービス アカウントが同じ IAM ポリシーを取得します。
このバインディングにより、Config Sync Kubernetes サービス アカウントが Google サービス アカウントとして機能できるようになります。
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: 組織のプロジェクト ID。FLEET_HOST_PROJECT_ID
: GKE の Workload Identity Federation for GKE を使用している場合は、PROJECT_ID
と同じです。フリートの Workload Identity Federation for GKE を使用している場合は、クラスタが登録されているフリートのプロジェクト ID です。GSA_NAME
: Artifact Registry への接続に使用するカスタム Google サービス アカウント。このサービス アカウントには、Artifact Registry 読み取り(roles/artifactregistry.reader
)IAM ロールが必要です。KSA_NAME
: Reconciler の Kubernetes サービス アカウント。- ルート リポジトリで、
RootSync
の名前がroot-sync
の場合、root-reconciler
を使用します。それ以外の場合は、root-reconciler-ROOT_SYNC_NAME
を使用します。Google Cloud コンソールまたは Google Cloud CLI を使用して Config Sync をインストールする場合、root-sync
という名前の RootSync オブジェクトが自動的に作成されます。
- ルート リポジトリで、
REPOSITORY
: リポジトリの名前。POLICY_FILE
は、Identity and Access Management ポリシーを含む JSON または YAML ファイルです。
Compute Engine のデフォルトのサービス アカウント
リポジトリが Cloud Source Repositories にあり、クラスタが Workload Identity Federation for GKE が無効になっている GKE である場合は、認証タイプとして gcenode
を使用できます。
Google Cloud コンソールを使用して Config Sync を構成する場合は、[認証タイプ] に [Google Cloud Repository] を選択します。
Google Cloud CLI を使用して Config Sync を構成する場合は、gcenode
を secretType
として追加します。
Google Cloud Repository または gcenode
を選択すると、Compute Engine のデフォルトのサービス アカウントを使用できます。Compute Engine のデフォルト サービス アカウントに Cloud Source Repositories 読み取り(roles/source.reader
)IAM ロールを付与する必要があります。Cloud Source Repositories のロールと権限の詳細については、リポジトリの表示権限を付与するをご覧ください。
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/source.reader \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
PROJECT_ID
は組織のプロジェクト ID に置き換え、PROJECT_NUMBER
は組織のプロジェクト番号に置き換えます。
GitHub アプリ
リポジトリが GitHub にある場合は、認証タイプとして githubapp
を使用できます。
GitHub アプリを使用する手順は次のとおりです。
GitHub の手順に沿って GitHub アプリをプロビジョニングし、リポジトリからの読み取り権限を付与します。
GitHub アプリの構成をクラスタ内の新しい Secret に追加します。
クライアント ID の使用
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-client-id=CLIENT_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
CLIENT_ID
は、GitHub アプリのクライアント ID に置き換えます。INSTALLATION_ID
は、GitHub アプリのインストール ID に置き換えます。/path/to/GITHUB_PRIVATE_KEY
は、秘密鍵を含むファイルの名前に置き換えます。BASE_URL
は、GitHub API エンドポイントのベース URL に置き換えます。これは、リポジトリが www.github.com でホストされていない場合にのみ必要です。それ以外の場合は、引数を省略できます。デフォルトはhttps://api.github.com/
です。
アプリケーション ID の使用
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-application-id=APPLICATION_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
APPLICATION_ID
は、GitHub アプリのアプリケーション ID に置き換えます。INSTALLATION_ID
は、GitHub アプリのインストール ID に置き換えます。/path/to/GITHUB_PRIVATE_KEY
は、秘密鍵を含むファイルの名前に置き換えます。BASE_URL
は、GitHub API エンドポイントのベース URL に置き換えます。これは、リポジトリが www.github.com でホストされていない場合にのみ必要です。それ以外の場合は、引数を省略できます。デフォルトはhttps://api.github.com/
です。
ローカル ディスクから秘密鍵を削除するか、秘密鍵を保護します。
Config Sync を構成して Git リポジトリの URL を追加する場合は、認証タイプに
githubapp
を使用します。
Config Sync に OCI の読み取り専用アクセス権を付与する
イメージに含まれている構成ファイルを読み取り、クラスタに適用できるように、Artifact Registry に保存されている OCI イメージへの読み取り専用権限を Config Sync に付与する必要があります。
イメージに読み取り専用アクセスの認証が不要な場合は、引き続き Config Sync を構成し、認証タイプとして none
を使用します。たとえば、イメージが公開されていて、インターネットで誰でもアクセスできる場合、認証は不要です。
ただし、ほとんどのユーザーは、制限付きイメージにアクセスするために、認証情報を作成する必要があります。Config Sync は、次の認証メカニズムに対応しています。
- Kubernetes サービス アカウント(
k8sserviceaccount
) - Google サービス アカウント(
gcpserviceaccount
) Compute Engine のデフォルトのサービス アカウント(
gcenode
)
Kubernetes サービス アカウント
OCI イメージを Artifact Registry に保存し、クラスタで GKE の Workload Identity Federation for GKE または フリートの Workload Identity Federation for GKE を使用する場合は、バージョン 1.17.2 以降で認証タイプとして k8sserviceaccount
を使用できます。このオプションは、構成プロセスが簡素化されているため、gcpserviceaccount
よりも推奨されます。
Workload Identity Federation for GKE プールを使用して、Artifact Registry 読み取り(
roles/artifactregistry.reader
)IAM ロールを Kubernetes サービス アカウントに付与します。Artifact Registry のロールと権限の詳細については、Artifact Registry のロールと権限の構成をご覧ください。同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト全体の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
サービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ固有の権限を付与します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: 組織のプロジェクト ID。FLEET_HOST_PROJECT_ID
: GKE の Workload Identity Federation for GKE を使用している場合は、PROJECT_ID
と同じです。フリートの Workload Identity Federation for GKE を使用している場合は、クラスタが登録されているフリートのプロジェクト ID です。KSA_NAME
: Reconciler の Kubernetes サービス アカウント。- ルート リポジトリで、
RootSync
の名前がroot-sync
の場合、root-reconciler
を使用します。それ以外の場合は、root-reconciler-ROOT_SYNC_NAME
を使用します。Google Cloud コンソールまたは Google Cloud CLI を使用して Config Sync をインストールする場合、root-sync
という名前の RootSync オブジェクトが自動的に作成されます。
- ルート リポジトリで、
REPOSITORY
: リポジトリの ID。LOCATION
: リポジトリのリージョンまたはマルチリージョン ロケーション。
Google サービス アカウント
OCI イメージを Artifact Registry に保存し、クラスタで GKE の Workload Identity Federation for GKE またはフリートの Workload Identity Federation for GKE を使用する場合は、認証タイプとして gcpserviceaccount
を使用できます。バージョン 1.17.2 以降では、代わりに k8sserviceaccount
を使用することをおすすめします。このオプションを使用すると、Google サービス アカウントと関連する IAM ポリシー バインディングを作成する手順が不要になります。
サービス アカウントがない場合は、サービス アカウントを作成します。
Google サービス アカウントに Artifact Registry 読み取り(
roles/artifactregistry.reader
)IAM ロールを付与します。Artifact Registry のロールと権限の詳細については、Artifact Registry のロールと権限の構成をご覧ください。同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト全体の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
サービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ固有の権限を付与します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --project=PROJECT_ID
次のコマンドを実行して、Kubernetes サービス アカウントと Google サービス アカウントの IAM ポリシー バインディングを作成します。
gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: 組織のプロジェクト ID。FLEET_HOST_PROJECT_ID
: GKE の Workload Identity Federation for GKE を使用している場合は、PROJECT_ID
と同じです。フリートの Workload Identity Federation for GKE を使用している場合は、クラスタが登録されているフリートのプロジェクト ID です。GSA_NAME
: Artifact Registry への接続に使用するカスタム Google サービス アカウント。このサービス アカウントには、Artifact Registry 読み取り(roles/artifactregistry.reader
)IAM ロールが必要です。KSA_NAME
: Reconciler の Kubernetes サービス アカウント。- ルート リポジトリで、
RootSync
の名前がroot-sync
の場合、root-reconciler
を使用します。それ以外の場合は、root-reconciler-ROOT_SYNC_NAME
を使用します。Google Cloud コンソールまたは Google Cloud CLI を使用して Config Sync をインストールする場合、root-sync
という名前の RootSync オブジェクトが自動的に作成されます。
- ルート リポジトリで、
REPOSITORY
: リポジトリの ID。LOCATION
: リポジトリのリージョンまたはマルチリージョン ロケーション。
Compute Engine のデフォルトのサービス アカウント
Helm チャートを Artifact Registry に保存し、クラスタが Workload Identity Federation for GKE が無効になっている GKE である場合は、認証タイプとして gcenode
を使用できます。Config Sync は Compute Engine のデフォルトのサービス アカウントを使用します。Compute Engine のデフォルト サービス アカウントには、Artifact Registry への読み取りアクセス権を付与する必要があります。
次のコマンドを実行して、Compute Engine サービス アカウントに Artifact Registry への読み取り権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
PROJECT_ID
は組織のプロジェクト ID に置き換え、PROJECT_NUMBER
は組織のプロジェクト番号に置き換えます。
Config Sync に Helm の読み取り専用アクセス権を付与する
Config Sync には、Helm リポジトリに対する読み取り専用権限が必要です。この権限により、Config Sync はリポジトリ内の Helm チャートを読み取り、クラスタ内にインストールできるようになります。
読み取り専用アクセスに対してリポジトリによる認証が不要な場合は、引き続き Config Sync を構成し、認証タイプとして none
を使用できます。たとえば、Helm リポジトリが一般公開されていて、インターネットで誰でもアクセスできる場合は、認証する必要はありません。
ただし、ほとんどのユーザーは公開 Helm リボジトリにアクセスするために、認証情報を作成する必要があります。Config Sync は、次の認証メカニズムに対応しています。
- トークン(
token
) - Kubernetes サービス アカウント(
k8sserviceaccount
) - Google サービス アカウント(
gcpserviceaccount
) - Compute Engine のデフォルトのサービス アカウント(
gcenode
)
トークン
Helm リポジトリのユーザー名とパスワードを使用して Secret を作成します。
kubectl create secret generic SECRET_NAME \
--namespace=config-management-system \
--from-literal=username=USERNAME \
--from-literal=password=PASSWORD
次のように置き換えます。
SECRET_NAME
: Secret に付ける名前。USERNAME
: Helm リポジトリのユーザー名。PASSWORD
: Helm リポジトリのパスワード。
ConfigManagement Operator を構成する場合は、spec.helm.secretRef.name
に選択した Secret 名を使用します。
Kubernetes サービス アカウント
Helm チャートを Artifact Registry に保存し、クラスタで GKE の Workload Identity Federation for GKE またはフリートの Workload Identity Federation for GKE を使用する場合、バージョン 1.17.2 以降で k8sserviceaccount
を認証タイプとして使用できます。このオプションは、構成プロセスが簡素化されているため、gcpserviceaccount
よりも推奨されます。
Workload Identity Federation for GKE プールを使用して、Artifact Registry 読み取り(
roles/artifactregistry.reader
)IAM ロールを Kubernetes サービス アカウントに付与します。Artifact Registry のロールと権限の詳細については、Artifact Registry のロールと権限の構成をご覧ください。同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト全体の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
サービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ固有の権限を付与します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: 組織のプロジェクト ID。FLEET_HOST_PROJECT_ID
: GKE の Workload Identity Federation for GKE を使用している場合は、PROJECT_ID
と同じです。フリートの Workload Identity Federation for GKE を使用している場合は、クラスタが登録されているフリートのプロジェクト ID です。KSA_NAME
: Reconciler の Kubernetes サービス アカウント。- ルート リポジトリで、
RootSync
の名前がroot-sync
の場合、root-reconciler
を使用します。それ以外の場合は、root-reconciler-ROOT_SYNC_NAME
を使用します。
- ルート リポジトリで、
REPOSITORY
: リポジトリの ID。LOCATION
: リポジトリのリージョンまたはマルチリージョン ロケーション。
Google サービス アカウント
Helm チャートを Artifact Registry に保存し、クラスタで GKE の Workload Identity Federation for GKE またはフリートの Workload Identity Federation for GKE を使用する場合は、認証タイプとして gcpserviceaccount
を使用できます。バージョン 1.17.2 以降では、代わりに k8sserviceaccount
を使用することをおすすめします。このオプションを使用すると、Google サービス アカウントと関連する IAM ポリシー バインディングを作成する手順が不要になります。
サービス アカウントがない場合は、サービス アカウントを作成します。
Google サービス アカウントに Artifact Registry 読み取り(
roles/artifactregistry.reader
)IAM ロールを付与します。Artifact Registry のロールと権限の詳細については、Artifact Registry のロールと権限の構成をご覧ください。同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト全体の権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
サービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ固有の権限を付与します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --project=PROJECT_ID
次のコマンドを実行して、Kubernetes サービス アカウントと Google サービス アカウントの IAM ポリシー バインディングを作成します。
gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" --project=PROJECT_ID
次のように置き換えます。
PROJECT_ID
: 組織のプロジェクト ID。FLEET_HOST_PROJECT_ID
: GKE の Workload Identity Federation for GKE を使用している場合は、PROJECT_ID
と同じです。フリートの Workload Identity Federation for GKE を使用している場合は、クラスタが登録されているフリートのプロジェクト ID です。GSA_NAME
: Artifact Registry への接続に使用するカスタム Google サービス アカウント。このサービス アカウントには、Artifact Registry 読み取り(roles/artifactregistry.reader
)IAM ロールが必要です。KSA_NAME
: Reconciler の Kubernetes サービス アカウント。- ルート リポジトリで、
RootSync
の名前がroot-sync
の場合、root-reconciler
を使用します。それ以外の場合は、root-reconciler-ROOT_SYNC_NAME
を使用します。
- ルート リポジトリで、
REPOSITORY
: リポジトリの ID。LOCATION
: リポジトリのリージョンまたはマルチリージョン ロケーション。
Compute Engine のデフォルトのサービス アカウント
Helm チャートを Artifact Registry に保存し、クラスタが Workload Identity Federation for GKE が無効になっている GKE である場合は、認証タイプとして gcenode
を使用できます。Config Sync は Compute Engine のデフォルトのサービス アカウントを使用します。Compute Engine のデフォルト サービス アカウントには、Artifact Registry への読み取りアクセス権を付与する必要があります。イメージを pull するための読み取り専用アクセス権を付与するには、storage-ro
アクセス スコープを付与することが必要な場合があります。
Compute Engine サービス アカウントに Artifact Registry への読み取り権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
PROJECT_ID
は組織のプロジェクト ID に置き換え、PROJECT_NUMBER
は組織のプロジェクト番号に置き換えます。
Config Sync を構成する
このセクションでは、ルート リポジトリの構成を行います。Git リポジトリと同期している場合は、Google Cloud コンソールを使用してインストール プロセスを行い、一部の手順を自動化できます。
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 をインストールするときに、個々のクラスタを選択すると、それらのクラスタがフリートに自動的に登録されます。
- Google Cloud コンソールで、[機能] セクションの [構成] ページに移動します。
- [add Config Sync のインストール] をクリックします。
- [自動アップグレード](プレビュー)を選択して、Config Sync がバージョンを自動的にアップグレードできるようにするか、[手動アップグレード] を選択して Config Sync のバージョンを管理します。自動アップグレードの仕組みについて詳しくは、Config Sync をアップグレードするをご覧ください。
- [インストール オプション] で、次のいずれかのオプションを選択します。
- Install Config Sync on entire fleet(推奨): フリート内のすべてのクラスタに Config Sync がインストールされます。
- Install Config Sync on individual clusters: 選択したすべてのクラスタがフリートに自動的に登録されます。Config Sync はフリート内のすべてのクラスタにインストールされます。
- 個々のクラスタに Config Sync をインストールする場合は、使用可能なクラスタ テーブルで、Config Sync をインストールするクラスタを選択します。
- [Config Sync のインストール] をクリックします。数分後、[設定] タブで、フリート内のクラスタの [ステータス] 列が「有効」になっていることを確認します。
パッケージをデプロイする
クラスタをフリートに登録し、Config Sync をインストールしたら、信頼できる情報源からクラスタにパッケージをデプロイするように Config Sync を構成できます。同じパッケージを複数のクラスタにデプロイする、または異なるパッケージを異なるクラスタにデプロイできます。パッケージ名や同期タイプなどの設定を除き、パッケージはデプロイ後に編集できます。詳細については、パッケージを管理するをご覧ください。
パッケージをデプロイする手順は次のとおりです。
Google Cloud コンソールで Config Sync のダッシュボードに移動します。
[パッケージをデプロイ] をクリックします。
[Select clusters for package deployment] テーブルで、パッケージをデプロイするクラスタを選択し、[続行] をクリックします。
ソースタイプとして [Package hosted on Git] または [Package hosted on OCI] を選択し、[続行] をクリックします。
[Package details] セクションで、パッケージ名を入力します。この名前は RootSync オブジェクトまたは RepoSync オブジェクトを表します。
[同期タイプ] フィールドで、同期タイプとして [クラスタ スコープの同期] または [Namespace スコープの同期] を選択します。
クラスタ スコープの同期では RootSync オブジェクトが作成され、Namespace スコープの同期では RepoSync オブジェクトが作成されます。これらのオブジェクトの詳細については、Config Sync のアーキテクチャをご覧ください。
[ソース] セクションで、次の操作を行います。
Git リポジトリでホストされているソースの場合は、次のフィールドを入力します。
- [リポジトリの URL] に、信頼できる情報源として使用する Git リポジトリの URL を入力します。
- 省略可: [リビジョン] フィールドを更新して、デフォルトの
HEAD
を使用していないかどうかを確認します。 - 省略可: ルート リポジトリから同期しない場合は、[パス] フィールドを更新します。
- 省略可: デフォルトの
main
ブランチを使用していない場合は、[ブランチ] フィールドを更新します。
OCI イメージでホストされているソースの場合は、次のフィールドを入力します。
- [イメージ] に、信頼できる情報源として使用する OCI イメージの URL を入力します。
- [ディレクトリ] に、同期元となるディレクトリのパスをルート ディレクトリからの相対パスとして入力します。
(省略可): [詳細設定] セクションを開いて、次の操作を行います。
認証タイプを選択します。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 のリポジトリにアクセスします。
同期の待機時間を秒単位で入力します。これにより、Config Sync が信頼できる情報源から pull を試みてから再度試行するまでの待機時間が決定されます。
信頼できる情報源との通信時に使用する HTTPS プロキシの Git プロキシ URL を入力します。
[階層] を選択して [ソース形式] を変更します。
ほとんどの場合は、デフォルト値の「Unstructured」をおすすめします。これにより、信頼できる情報源を必要に応じて整理できます。
[パッケージをデプロイ] をクリックします。
Config Sync の [パッケージ] ページにリダイレクトされます。数分後、構成したクラスタの [同期ステータス] 列に「同期済み」と表示されます。
gcloud
続行する前に、クラスタをフリートに登録していることを確認してください。
ConfigManagement
フリート機能を有効にします。gcloud beta container fleet config-management enable
新しい
apply-spec.yaml
マニフェストを作成するか、既存のマニフェストを使用して、構成を準備します。既存のマニフェストを使用すると、別のクラスタで使用されているものと同じ設定でクラスタを構成できます。新しいマニフェストを作成する
クラスタ用の新しい設定で Config Sync を構成するには、
apply-spec.yaml
という名前のファイルを作成して次の YAML ファイルをコピーします。マニフェストを作成するときに、必要な
spec.configSync
オプション フィールドをすべて設定して、後でkubectl
コマンドを使用して構成を行うことができます。また、spec.configSync.enabled
フィールドをtrue
に設定して、オプション フィールドを省略することもできます。後でkubectl
コマンドを使用して追加の RootSync オブジェクトを作成できます。また、後でkubectl
コマンドで完全に管理できる RepoSync を作成することもできます。# apply-spec.yaml applySpecVersion: 1 spec: # upgrades: UPGRADE_SETTING configSync: # Set to true to install and enable Config Sync 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 syncBranch: BRANCH secretType: SECRET_TYPE gcpServiceAccountEmail: EMAIL metricsGcpServiceAccountEmail: METRICS_EMAIL policyDir: DIRECTORY preventDrift: PREVENT_DRIFT
次のように置き換えます。
(プレビュー)
UPGRADE_SETTING
: Config Sync が自動的にアップグレードされるように構成するには、フィールドのコメントを解除してauto
に設定します。Config Sync を手動でアップグレードするには、manual
に設定します。デフォルト値はmanual
です。このフラグは、GKE on Google Cloud クラスタでのみサポートされています。このフィールドを使用するには、gcloud components update
を実行して gcloud CLI の更新が必要になる場合があります。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-samples
secretType
として SSH を使用する場合は、SSH プロトコルを使用して URL を入力します。このフィールドは必須です。プロトコルを入力しない場合、URL は HTTPS URL として扱われます。OCI URL の形式は
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME
です。デフォルトでは、イメージはlatest
タグから取得されますが、TAG
またはDIGEST
を使用してイメージを pull することもできます。PACKAGE_NAME
でTAG
または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 リビジョン(タグまたはハッシュ)。このフィールドは省略可能で、デフォルト値はHEAD
です。Config Sync バージョン 1.17.0 以降では、syncRev
フィールドにブランチ名を指定することもできます。バージョン 1.17.0 以降のハッシュを使用する場合、省略形ではなく、完全なハッシュにする必要があります。BRANCH
: 同期元となるリポジトリのブランチ。このフィールドは省略可能です。デフォルトはmaster
です。Config Sync バージョン 1.17.0 以降では、わかりやすくするため、syncRev
フィールドを使用してブランチ名を指定することをおすすめします。syncRev
フィールドとsyncBranch
フィールドの両方が指定されている場合、syncRev
がsyncBranch
よりも優先されます。SECRET_TYPE
: 以下のsecretTypes
のいずれかです。git
none
: 認証なし。ssh
: SSH 認証鍵ペアを使用。cookiefile
:cookiefile
を使用。token
: トークンを使用。gcpserviceaccount
: Google サービス アカウントを使用して Cloud Source Repositories にアクセス。この認証タイプを選択した場合は、Config Sync の構成を完了した後に IAM ポリシー バインディングを作成する必要があります。詳しくは、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 ロールが必要です。Namespaceconfig-management-monitoring
の Kubernetes ServiceAccountdefault
は、GSA にバインドされている必要があります。DIRECTORY
: 同期元となるディレクトリのパスであり、Git リポジトリのルートからの相対パス。指定したディレクトリのすべてのサブディレクトリがクラスタと同期されます。デフォルト値は、リポジトリのルート ディレクトリです。PREVENT_DRIFT
:true
に設定されている場合、Config Sync アドミッション Webhook を有効にして、競合変更がライブクラスタに push されないように拒否することにより、ブレを防止します。デフォルトの設定はfalse
です。Config Sync は、このフィールドの値に関係なく、常にブレを修正します。
spec
フィールドに追加できるフィールドの一覧については、gcloud フィールドをご覧ください。既存のマニフェストを使用する
別のクラスタで使用されている同じ設定でクラスタを構成するには、登録済みクラスタから設定を取得します。
gcloud alpha container fleet config-management fetch-for-apply \ --membership=MEMBERSHIP_NAME \ --project=PROJECT_ID \ > CONFIG_YAML_PATH
次のように置き換えます。
MEMBERSHIP_NAME
: 使用する Config Sync 設定になっている登録済みクラスタのメンバーシップ名PROJECT_ID
: プロジェクト IDCONFIG_YAML_PATH
: クラスタから取得した設定を含むapply-spec.yaml
ファイルのパス
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
resource "google_container_cluster" "cluster" {
name = "EXISTING_CLUSTER_NAME"
location = "EXISTING_CLUSTER_LOCATION"
}
resource "google_gke_hub_membership" "membership" {
membership_id = "MEMBERSHIP_ID"
endpoint {
gke_cluster {
resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
}
}
}
resource "google_gke_hub_feature" "feature" {
name = "configmanagement"
location = "global"
}
resource "google_gke_hub_feature_membership" "feature_member" {
location = "global"
feature = google_gke_hub_feature.feature.name
membership = google_gke_hub_membership.membership.membership_id
configmanagement {
version = "VERSION"
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"
}
}
}
}
次のように置き換えます。
EXISTING_CLUSTER_NAME
: 既存のクラスタの名前。EXISTING_CLUSTER_LOCATION
: 既存のクラスタのロケーション。MEMBERSHIP_ID
: メンバーシップ バインディング ID。VERSION
: (省略可)Config Sync のバージョン番号。バージョン 1.17.0 以降に設定する必要があります。空白のままにすると、デフォルトで最新バージョンが使用されます。REPO
: 構成ファイルを含むリポジトリの URL。BRANCH
: リポジトリ ブランチ。例:main
DIRECTORY
: 同期するリポジトリの最上位レベルを表す Git リポジトリ内のパス。SECRET
: Secret 認証タイプ。
oci
resource "google_container_cluster" "cluster" {
name = "EXISTING_CLUSTER_NAME"
location = "EXISTING_CLUSTER_LOCATION"
}
resource "google_gke_hub_membership" "membership" {
membership_id = "MEMBERSHIP_ID"
endpoint {
gke_cluster {
resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
}
}
}
resource "google_gke_hub_feature" "feature" {
name = "configmanagement"
location = "global"
}
resource "google_gke_hub_feature_membership" "feature_member" {
location = "global"
feature = google_gke_hub_feature.feature.name
membership = google_gke_hub_membership.membership.membership_id
configmanagement {
version = "VERSION"
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"
}
}
}
}
次のように置き換えます。
EXISTING_CLUSTER_NAME
: 既存のクラスタの名前。EXISTING_CLUSTER_LOCATION
: 既存のクラスタのロケーション。MEMBERSHIP_ID
: メンバーシップ バインディング ID。VERSION
: (省略可)Config Sync のバージョン番号。空白のままにすると、デフォルトで最新バージョンが使用されます。REPO
: 構成ファイルを含む OCI イメージ リポジトリの URL。DIRECTORY
: 同期するリソースを含むディレクトリの絶対パス。ルート ディレクトリを使用する場合は空白のままにします。SECRET
: Secret 認証タイプ。
同期するクラスタごとに、この手順を繰り返します。
ルート リポジトリの構成が完了したら、必要に応じて、他のルート リポジトリや Namespace リポジトリなど、複数のリポジトリからの同期を構成することもできます。Namespace リポジトリは、クラスタ全体で特定の Namespace に同期される Namespace スコープの構成ファイルを 1 つのリポジトリに保存する場合に役立ちます。
フリートレベルのデフォルトを構成する
Google Kubernetes Engine(GKE)Enterprise エディションを有効にしている場合は、Config Sync を有効にして、クラスタのフリートレベルのデフォルトとして構成できます。つまり、フリートで作成された Google Cloud クラスタ上の新しい GKE では、指定した設定のクラスタで Config Sync が有効になります。フリートのデフォルト構成の詳細については、フリートレベルの機能を管理するをご覧ください。
Google Cloud コンソールのみを使用する場合は、クラスタで Config Sync をデフォルトで有効にし、フリートの Config Sync バージョンを設定できます。gcloud CLI または Terraform を使用する場合は、クラスタで Config Sync をデフォルトで有効にし、フリートの Config Sync バージョンを設定して、Git リポジトリまたは OCI イメージ リポジトリへの接続を設定できます。
Config Sync のフリートレベルのデフォルトを構成する手順は次のとおりです。
gcloud
機能の enable
コマンドを実行し、個々のクラスタで Config Sync を構成したときに作成した apply-spec.yaml
構成ファイルを渡します。
gcloud beta container fleet config-management enable \
--fleet-default-member-config=apply-spec.yaml
このコマンドを使用すると、フリートのデフォルト設定をいつでも更新できます。フリートのデフォルト設定を更新する場合は、既存のクラスタをデフォルト設定に再同期する必要があります。
コンソール
Google Cloud コンソールで、[機能マネージャー] ページに移動します。
[Config Sync] ペインで、[構成] をクリックします。
フリートレベルの設定を確認します。フリートで作成した新しいクラスタは、これらの設定を継承します。
省略可: デフォルトの設定を変更するには、[フリートの設定をカスタマイズ] をクリックします。表示されるダイアログで、次の操作を行います。
Config Sync のバージョンを自動的にアップグレードするには、[自動アップグレード](プレビュー)を選択します。または、Config Sync のバージョンを管理するには、[手動アップグレード] を選択します。自動アップグレードの仕組みについて詳しくは、Config Sync をアップグレードするをご覧ください。
[手動アップグレード] を選択した場合は、[バージョン] リストで、使用する Config Sync のバージョンを選択します。
[保存] をクリックします。
[構成] をクリックします。
[フリートの設定を構成] 確認ダイアログで、[確認] をクリックします。以前に Config Sync を有効にしていない場合は、[確認] をクリックして
anthosconfigmanagement.googleapis.com
API を有効にします。
Terraform
フリートのデフォルト構成の Terraform ファイル用にディレクトリを作成します。このディレクトリに、Config Sync の設定を行う次のリソースを含む
main.tf
ファイルを追加します。git
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = "PROJECT_ID" } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" git { sync_repo = "REPO" sync_branch = "BRANCH" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
次のように置き換えます。
PROJECT_ID
: フリート ホスト プロジェクト ID。VERSION
: (省略可)Config Sync のバージョン番号。空白のままにすると、デフォルトで最新バージョンが使用されます。REPO
: 構成ファイルを含むリポジトリの URL。BRANCH
: リポジトリ ブランチ。例:main
DIRECTORY
: 同期するリポジトリの最上位レベルを表す Git リポジトリ内のパス。SECRET
: Secret 認証タイプ。
Config Sync の
git
ブロックでサポートされている設定の一覧については、GKE Hub 機能の Terraform リファレンス ドキュメントをご覧ください。OCI
terraform { required_providers { google = { source = "hashicorp/google" version = ">=5.16.0" } } } provider "google" { project = "PROJECT_ID" } resource "google_gke_hub_feature" "feature" { name = "configmanagement" location = "global" provider = google fleet_default_member_config { configmanagement { version = "VERSION" config_sync { source_format = "unstructured" oci { sync_repo = "REPO" policy_dir = "DIRECTORY" secret_type = "SECRET" } } } } }
次のように置き換えます。
PROJECT_ID
: フリート ホスト プロジェクト ID。VERSION
: Config Sync のバージョン番号。バージョン 1.17.0 以降に設定する必要があります。空白のままにすると、デフォルトで最新バージョンが使用されます。REPO
: 構成ファイルを含む OCI イメージ リポジトリの URL。DIRECTORY
: 同期するリソースを含むディレクトリの絶対パス。ルート ディレクトリを使用する場合は空白のままにします。SECRET
: Secret 認証タイプ。
Config Sync の
oci
ブロックでサポートされている設定の一覧については、GKE Hub 機能の Terraform リファレンス ドキュメントをご覧ください。作成したディレクトリで Terraform を初期化します。
terraform init
Terraform で示した変更が、想定されているプランと一致していることを確認します。
terraform plan
フリート メンバーのデフォルト構成を作成します。
terraform apply
既存のクラスタを更新してデフォルトの Config Sync 設定を使用するには、Google Cloud コンソールまたは gcloud CLI を使用して、選択したフリート クラスタをフリートのデフォルトに同期します。また、Config Sync の構成の手順に沿って、Terraform を使用して同じ設定で各クラスタを手動で構成することもできます。以前に Terraform を使用してフリートのデフォルトを指定した場合は、デフォルトの設定に使用したものと同じ configmanagement
と config_sync
ブロックを使用して、選択したクラスタを構成します。
Config Sync のデフォルト設定をフリート全体で同期する手順は次のとおりです。
gcloud
既存のメンバーシップをフリートのデフォルト構成に同期します。
gcloud beta container fleet config-management apply \ --origin=FLEET \ --membership=MEMBERSHIP_NAME
MEMBERSHIP_NAME
は、フリートのデフォルト構成と同期するクラスタのメンバーシップ名に置き換えます。メンバーシップの構成がフリートのデフォルトと同期されていることを確認します。
gcloud beta container fleet config-management status
このコマンドの出力には、同期したメンバーシップの
Synced_to_Fleet_Default
ステータスがYes
と表示されます。
コンソール
機能マネージャーに移動します。
クラスタの表で、フリートの設定に同期するクラスタを選択します。
[フリートの設定に同期] をクリックします。
Config Sync のデフォルト設定をフリート全体で無効にする手順は次のとおりです。
フリートのデフォルト構成を無効にするには、次のコマンドを実行します。
gcloud beta container fleet config-management disable --fleet-default-member-config
フリートのデフォルト構成が無効になっていることを確認します。
gcloud beta container fleet config-management status
選択したクラスタには、Config Sync のデフォルト設定が適用されます。Google Cloud コンソールに表示される設定は、Config Sync バージョンのように設定のサブセットのみですが、すべてのフリートレベルの設定がクラスタに同期されます。たとえば、Terraform または gcloud CLI を使用して Git リポジトリに同期するように Config Sync を構成した場合、その設定はクラスタに同期されますが、Google Cloud コンソールには表示されません。
インストールを確認する
Config Sync をインストールして構成したら、インストールが正常に完了したことを確認します。
コンソール
次の操作を行います。
- Google Cloud コンソールで、[機能] セクションの [構成] ページに移動します。
- [パッケージ] タブで、クラスタ テーブルの [同期ステータス] 列を確認します。Config Sync が正常にインストールされると、ステータスは「インストール済み」になります。正常に構成されている信頼できる情報源のステータスは「同期済み」になります。
gcloud
次のコマンドを実行します。
gcloud beta container fleet config-management status \
--project=PROJECT_ID
PROJECT_ID
はプロジェクトの ID に置き換えます。
インストールに成功すると、ステータスは SYNCED
になります。Config Sync のバージョン 1.18.0 以降では、インストールされている Config Sync のバージョンと Config Sync のアップグレード設定も出力に表示されます。
上のコマンドを実行した後にエラーが表示された場合は、git-creds
Secret が作成されていることを確認してください。Secret が作成されている場合は、次のコマンドをもう一度実行してみてください。
gcloud beta container fleet config-management apply
nomos status
コマンドを使用して、Config Sync が正常にインストールされたかどうかを確認することもできます。問題のない有効なインストールのステータスは PENDING
または SYNCED
です。無効なインストール、または不完全なインストールのステータスは NOT INSTALLED
または NOT CONFIGURED
です。出力には、報告済みのエラーも含まれます。
ロールベース アクセス制御(RBAC)と権限
Config Sync には高い権限のワークロードが含まれています。次の表に、これらのワークロードの権限を示します。
コンポーネント | Namespace | サービス アカウント | 権限 | 説明 |
---|---|---|---|---|
ConfigManagement Operator | config-management-system |
config-management-operator |
cluster-admin | ConfigManagement Operator は、この表にある他のコンポーネントをインストールします。これらのコンポーネントの一部には cluster-admin 権限が必要なため、ConfigManagement Operator にもこれらの権限が必要です。 |
Config Sync | config-management-system |
必要な権限については、Config Sync の権限をご覧ください。 |
リソース リクエスト
次のセクションでは、Config Sync のリソース リクエストについて説明します。
次の表に、Config Sync コンポーネントの Kubernetes リソースの要件を示します。詳細については、Kubernetes ドキュメントのコンテナのリソース管理をご覧ください。
リストにあるコンポーネントがすべて作成されるわけではありません。次の条件により、各コンポーネントがスケジュール設定されます。
- Config Sync を有効にすると、
config-management-operator
がインストールされます。 - Config Sync を有効にすると、
reconciler-manager
がインストールされます。 - ドリフト防止が有効になっている場合
admission-webhook
がインストールされます。 - RootSync と RepoSync ごとに
reconciler
がインストールされます。 - Config Sync を有効にすると、
otel-collector
がインストールされます。
これらのコンポーネントの詳細については、Config Sync のアーキテクチャをご覧ください。
1.18
Deployment 名 | レプリカあたりの CPU リクエスト(m) | レプリカあたりのメモリ リクエスト(Mi) |
---|---|---|
config-management-operator |
100 | 200 |
resource-group-controller-manager |
110 | 300 |
admission-webhook1 |
10 | 100 |
otel-collector |
200 | 400 |
reconciler-manager |
20 | 150 |
reconciler (RootSync と RepoSync ごとに 1 つ) |
詳細については、Reconciler のデプロイをご覧ください。 |
1 アドミッション Webhook には 2 つのレプリカがあります。そのため、アドミッション Webhook を使用している場合は、リソース リクエスト合計を計算する際に値を倍にする必要があります。アドミッション Webhook はデフォルトで無効になっています。
1.17
Deployment 名 | レプリカあたりの CPU リクエスト(m) | レプリカあたりのメモリ リクエスト(Mi) |
---|---|---|
config-management-operator |
100 | 200 |
resource-group-controller-manager |
110 | 300 |
admission-webhook1 |
10 | 100 |
otel-collector |
200 | 400 |
reconciler-manager |
20 | 150 |
reconciler (RootSync と RepoSync ごとに 1 つ) |
詳細については、Reconciler のデプロイをご覧ください。 |
1 アドミッション Webhook には 2 つのレプリカがあります。そのため、アドミッション Webhook を使用している場合は、リソース リクエスト合計を計算する際に値を倍にする必要があります。アドミッション Webhook はデフォルトで無効になっています。
1.16
Deployment 名 | レプリカあたりの CPU リクエスト(m) | レプリカあたりのメモリ リクエスト(Mi) |
---|---|---|
config-management-operator |
100 | 200 |
resource-group-controller-manager |
110 | 300 |
admission-webhook1 |
10 | 100 |
otel-collector |
200 | 400 |
reconciler-manager |
20 | 150 |
reconciler (RootSync と RepoSync ごとに 1 つ) |
詳細については、Reconciler のデプロイをご覧ください。 |
1 アドミッション Webhook には 2 つのレプリカがあります。そのため、アドミッション Webhook を使用している場合は、リソース リクエスト合計を計算する際に値を倍にする必要があります。アドミッション Webhook はデフォルトで無効になっています。
Reconciler Deployment
Config Sync は、RootSync
オブジェクトと RepoSync
オブジェクトごとに、同期を処理する独立した Reconciler Deployment を作成します。Reconciler Deployment は複数のコンテナで構成されます。これらのコンテナの詳細については、Reconciler コンテナをご覧ください。
Config Sync バージョン 1.17.0 以降では、Reconciler のデフォルトのリソース リクエストが Standard クラスタと Autopilot クラスタで異なります。他のすべてのクラスタタイプは Standard のデフォルトを使用します。
Standard クラスタ
1.18
コンテナ名 | CPU リクエスト(m) | メモリ リクエスト(Mi) |
---|---|---|
reconciler |
50 | 200 |
otel-agent |
10 | 100 |
hydration-controller (省略可) |
10 | 100 |
git-sync |
10 | 16 |
gcenode-askpass-sidecar (省略可) |
10 | 20 |
helm-sync |
75 | 128 |
oci-sync |
25 | 32 |
1.17
コンテナ名 | CPU リクエスト(m) | メモリ リクエスト(Mi) |
---|---|---|
reconciler |
50 | 200 |
otel-agent |
10 | 100 |
hydration-controller (省略可) |
10 | 100 |
git-sync |
10 | 16 |
gcenode-askpass-sidecar (省略可) |
10 | 20 |
helm-sync |
75 | 128 |
oci-sync |
25 | 32 |
1.16
コンテナ名 | CPU リクエスト(m) | メモリ リクエスト(Mi) |
---|---|---|
reconciler |
50 | 200 |
otel-agent |
10 | 100 |
hydration-controller (省略可) |
10 | 100 |
git-sync |
10 | 200 |
gcenode-askpass-sidecar (省略可) |
10 | 20 |
helm-sync |
50 | 256 |
oci-sync |
10 | 200 |
Autopilot クラスタ
1.18
コンテナ名 | CPU リクエストと上限(m) | メモリ リクエストと上限(Mi) |
---|---|---|
reconciler |
700 | 512 |
otel-agent |
10 | 64 |
hydration-controller (省略可) |
200 | 256 |
git-sync |
20 | 32 |
gcenode-askpass-sidecar (省略可) |
50 | 64 |
helm-sync |
250 | 384 |
oci-sync |
50 | 64 |
1.17
コンテナ名 | CPU リクエストと上限(m) | メモリ リクエストと上限(Mi) |
---|---|---|
reconciler |
700 | 512 |
otel-agent |
10 | 64 |
hydration-controller (省略可) |
200 | 256 |
git-sync |
20 | 32 |
gcenode-askpass-sidecar (省略可) |
50 | 64 |
helm-sync |
150 | 256 |
oci-sync |
50 | 64 |
1.16
1.17.0 より前のバージョンの Config Sync では、Standard と Autopilot のリソース リクエストは同じです。
デフォルトのリソース リクエストと上限をオーバーライドする方法については、リソースのオーバーライドをご覧ください。
バンドルされている Helm と Kustomize のバージョン
Config Sync は、実行可能ファイル Helm と Kustomize を利用して、内部で構成をレンダリングします。次の表に、レンダリング機能をサポートする Config Sync のバージョンと、バンドルされている Helm と Kustomize のバージョンを示します。
Config Sync のバージョン | Helm のバージョン | Kustomize のバージョン |
---|---|---|
1.18.0 | v3.14.3 | v5.3.0 |
1.17.1、1.17.3 | v3.13.3 | v5.3.0 |
1.16.3、1.17.0 | v3.13.1 | v5.1.1 |
1.16.1、1.16.2 | v3.12.3 | v5.1.1 |
1.16.0 | v3.12.2 | v5.1.1 |
1.15.3 | v3.12.2 | v5.1.0 |
1.15.1~1.15.2 | v3.11.3 | v5.0.3 |
1.15.0 | v3.11.3 | v5.0.1 |
1.11.0~1.14.3 | v3.6.3 | v4.5.2 |
Kustomize で Helm をレンダリングする方法については、Kustomize で Kubernetes を構成するをご覧ください。Helm API の使用については、Artifact Registry から Helm チャートを同期するをご覧ください。
次のステップ
- Config Sync をアップグレードする方法を確認する。
- Config Sync の構成用の
gcloud
コマンドの詳細を確認する。 - 複数のリポジトリからの同期を構成する方法を確認する。
nomos
コマンドを使用する。- Config Sync のトラブルシューティングの概要を読む。
- Config Sync をアンインストールする方法を確認する。
- デフォルトの Config Sync 権限を確認する。