실험적 전체 배포 워크플로
이 절차는 CLI로 새 환경을 만들고 스포크 제어 플레인을 연결한 뒤 Helm 제품 릴리스를 설치합니다. module install과 entity install은 Experimental 명령입니다. apollo-cli configure에서 V2 experimental commands를 활성화해야 하며 실험 기능 지원 정책을 따릅니다.
환경 생성, Kubernetes 리소스 적용과 제품 설치를 포함하는 실제 변경 절차입니다. 승인된 시험 환경에서 대상 허브와 클러스터를 확인한 뒤 단계별 결과를 보고 진행합니다.
준비 조건
- Apollo CLI를 다운로드하고 허브 인증 프로필을 구성해야 합니다.
- Kubernetes 클러스터와 사용할
kubectl컨텍스트가 있어야 합니다. 운영에는 스포크 요구사항을 적용하고, 시험에는 로컬 클러스터를 사용할 수 있습니다. - 차트와 컨테이너 이미지가 아티팩트 저장소에 게시되어 있고 스포크가 접근할 수 있어야 합니다.
- 필요한 변경 요청을 허브 정책에 따라 자동 승인할 수 있어야 합니다. 수동 승인이 필요한 경우 해당 단계에서 승인을 마친 뒤 다음 단계로 진행합니다.
- 게시할 제품을 제품 카탈로그에 생성하고 릴리스 생성 권한을 준비합니다.
- 작업 디렉터리에 실제 차트를 렌더링하고 설치할
values.yaml이 있어야 합니다. Bash,jq, Helm과kubectl을 사용할 수 있어야 합니다.
입력값
다음 값을 실제 허브와 차트에 맞게 환경 변수로 제공합니다. 토큰은 CLI 인증 프로필이나 승인된 비밀정보 주입 방식을 사용합니다.
| 변수 | 값 |
|---|---|
ENVIRONMENT_PREFIX | 만들 환경의 이름 |
CONTACT_TEAM | 환경 연락 담당 팀의 이름. 팀 RID나 소유권 부여 옵션이 아님 |
MODULE_COORDINATE | 설치할 스포크 제어 플레인 모듈의 제품 ID 또는 전체 Maven 좌표. apollo-cli module list에서 확인 |
MANIFEST_OUTPUT_DIR | 제품 매니페스트 출력 디렉터리 |
PRODUCT_GROUP | 생성한 제품의 그룹 ID |
PRODUCT_NAME | 생성한 제품의 아티팩트 ID |
PRODUCT_VERSION | 게시할 Apollo 릴리스 및 이 예시에서 사용할 차트 버전 |
HELM_REPOSITORY_URL | 실제 배포 시 차트를 가져올 OCI 저장소 URL |
HELM_CHART_URI | 차트 이름까지 포함한 전체 OCI URL |
가상의 저장소 관계는 HELM_REPOSITORY_URL=oci://registry.example.com/charts, HELM_CHART_URI=oci://registry.example.com/charts/order-service입니다. 실행 입력에는 실제로 존재하고 접근 가능한 값을 사용합니다. 제품 이름과 차트 이름이 다르면 HELM_CHART_URI에 실제 차트 이름을 사용합니다.
아래 모듈 설치 예시는 선택한 스포크 제어 플레인 모듈이 environmentId 변수를 선언한다고 가정합니다. 모듈 정의에 추가 필수 변수가 있으면 실제 정의에 따라 --variable KEY=VALUE를 함께 지정합니다.
1. 환경 생성
다음 명령들은 같은 Bash 세션에서 순서대로 실행합니다.
set -euo pipefail
ENVIRONMENT_ID=$(apollo-cli environment create "$ENVIRONMENT_PREFIX" \
--contact-team "$CONTACT_TEAM" -o json | jq -r '.apolloEnvironmentID')
ENVIRONMENT_ID는 결과의 실제 환경 ID입니다. 연락 담당 팀 지정만으로 팀의 소유권이나 환경 역할이 자동 부여된다고 해석하지 않습니다. 생성된 환경과 필요한 권한을 허브에서 확인합니다.
2. 스포크 제어 플레인 모듈 설치
apollo-cli module install "$MODULE_COORDINATE" \
--environment "$ENVIRONMENT_ID" \
--variable environmentId="$ENVIRONMENT_ID"
제품 ID를 주면 해당 채널에서 최신 릴리스를 선택하고, 전체 Maven 좌표를 주면 특정 버전을 선택합니다. 같은 모듈의 기존 설치가 있으면 갱신할 수 있으므로 새 환경의 ID를 정확히 사용합니다. 모듈 설치 요청과 환경 설정 반영이 완료된 뒤 연결 매니페스트를 생성합니다.
3. 환경 매니페스트 적용
현재 kubectl 컨텍스트와 대상 클러스터를 먼저 확인합니다. 아래 명령은 매니페스트를 생성하여 그 클러스터에 적용합니다.
apollo-cli environment manifest generate "$ENVIRONMENT_ID" | kubectl apply -f -
환경이 연결되고 스포크 제어 플레인이 상태를 보고하는지 허브에서 확인합니다. 네트워크, 저장소와 스토리지 조건은 환경 연결을 따릅니다.
4. Helm 제품 매니페스트 생성
apollo-cli product-release helm-chart init \
--repository-url "$HELM_REPOSITORY_URL" \
--maven-coordinate "$PRODUCT_GROUP:$PRODUCT_NAME:$PRODUCT_VERSION" \
--name "$HELM_CHART_URI" \
--version "$PRODUCT_VERSION" \
--values values.yaml \
--output-dir "$MANIFEST_OUTPUT_DIR"
원격 OCI 차트의 --name에는 전체 차트 URI가 필요합니다. CLI가 만든 제품 유형과 차트 확장을 유지합니다. --values는 로컬 렌더링에만 쓰므로 다음 등록 단계에서 기본 구성도 별도로 제공합니다.
5. 제품 릴리스 등록
apollo-cli product-release create \
--manifest "$MANIFEST_OUTPUT_DIR/manifest.yml" \
--default-config values.yaml
구성 스키마를 별도로 준비했다면 --config-schema로 추가하며 --default-config와 함께 사용합니다. 이 작업은 카탈로그에 릴리스 메타데이터와 구성을 등록합니다. 차트와 이미지를 레지스트리에 게시하는 작업은 아닙니다.
6. 환경에 제품 설치
apollo-cli entity install \
--environment "$ENVIRONMENT_ID" \
--product-id "$PRODUCT_GROUP:$PRODUCT_NAME"
--file을 지정하지 않았으므로 CLI가 필요한 개체 필드를 대화형으로 요청합니다. 실제 설치할 Kubernetes 네임스페이스, 개체 이름, 채널과 버전 조건을 확인하여 입력합니다. 별도 개체 명세 파일을 준비했다면 entity install의 --file을 사용할 수 있습니다.
설치 요청 이후 환경의 Activity와 Entities에서 승인, 계획 실행과 보고된 상태를 확인합니다. 명령 제출 성공만으로 애플리케이션 준비가 끝났다고 판단하지 않습니다. 차단되면 계획의 제약 조건과 아티팩트 접근을 확인합니다.