CI/CD Architecture
프로젝트 관리
프로젝트는 다중 클러스터 권한 제어를 위한 구성원, 그룹 및 역할 관리를 용이하게 합니다. 또한 애플리케이션 및 디플로이 그룹 관리를 지원하여 애플리케이션 빌드 및 배포 파이프라인을 구조화합니다.
프로젝트 내에서 여러 애플리케이션과 디플로이 그룹을 관리할 수 있으며, 이들의 관계는 M:N 형식으로 구조화됩니다. 예를 들어, 개발 및 운영 환경 모두에 대한 애플리케이션은 디플로이 그룹의 일부로 배포될 수 있습니다.
디플로이 그룹과 데이터 플레인 클러스터 간의 관계는 논리적으로 M:N으로 조직될 수 있습니다. 하나의 디플로이 그룹에 여러 데이터 플레인 클러스터를 등록하여 GitOps 방식으로 애플리케이션을 배포할 수 있습니다.
애플리케이션 빌드 관리
ZCP은 개발 팀으로부터 소스 코드를 가져오고 Kubernetes 배포를 위한 Docker 이미지를 생성하여 애플리케이션 빌드를 간소화합니다. 이 프로세스는 스크립팅 없이 사용자 친화적인 UI를 통해 파이프라인 구성을 가능하게 합니다. 또한, 플랫폼은 소스 제어, 라이브러리 관리 및 이미지 저장을 위한 필수 도구인 Gitea, Nexus, Harbor를 통합합니다:
- Gitea (소스 관리): 코드 저장소를 관리합니다.
- Nexus (바이너리 관리): 필요한 라이브러리를 저장하고 관리합니다.
- Harbor (이미지 레지스트리): 빌드된 컨테이너 이미지를 저장합니다.
빌드 프로세스는 다음 단계로 진행됩니다:
- 개발자는 Gitea와 Nexus에 소스 코드와 라이브러리를 업로드합니다.
- Tekton 빌드 파이프라인은 업로드된 리소스를 사용하여 빌드를 컴파일합니다.
- 완료되면, 결과 컨테이너 이미지는 Harbor 이미지 레지스트리에 업로드됩니다.
전체 프로세스는 사용자 콘솔을 통해 관리되며, CICD 백엔드는 빌드 파이프라인과 이미지 업로드를 자동화합니다.
애플리케이션 배포 관리
디플로이 그룹은 애플리케이션 배포를 위한 대상 환경으로 구성됩니다. 이러한 환경은 Kubernetes 클러스터에 해당하며, AKS, EKS, IKS, Native Kubernetes을 포함한 다양한 Kubernetes 서비스와 호환됩니다. 각 디플로이 그룹은 여러 Kubernetes 클러스터와 지정된 네임스페이스를 선택할 수 있습니다. 디플로이 그룹 내에서 배포가 트리거되면, 애플리케이션은 선택된 모든 클러스터의 지정된 네임스페이스에 배포됩니다.
배포 관리의 주요 기능은 다음과 같습니다:
- 디플로이 그룹 내에서 여러 애플리케이션 배포.
- 각 애플리케이션에 대한 배포 유형 정의(예: Kubernetes 배포).
- 배포 시 Kubernetes 배포 매니페스트(YAML) 자동 생성.
- YAML 매니페스트를 Git 서버에 저장하고 ArgoCD을 통해 적용.
GitOps 기반 배포
Cloud ZCP 콘솔을 통한 배포는 GitOps 방법론을 따르며, Git은 배포된 리소스를 관리하기 위한 SSoT(Single Source of Truth) 역할을 합니다. CICD 백엔드는 애플리케이션 구성에 따라 Kubernetes 매니페스트를 생성하고 이를 GitOps 리포지토리에 커밋합니다. ArgoCD은 GitOps 컨트롤러로서 데이터 플레인의 지정된 네임스페이스에 대한 변경 사항을 지속적으로 모니터링하고 적용합니다.