Config Controller を設定する
このページでは、Config Controller を設定する方法を説明します。Config Controller は、Anthos リソースと Google Cloud リソースをプロビジョニングし、オーケストレートするホスト型サービスです。Anthos Config Management の一部として、Google Cloud リソースのプロビジョニング、有効化、オーケストレートを行える API エンドポイントが用意されています。Config Controller に関するさらに詳しい内容ついては、Config Controller の概要をご覧ください。
始める前に
Config Controller を設定するにあたり、次の手順を完了する必要があります。
この手順で使用する
gcloud
、kubectl
、nomos
コマンドを含む Google Cloud CLI をインストールして初期化します。Cloud Shell を使用する場合は、Google Cloud CLI がプリインストールされています。kubectl
は、デフォルトでは Google Cloud CLI によってインストールされません。kubectl
をインストールするには、次のコマンドを実行します。gcloud components install kubectl
Config Controller がホストされる Google Cloud プロジェクトを設定します。
export PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
PROJECT_ID
は、Config Controller がホストされる Google Cloud プロジェクトに置き換えます。プロジェクトにデフォルト ネットワークがない場合は、次のコマンドを実行して作成します。
gcloud compute networks create default --subnet-mode=auto
または、Config Controller を設定するときに、
gcloud anthos config controller create
コマンドで--network
フラグを使用して別のネットワークを選択できます。
Config Controller を設定する
次の gcloud CLI コマンドを使用して Config Controller を作成します。
後続の gcloud CLI コマンドを使用するために、プロジェクトでサービスを有効にします。
gcloud services enable krmapihosting.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
Config Controller を作成します。このオペレーションには 15 分以上かかることがあります。
gcloud anthos config controller create CONFIG_CONTROLLER_NAME \ --location=LOCATION
次のように置き換えます。
CONFIG_CONTROLLER_NAME
: コントローラに付ける名前。LOCATION
:us-central1
、us-east1
、northamerica-northeast1
、europe-north1
、australia-southeast1
、またはasia-northeast1
を追加します。他のリージョンはサポートされていません。
--man-block
などのオプションのパラメータを設定できます。これにより、CIDR 範囲を指定して、それらの範囲内の IP アドレスに Kubernetes コントロール プレーンへのアクセスを許可することで、セキュリティを強化できます。オプションの完全なリストについては、gcloud anthos config controller create
のドキュメントをご覧ください。インスタンスが作成されると、インスタンスのリストに表示されます。インスタンスの一覧を表示するには、次のコマンドを実行します。
gcloud anthos config controller list --location=LOCATION
マニフェストを適用するには、インスタンスで認証します。
gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \ --location LOCATION
プロジェクト内の Google Cloud リソースを管理する権限を Config Controller に付与します。
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)" gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project "${PROJECT_ID}"
Config Controller のアップグレード
Config Controller はマネージド サービスであるため、Google が自動的にアップグレードします。対象バージョンと新機能の詳細については、Config Controller リリースノートをご覧ください。
Config Controller を使用して Google Cloud リソースを管理する
Config Controller をセットアップすると、Config Connector を活用して、Kubernetes ツールと API を使用して多くの Google Cloud サービスとリソースを管理できます。管理できるリソースの一覧については、Config Connector リソースをご覧ください。
この例では、GitOps を設定するセクションで使用できる Cloud Source Repositories でリポジトリを作成します。
service.yaml
という名前のファイルを作成して、次の YAML ファイルをコピーします。# service.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: sourcerepo.googleapis.com namespace: config-control
マニフェストを適用して、Cloud Source Repositories が有効になるまで待ちます。
kubectl apply -f service.yaml kubectl wait -f service.yaml --for=condition=Ready
repo.yaml
という名前のファイルを作成して、次の YAML ファイルをコピーします。# repo.yaml apiVersion: sourcerepo.cnrm.cloud.google.com/v1beta1 kind: SourceRepoRepository metadata: name: REPO_NAME namespace: config-control
REPO_NAME
は、Cloud Source Repositories の任意の名前に置き換えます。リポジトリを作成するには、マニフェストを適用します。
kubectl apply -f repo.yaml
GitOps を設定する
Git リポジトリ内の構成は、Config Sync を使用して Config コントローラに同期できます。このセクションの例では、前のセクションで作成した Cloud Source Repositories を使用します。
gitops-iam.yaml
という名前のファイルを作成して、次の YAML ファイルをコピーします。# gitops-iam.yaml apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMServiceAccount metadata: name: config-sync-sa namespace: config-control spec: displayName: ConfigSync --- apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: config-sync-wi namespace: config-control spec: member: serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/root-reconciler] role: roles/iam.workloadIdentityUser resourceRef: apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMServiceAccount name: config-sync-sa --- apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: allow-configsync-sa-read-csr namespace: config-control spec: member: serviceAccount:config-sync-sa@PROJECT_ID.iam.gserviceaccount.com role: roles/source.reader resourceRef: apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1 kind: Project external: projects/PROJECT_ID
PROJECT_ID は、Config コントローラが実行されているプロジェクト ID に置き換えます。
Config Sync にリポジトリへのアクセスを許可するには、マニフェストを適用します。
kubectl apply -f gitops-iam.yaml
Config Sync を使用してリポジトリ内の構成を Config Controller に同期するには、
config-management.yaml
という名前のファイルを作成して、次のテキストを貼り付けます。# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: enableMultiRepo: true enableLegacyFields: true policyController: enabled: true clusterName: krmapihost-CONFIG_CONTROLLER_NAME git: policyDir: REPO_PATH secretType: gcpserviceaccount gcpServiceAccountEmail: config-sync-sa@PROJECT_ID.iam.gserviceaccount.com syncBranch: REPO_BRANCH syncRepo: https://source.developers.google.com/p/PROJECT_ID/r/REPO_NAME sourceFormat: unstructured
次のように置き換えます。
CONFIG_CONTROLLER_NAME
: Config Controller の名前。REPO_PATH
: 同期元となるディレクトリのパスであり、Git リポジトリのルートからの相対パス。デフォルト値は/
です。PROJECT_ID
: サービス アカウントと Git リポジトリを含むプロジェクトの ID。REPO_BRANCH
: 同期元となるリポジトリのブランチ。デフォルト値はmaster
です。REPO_NAME
: 構成を pull して変更を監視する Git リポジトリの名前。config-management.yaml
のフィールドの詳細については、ConfigManagement フィールドをご覧ください。
Config Sync の構成を作成するには、マニフェストを適用します。
kubectl apply -f config-management.yaml
CRD が見つからないというエラー(
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "rootsyncs.configsync.gke.io" not found
)が返されることがあります。このエラーを解決するには、次のコマンドを実行して、CRD のRootSync
とRepoSync
が使用可能になるまで待ちます。until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; \ do date; sleep 1; echo ""; done
成功を検証する
初期設定は、次の手順で確認できます。
Config Controller で、すべてのコントローラが正常に設定されていることを確認します。
kubectl wait pod --all --all-namespaces --for=condition=Ready
nomos
コマンドまたはgcloud alpha anthos config sync repo
コマンドを使用して、Git リポジトリが Config Sync を使用して Config Controller と同期されていることを確認します。nomos status --contexts $(kubectl config current-context) # or gcloud alpha anthos config sync repo list --targets config-controller
Config Controller を削除する
Config Controller の使用を停止する場合は、作成したすべてのリソースをクリーンアップする必要があります。まず、Config Controller からリソースを削除した後、Config Controller 自体を削除する必要があります。
はじめにプロビジョニングされたリソースを削除せず Config Controller を削除すると、リソースは放棄された状態で残ります。そうしたリソースは Google Cloud に存在し続けます(課金もされます)が、宣言型の構成では管理されません。
すべてのリソースが削除されたら、gcloud CLI を使用して Config Controller を削除できます。
gcloud anthos config controller delete --location=LOCATION CONFIG_CONTROLLER_NAME
本番環境に関する考慮事項
本番環境に移行する前に、Config Controller の高可用性に関する考慮事項を確認してください。
次のステップ
- Config Controller のトラブルシューティング
- Config Controller で使用する既存の Google Cloud リソースがある場合は、リソースのインポートとエクスポートをご覧ください。
- Config Sync を使用した構成とポリシーのデプロイの詳細を確認する。
- Policy Controller によるポリシーの適用の詳細を確認する。
- ブループリントを使用して特定のソリューションを実装する方法を確認する(複数のプロジェクトを管理するための Config Controller の設定など)。