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

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

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. プロジェクトに次のロールがあることを確認します。 GKE Hub Admin

    ロールを確認する

    1. Google Cloud コンソールの [IAM] ページに移動します。

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [プリンシパル] 列で、自分のメールアドレスを含む行を見つけます。

      自分のメールアドレスがその列にない場合、ロールは割り当てられていません。

    4. 自分のメールアドレスを含む行の [ロール] 列で、ロールのリストに必要なロールが含まれているかどうかを確認します。

    ロールを付与する

    1. Google Cloud コンソールの [IAM] ページに移動します。

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [ アクセスを許可] をクリックします。
    4. [新しいプリンシパル] フィールドに、自分のメールアドレスを入力します。
    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 コンソールで Config Sync の [DASHBOARD] に移動します。

    Config Sync の [DASHBOARD] に移動

  3. [Config Sync の設定] ボックスで、[ Config Sync のインストール] をクリックします。

  4. [使用可能なクラスタ] テーブルで、cs-cluster を選択し、[Config Sync のインストール] をクリックします。

    数分後、[設定] タブに移動します。cs-cluster の [Config Sync のステータス] 列に [インストール済み] と表示されます。

  5. Config Sync ダッシュボードで、[パッケージをデプロイ] をクリックします。

  6. [パッケージ デプロイ用のクラスタを選択] テーブルで、cs-cluster を選択し、[続行] をクリックします。

  7. [Git でホストされているパッケージ] を選択したままにして、[続行] をクリックします。

  8. [パッケージ名] フィールドに「sample-repository」と入力します。

  9. [Repository URL] フィールドに「https://github.com/GoogleCloudPlatform/anthos-config-management-samples」と入力します。

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

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

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

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

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

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

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

Cloud Shell を開く

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  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. 確認するメッセージが表示されたら、もう一度 [削除] をクリックします。

次のステップ