クイックスタート: リポジトリから構成ファイルを同期する

このチュートリアルでは、Google Kubernetes Engine(GKE)Enterprise エディションのクラスタを作成し、Config Sync を使用してマルチリポジトリ サンプル リポジトリの構成ファイルを同期します。

たとえば、コンプライアンス チームは、組織内の全員が内部ルールに従うようにすることが任務であるとします。その内部ルールを適用するために、コンプライアンス チームでは、構成ファイルを作成して、サンプル リポジトリに追加しました。組織内の各クラスタは、そのリポジトリと同期する必要があり、お客様がクラスタの作成と同期を担当しているとします。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Make sure that you have the following role or roles on the project: GKE Hub Admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [ アクセスを許可] をクリックします。
    4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

    5. [ロールを選択] リストでロールを選択します。
    6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
    7. [保存] をクリックします。

    クラスタを作成する

    このセクションでは、このチュートリアルで使用できるクラスタを作成します。実際には、複数のクラスタを管理することをおすすめしますが、このチュートリアルでは、クラスタを 1 つだけ作成して管理します。

    デプロイを作成するには、次の手順を完了します。

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

      Google Kubernetes Engine に移動

    2. GKE を初めて使用する場合は、[有効にする] をクリックして Kubernetes Engine API を有効にします。

    3. [ 作成] をクリックします。

    4. [Autopilot] セクションで、[構成] を選択します。

    5. [クラスタの基本] セクションで、[名前] フィールドに「cs-cluster」を入力します。他のフィールドはすべてデフォルト値のままにします。

    6. [作成] をクリックします。[Kubernetes クラスタ] ページが表示されます。クラスタの作成には数分かかります。クラスタの横にある [ステータス] 列に緑色のチェックマークが表示されたら、準備完了です。

    クラスタを構成する

    クラスタが作成されたため、サンプル リポジトリの config-sync-quickstart ディレクトリの構成ファイルと同期するように Config Sync を構成できます。

    Google Cloud コンソールで 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. [リポジトリの URL] フィールドに「https://github.com/GoogleCloudPlatform/anthos-config-management-samples」と入力します。

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

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

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

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

    以上で Config Sync がリポジトリと同期し、常にクラスタの状態をリポジトリの構成ファイルに一致させるようになります。

    Config Sync のインストールを確認する

    次のセクションでは、Cloud Shell を使用して cs-cluster の同期元のリポジトリを調査し、リポジトリ内の構成ファイルがデプロイされていることを確認します。

    Cloud Shell を開く

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. 次のセクションのコマンドを使用するには、kubectl コマンドライン アクセスを構成します。

      gcloud container clusters get-credentials cs-cluster \
          --zone ZONE \
          --project PROJECT_ID
      

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

      • ZONE: クラスタを作成したゾーン
      • PROJECT_ID: プロジェクト ID

      次のような出力が表示されます。

      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for cs-cluster.
      

      承認を求められたら、[承認] をクリックします。

    クラスタとリポジトリを調べる

    config-sync-quickstart ディレクトリには、ClusterRole、CustomResourceDefinition、Rolebinding、Namespace、RepoSync の構成が含まれます。また、モニタリング用の Prometheus Operator の構成も含まれています。これらの構成ファイルは、Config Sync がリポジトリから読み取るように構成されると、すぐに適用されます。

    Config Sync で管理されるオブジェクトの app.kubernetes.io/managed-by ラベルは configmanagement.gke.io に設定されています。 このラベルを使用して、マネージド オブジェクトを表示できます。

    Config Sync が管理する Namespace を一覧表示するには、次のコマンドを実行します。

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    出力は次のようになります。

    NAME         STATUS   AGE
    gamestore    Active   58s
    monitoring   Active   58s
    

    これらの Namespace が作成される元となった構成ファイルは、GitHub のリポジトリの /config-sync-quickstart/multirepo/ フォルダに移動して確認できます。

    ClusterRole、Reposync、CRD、Rolebindings などの他のオブジェクトも同様の方法で確認できます。

    同期ステータスを確認する

    Config Sync を使用している場合は、nomos コマンドライン ツールを使用できます。このツールを使用すると、Config Sync の追加機能を利用できます。

    このセクションでは、nomos status コマンドを使用して、Config Sync がすべての構成ファイルをクラスタに正常に同期しているかどうか確認します。

    nomos status

    出力は次のようになります。

    *gke_PROJECT_ID_ZONE_cs-cluster
      --------------------
      <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-sync-quickstart/multirepo/root@main
      SYNCED @ 2023-02-03 16:58:42 +0000 UTC   1fbab5c90af9029b26451fec92e9900d8db23aee
      Managed resources:
         NAMESPACE    NAME                                                                                      STATUS    SOURCEHASH
                      clusterrole.rbac.authorization.k8s.io/namespace-reader                                    Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/prometheus-acm                                      Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/prometheus-operator                                 Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/webstore-admin                                      Current   1fbab5c
                      clusterrolebinding.rbac.authorization.k8s.io/prometheus-acm                               Current   1fbab5c
                      clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator                          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com   Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com         Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/anvils.acme.com                             Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com           Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com                Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com       Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com       Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/webstores.marketplace.com                   Current   1fbab5c
                      namespace/gamestore                                                                       Current   1fbab5c
                      namespace/monitoring                                                                      Current   1fbab5c
         gamestore    reposync.configsync.gke.io/repo-sync                                                      Current   1fbab5c
         gamestore    rolebinding.rbac.authorization.k8s.io/gamestore-admin                                     Current   1fbab5c
         gamestore    rolebinding.rbac.authorization.k8s.io/gamestore-webstore-admin                            Current   1fbab5c
         monitoring   deployment.apps/prometheus-operator                                                       Current   1fbab5c
         monitoring   prometheus.monitoring.coreos.com/acm                                                      Current   1fbab5c
         monitoring   service/prometheus-acm                                                                    Current   1fbab5c
         monitoring   service/prometheus-operator                                                               Current   1fbab5c
         monitoring   serviceaccount/prometheus-acm                                                             Current   1fbab5c
         monitoring   serviceaccount/prometheus-operator                                                        Current   1fbab5c
         monitoring   servicemonitor.monitoring.coreos.com/acm-service                                          Current   1fbab5c
      --------------------
      gamestore:repo-sync                      https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-sync-quickstart/multirepo/namespaces/gamestore@main
      SYNCED @ 2023-02-03 16:58:51 +0000 UTC   1fbab5c90af9029b26451fec92e9900d8db23aee
      Managed resources:
         NAMESPACE   NAME                                 STATUS    SOURCEHASH
         gamestore   configmap/store-inventory            Current   1fbab5c
         gamestore   webstore.marketplace.com/gameplace   Current   1fbab5c
    

    この出力では、cs-cluster が 2 つのリポジトリから正常に同期されていることがわかります。また、すべてのリソースのステータスは Current であるため、リソースの状態は望ましい状態と一致します。

    クリーンアップ

    1. Google Cloud コンソールの GKE メニューに移動します。

      GKE に移動

    2. cs-cluster の横にある [操作]() をクリックし、[削除]()をクリックします。

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

    次のステップ