이 튜토리얼에서는 구성 동기화 권장사항에 따라 개발 및 프로덕션을 위한 두 환경 간에 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 프로젝트를 선택하거나 만듭니다.
-
Make sure that billing is enabled for your Google Cloud project.
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 아키텍처 센터를 살펴보세요.