자동 렌더링을 사용하여 여러 환경에서 구성 동기화 사용

이 튜토리얼에서는 구성 동기화 권장사항에 따라 개발 및 프로덕션을 위한 두 환경 간에 Google Kubernetes Engine용 구성 동기화를 설정하는 방법을 보여줍니다.

이 시나리오는 귀하가 Foo Corp의 플랫폼 관리자라고 가정합니다. Foo Corp 애플리케이션은 GKE에 배포되어 있으며, 리소스가 devprod의 두 프로젝트에 분할되어 있습니다. dev 프로젝트에는 개발 GKE 클러스터가 있고 prod 프로젝트에는 프로덕션 GKE 클러스터가 있습니다. 귀하는 플랫폼 관리자로서 두 환경이 모두 Foo Corp 정책의 규정 준수 범위 내에 있는지 확인하고 Kubernetes 네임스페이스 및 서비스 계정과 같은 기본 수준의 리소스가 두 환경 모두에서 일관되게 유지되는지 확인해야 합니다.

다음 다이어그램은 이 튜토리얼에서 설정하는 환경의 개요를 보여줍니다.

이 튜토리얼에서 설정하는 환경의 개요를 보여줍니다.

이 튜토리얼에서는 구성 동기화의 자동 렌더링 기능을 활용하여 클러스터에서 리소스를 렌더링합니다. 각 클러스터는 Kustomization 구성 파일이 포함된 디렉터리에서 동기화되도록 구성되므로 구성 동기화에서 렌더링 프로세스가 자동으로 트리거됩니다. 자세한 내용은 Kustomize 구성 및 Helm 차트에 저장소 사용을 참조하세요.

앞의 다이어그램에 표시된 것처럼 이 튜토리얼에서는 다음 리소스를 만듭니다.

  • 개발 및 프로덕션 환경을 나타내는 두 개의 Google Cloud 프로젝트
  • 구성 동기화가 설치된 개별 프로젝트에 있는 2개의 GKE 클러스터(devprod)

저장소 아키텍처

이 튜토리얼에서는 샘플 저장소의 config-source/ 디렉터리에 있는 구성에 동기화되도록 구성 동기화를 구성합니다. 이 디렉터리에는 다음 디렉터리 및 파일이 포함됩니다.

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

config-source 디렉터리에는 base/ 매니페스트와 dev/prod/ Kustomize 오버레이가 포함됩니다. 각 디렉터리에는 Kustomize가 관리하고 클러스터에 적용해야 하는 파일을 나열하는 kustomization.yaml 파일이 있습니다. dev/kustomization.yamlprod/kustomization.yaml에서 일련의 패치가 정의됩니다. 이러한 패치는 해당 환경에 대해 base/ 리소스를 조작합니다.

예를 들어 dev RoleBinding은 모든 Foo Corp 개발자가 dev 클러스터에 포드를 배포할 수 있도록 하는 반면 prod RoleBinding은 지속적 배포 에이전트인 deploy-bot@foo-corp.com만 포드를 프로덕션에 배포할 수 있도록 허용합니다.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

클러스터 만들기 및 등록

여러 환경에 대해 구성 동기화를 구성할 때 사용해야 하는 워크플로에 집중할 수 있도록 multi-environments-kustomize 디렉터리에는 구성 동기화의 구성을 자동화하는 데 사용할 수 있는 스크립트가 포함되어 있습니다.

  1. 샘플 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. 이 튜토리얼에 필요한 리소스가 포함된 폴더로 이동합니다.

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. 이 튜토리얼에 사용된 스크립트를 실행하기 위해 다음 변수를 설정합니다.

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    다음을 바꿉니다.

    • DEV_PROJECT_ID: 개발 프로젝트로 사용하려는Google Cloud 프로젝트의 프로젝트 ID입니다.
    • PROD_PROJECT_ID: 프로덕션 프로젝트로 사용하려는Google Cloud 프로젝트의 프로젝트 ID입니다.
    • DEV_CLUSTER_ZONE: 개발 클러스터를 만들려는 Compute Engine 영역입니다. 예를 들면 us-central1-c입니다.
    • PROD_CLUSTER_ZONE: 프로덕션 클러스터를 만들려는 Compute Engine 영역입니다.
  4. 2개의 클러스터를 만들기 위해 ./create-clusters.sh 스크립트를 실행합니다.

    ./create-clusters.sh
    

    이 스크립트는 개발 프로젝트에 dev라는 하나의 GKE 클러스터를 만들고 프로덕션 프로젝트에 prod라는 하나의 GKE 클러스터를 만듭니다. 또한 이 스크립트는 GKE API를 사용 설정하고 kubectl로 해당 API에 액세스할 수 있도록 devprod 클러스터에 연결합니다.

    출력 예시:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. 클러스터를 개별 Fleet 2개에 등록하려면 register-clusters.sh 스크립트를 실행합니다.

    ./register-clusters.sh
    

    이 스크립트는 GKE 클러스터 등록을 위해 Google Cloud 서비스 계정과 키를 만든 후 gcloud container fleet memberships register 명령어를 사용하여 devprod 클러스터를 고유한 프로젝트의 GKE에 등록합니다.

    출력 예시:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Config Sync 설정

클러스터를 만들고 등록했으므로 이제 구성 동기화를 설치하고 설치를 확인할 수 있습니다.

Config Sync 설치

구성 동기화를 설치하려면 dev 및 prod 클러스터에 install-config-sync.sh 스크립트를 실행합니다.

./install-config-sync.sh

예상 출력:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

구성 동기화가 이제 저장소 구성과 동기화됩니다.

구성 확인

이 섹션에서는 클러스터가 저장소의 구성과 동기화되는지 확인합니다.

  1. 구성 동기화 설치 상태를 확인하려면 nomos status 명령어를 실행합니다.

    nomos status
    

    이제 개발 및 프로덕션 클러스터가 모두 각각의 저장소에 동기화되었는지 확인합니다.

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. kubectl을 사용하여 개발 클러스터로 전환합니다.

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. 리소스가 동기화되었는지 확인하기 위해 네임스페이스를 가져옵니다. foo 네임스페이스가 표시됩니다.

    kubectl get namespace
    

    출력 예시:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    이제 여러 Google Cloud 프로젝트와 환경 간에 개발 및 프로덕션 환경을 위한 자동화된 구성 렌더링이 설정되었습니다.