Config Controller を設定する

このページでは、Config Controller を設定する方法を説明します。Config Controller は、Anthos リソースと Google Cloud リソースをプロビジョニングし、オーケストレートするホスト型サービスです。Anthos Config Management の一部として、Google Cloud リソースのプロビジョニング、有効化、オーケストレートを行える API エンドポイントが用意されています。Config Controller に関するさらに詳しい内容ついては、Config Controller の概要をご覧ください。

始める前に

Config Controller を設定するにあたり、次の手順を完了する必要があります。

  1. この手順で使用する gcloudkubectlnomos コマンドを含む Google Cloud CLI をインストールして初期化します。Cloud Shell を使用する場合は、Google Cloud CLI がプリインストールされています。

    kubectl は、デフォルトでは Google Cloud CLI によってインストールされません。kubectl をインストールするには、次のコマンドを実行します。

    gcloud components install kubectl
    
  2. Config Controller がホストされる Google Cloud プロジェクトを設定します。

    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

    PROJECT_ID は、Config Controller がホストされる Google Cloud プロジェクトに置き換えます。

  3. プロジェクトにデフォルト ネットワークがない場合は、次のコマンドを実行して作成します。

    gcloud compute networks create default --subnet-mode=auto
    

    または、Config Controller を設定するときに、gcloud anthos config controller create コマンドで --network フラグを使用して別のネットワークを選択できます。

Config Controller を設定する

次の gcloud CLI コマンドを使用して Config Controller を作成します。

  1. 後続の gcloud CLI コマンドを使用するために、プロジェクトでサービスを有効にします。

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com
    
  2. Config Controller を作成します。このオペレーションには 15 分以上かかることがあります。

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION
    

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

    • CONFIG_CONTROLLER_NAME: コントローラに付ける名前。
    • LOCATION: us-central1us-east1northamerica-northeast1europe-north1australia-southeast1、またはasia-northeast1を追加します。他のリージョンはサポートされていません。

    --man-block などのオプションのパラメータを設定できます。これにより、CIDR 範囲を指定して、それらの範囲内の IP アドレスに Kubernetes コントロール プレーンへのアクセスを許可することで、セキュリティを強化できます。オプションの完全なリストについては、gcloud anthos config controller create のドキュメントをご覧ください。

  3. インスタンスが作成されると、インスタンスのリストに表示されます。インスタンスの一覧を表示するには、次のコマンドを実行します。

    gcloud anthos config controller list --location=LOCATION
    
  4. マニフェストを適用するには、インスタンスで認証します。

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    
  5. プロジェクト内の 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 でリポジトリを作成します。

  1. service.yaml という名前のファイルを作成して、次の YAML ファイルをコピーします。

    # service.yaml
    
    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sourcerepo.googleapis.com
      namespace: config-control
    
  2. マニフェストを適用して、Cloud Source Repositories が有効になるまで待ちます。

    kubectl apply -f service.yaml
    kubectl wait -f service.yaml --for=condition=Ready
    
  3. 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 の任意の名前に置き換えます。

  4. リポジトリを作成するには、マニフェストを適用します。

    kubectl apply -f repo.yaml
    

GitOps を設定する

Git リポジトリ内の構成は、Config Sync を使用して Config コントローラに同期できます。このセクションの例では、前のセクションで作成した Cloud Source Repositories を使用します。

  1. 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 に置き換えます。

  2. Config Sync にリポジトリへのアクセスを許可するには、マニフェストを適用します。

    kubectl apply -f gitops-iam.yaml
    
  3. 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 フィールドをご覧ください。

  4. Config Sync の構成を作成するには、マニフェストを適用します。

    kubectl apply -f config-management.yaml
    

    CRD が見つからないというエラー(Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "rootsyncs.configsync.gke.io" not found)が返されることがあります。このエラーを解決するには、次のコマンドを実行して、CRD の RootSyncRepoSync が使用可能になるまで待ちます。

    until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; \
    do date; sleep 1; echo ""; done
    

成功を検証する

初期設定は、次の手順で確認できます。

  1. Config Controller で、すべてのコントローラが正常に設定されていることを確認します。

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    
  2. 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 の高可用性に関する考慮事項を確認してください。

次のステップ