이 튜토리얼에서는 구성 동기화 권장사항에 따라 개발 및 프로덕션을 위한 두 환경 간에 Google Kubernetes Engine(GKE) Enterprise 버전용 구성 동기화를 설정하는 방법을 보여줍니다.
이 시나리오는 귀하가 Foo Corp의 플랫폼 관리자라고 가정합니다. Foo Corp 애플리케이션은 GKE Enterprise에 배포되어 있으며, 리소스가 dev
및 prod
의 두 프로젝트에 분할되어 있습니다. dev
프로젝트에는 개발 GKE Enterprise 클러스터가 있고 prod
프로젝트에는 프로덕션 GKE Enterprise 클러스터가 있습니다. 귀하는 플랫폼 관리자로서 두 환경이 모두 Foo Corp 정책의 규정 준수 범위 내에 있는지 확인하고 Kubernetes 네임스페이스 및 서비스 계정과 같은 기본 수준의 리소스가 두 환경 모두에서 일관되게 유지되는지 확인해야 합니다.
다음 다이어그램은 이 튜토리얼에서 설정하는 환경의 개요를 보여줍니다.
이 튜토리얼에서는 구성 동기화의 자동 렌더링 기능을 활용하여 클러스터에서 리소스를 렌더링합니다. 각 클러스터는 Kustomization 구성 파일이 포함된 디렉터리에서 동기화되도록 구성되므로 구성 동기화에서 렌더링 프로세스가 자동으로 트리거됩니다. 자세한 내용은 Kustomize 구성 및 Helm 차트에 저장소 사용을 참조하세요.
앞의 다이어그램에 표시된 것처럼 이 튜토리얼에서는 다음 리소스를 만듭니다.
- 개발 및 프로덕션 환경을 나타내는 2개의 Google Cloud 프로젝트
- 구성 동기화가 설치된 개별 프로젝트에 있는 2개의 GKE Enterprise 클러스터(
dev
및prod
)
저장소 아키텍처
이 튜토리얼에서는 샘플 저장소의 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.yaml
및 prod/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
목표
- 두 가지 개별 환경에 대한 구성을 자동으로 렌더링하고 동기화하도록 구성 동기화를 설정합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
이 튜토리얼을 시작하기 전에 다음 단계를 완료했는지 확인합니다.
Google Cloud Console의 프로젝트 선택기 페이지에서 2개의 Google Cloud 프로젝트를 선택하거나 만듭니다.
Google Cloud CLI를 최신 버전으로 업그레이드하세요.
nomos
명령어 설치 또는 업그레이드
클러스터 만들기 및 등록
여러 환경에 대해 구성 동기화를 구성할 때 사용해야 하는 워크플로에 집중할 수 있도록 multi-environments-kustomize
디렉터리에는 구성 동기화의 구성을 자동화하는 데 사용할 수 있는 스크립트가 포함되어 있습니다.
샘플 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
이 튜토리얼에 필요한 리소스가 포함된 폴더로 이동합니다.
cd anthos-config-management-samples/multi-environments-kustomize/
이 튜토리얼에 사용된 스크립트를 실행하기 위해 다음 변수를 설정합니다.
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 영역입니다.
2개의 클러스터를 만들기 위해
./create-clusters.sh
스크립트를 실행합니다../create-clusters.sh
이 스크립트는 개발 프로젝트에
dev
라는 하나의 GKE Enterprise 클러스터를 만들고 프로덕션 프로젝트에prod
라는 하나의 GKE Enterprise 클러스터를 만듭니다. 또한 이 스크립트는 GKE Enterprise API를 사용 설정하고kubectl
로 해당 API에 액세스할 수 있도록dev
및prod
클러스터에 연결합니다.출력 예시:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
클러스터를 개별 Fleet 2개에 등록하려면
register-clusters.sh
스크립트를 실행합니다../register-clusters.sh
이 스크립트는 GKE Enterprise 클러스터 등록을 위해 Google Cloud 서비스 계정과 키를 만든 후
gcloud container fleet memberships register
명령어를 사용하여dev
및prod
클러스터를 고유한 프로젝트의 GKE Enterprise에 등록합니다.출력 예시:
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.
구성 동기화가 이제 저장소 구성과 동기화됩니다.
구성 확인
이 섹션에서는 클러스터가 저장소의 구성과 동기화되는지 확인합니다.
구성 동기화 설치 상태를 확인하려면
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 ```
kubectl
을 사용하여 개발 클러스터로 전환합니다.kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
리소스가 동기화되었는지 확인하기 위해 네임스페이스를 가져옵니다.
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 프로젝트 및 환경 간에 개발 및 프로덕션 환경을 위한 자동화된 구성 렌더링이 설정되었습니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
모든 리소스 삭제
이 튜토리얼에서 만든 리소스를 삭제하지만 개발 및 프로덕션 프로젝트를 모두 그대로 두려면 삭제 스크립트를 실행합니다.
./cleanup.sh
프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
다음 단계
- 구성 동기화를 사용한 안전한 출시 알아보기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터 살펴보기