Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

실험적 전체 배포 워크플로

이 절차는 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에서 승인, 계획 실행과 보고된 상태를 확인합니다. 명령 제출 성공만으로 애플리케이션 준비가 끝났다고 판단하지 않습니다. 차단되면 계획의 제약 조건과 아티팩트 접근을 확인합니다.