빠른 시작: 저장소에서 구성 동기화

이 튜토리얼에서는 Google Kubernetes Engine(GKE) Enterprise 버전 클러스터를 만들고 구성 동기화를 사용하여 멀티 저장소 샘플 저장소의 구성에 동기화합니다.

규정 준수팀에서 조직의 모든 구성원이 내부 규칙을 준수하도록 해야 한다고 가정해 보세요. 이러한 규칙을 적용하기 위해 규정 준수팀은 구성을 만들고 샘플 저장소에 추가했습니다. 조직의 각 클러스터는 저장소에 동기화해야 하며 클러스터를 만들고 동기화할 책임은 사용자에게 있습니다.

시작하기 전에

  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. 새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.

    5. 역할 선택 목록에서 역할을 선택합니다.
    6. 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
    7. 저장을 클릭합니다.

    클러스터 만들기

    이 섹션에서는 이 튜토리얼에서 사용할 수 있는 클러스터를 만듭니다. 실제 시나리오에서는 여러 클러스터를 관리하는 경우가 많지만 이 튜토리얼을 단순화하기 위해 하나의 클러스터만 만들고 관리합니다.

    클러스터를 만들려면 다음 단계를 수행합니다.

    1. Google Cloud 콘솔에서 Kubernetes Engine 페이지로 이동합니다.

      Google Kubernetes Engine으로 이동

    2. GKE를 처음 사용하는 경우 사용 설정을 클릭하여 Kubernetes Engine API를 사용 설정합니다.

    3. 만들기를 클릭합니다.

    4. Autopilot 섹션에서 구성을 선택합니다.

    5. 클러스터 기본사항 섹션의 이름 필드에 cs-cluster를 입력하고 다른 모든 필드를 권장 기본값으로 둡니다.

    6. 만들기를 클릭합니다. Kubernetes 클러스터 페이지로 이동합니다. 클러스터를 만드는 데 몇 분 정도 걸립니다. 클러스터 옆에 있는 상태 열에 녹색 체크표시가 보이면 준비된 것입니다.

    클러스터 구성

    이제 클러스터가 생성되었으므로 구성 동기화를 구성하여 샘플 저장소의 config-sync-quickstart 디렉터리의 구성과 동기화할 수 있습니다.

    Google Cloud 콘솔에서 구성 동기화를 구성하려면 다음 단계를 완료하세요.

    1. Google Cloud 콘솔에서 GKE Hub API를 사용 설정합니다.

      GKE Hub API로 이동

    2. Google Cloud 콘솔에서 기능 섹션 아래의 구성 페이지로 이동합니다.

      구성으로 이동

    3. 구성 동기화 설치를 클릭합니다.

    4. 자동 업그레이드를 선택하여 구성 동기화가 버전을 자동으로 업그레이드하도록 사용 설정합니다.

    5. 설치 옵션에서 개별 클러스터에 구성 동기화 설치를 선택합니다.

    6. 사용 가능한 클러스터 테이블에서 cs-cluster를 선택하고 구성 동기화 설치를 클릭합니다. 몇 분 후에 설정 탭에서 cs-cluster 상태가 사용 설정됨으로 표시됩니다.

    7. 구성 동기화 대시보드에서 패키지 배포를 클릭합니다.

    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동기화 상태 열에 동기화됨이 표시됩니다.

    구성 동기화가 저장소에 동기화되었으므로 저장소의 구성과 클러스터 상태를 지속적으로 조정합니다.

    구성 동기화 설치 살펴보기

    다음 섹션에서는 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, 네임스페이스, RepoSync 구성이 포함됩니다. 모니터링용 Prometheus 연산자의 구성도 포함되어 있습니다. 이 구성은 구성 동기화가 저장소에서 읽도록 구성되는 즉시 적용됩니다.

    구성 동기화가 관리하는 모든 객체에는 configmanagement.gke.io로 설정된 app.kubernetes.io/managed-by 라벨이 있습니다. 이 라벨을 사용하여 관리형 객체를 볼 수 있습니다.

    구성 동기화가 관리하는 네임스페이스를 나열하려면 다음 명령어를 실행합니다.

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

    출력은 다음과 비슷합니다.

    NAME         STATUS   AGE
    gamestore    Active   58s
    monitoring   Active   58s
    

    GitHub에서 저장소의 /config-sync-quickstart/multirepo/ 폴더로 이동하여 이러한 네임스페이스를 만든 구성을 살펴볼 수 있습니다.

    ClusterRole, Reposync, CRD, Rolebinding 등의 다른 객체를 같은 방식으로 검사할 수 있습니다.

    동기화 상태 확인

    구성 동기화를 사용하는 경우 nomos 명령줄 도구를 사용할 수 있습니다. 이 도구는 구성 동기화의 추가 기능을 제공합니다.

    이 섹션에서는 nomos status 명령어를 사용하여 구성 동기화가 클러스터에 모든 구성을 성공적으로 동기화했는지 확인합니다.

    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가 두 저장소에서 성공적으로 동기화되는 것을 확인할 수 있습니다. 또한 모든 리소스의 상태가 Current이므로 리소스 상태가 원하는 상태와 일치합니다.

    삭제

    1. Google Cloud 콘솔에서 GKE 메뉴로 이동합니다.

      GKE로 이동

    2. cs-cluster 옆의 작업을 클릭한 다음 삭제를 클릭합니다.

    3. 확인 메시지가 나타나면 삭제를 다시 클릭합니다.

    다음 단계