InfoGrab Docs

Kubernetes 통합 테스트

요약

Kubernetes 통합 테스트는 GitLab Runner의 CI/CD 파이프라인에서 실행됩니다. 테스트 인프라는 다음에 호스팅됩니다: 인프라는 다운타임 없는 업데이트를 위해 두 개의 별도 클러스터로 구성된 블루-그린 배포 모델을 사용합니다.

Kubernetes 통합 테스트는 GitLab Runner의 CI/CD 파이프라인에서 실행됩니다. 이 테스트는 GitLab Runner가 Kubernetes 클러스터와 올바르게 작동하는지 검증합니다. 테스트는 runner-Kubernetes-infra 리포지터리에서 관리하는 전용 Kubernetes 클러스터에서 실행됩니다.

테스트 인프라#

Runner Kubernetes 인프라 리포지터리#

테스트 인프라는 다음에 호스팅됩니다:

인프라는 다운타임 없는 업데이트를 위해 두 개의 별도 클러스터로 구성된 블루-그린 배포 모델을 사용합니다.

클러스터 구성#

노드 풀, 리소스 제한, 오토스케일링 설정을 포함한 자세한 클러스터 구성은 인프라 리포지터리의 클러스터 구성 섹션을 참고하세요.

파이프라인 구조#

테스트 파이프라인 스테이지#

통합 테스트는 다음 GitLab CI/CD 스테이지를 통해 실행됩니다:

  1. 통합 Kubernetes 프로비저닝 (provision integration kubernetes):

    • 테스트 전용 RBAC 리소스 프로비저닝
    • 서비스 어카운트 k8s-runner-integration-tests-runner-$CI_PIPELINE_ID 생성
    • mage k8s:provisionIntegrationKubernetes $CI_PIPELINE_ID 실행
  2. 통합 테스트 작업 (병렬 실행):

    • integration kubernetes: 표준 통합 테스트
    • integration kubernetes exec legacy: 레거시 실행 전략 테스트
    • integration kubernetes attach: attach 실행 전략 테스트
  3. 정리 (destroy integration kubernetes):

    • 테스트 전용 리소스 삭제
    • mage k8s:destroyIntegrationKubernetes $CI_PIPELINE_ID 실행

파이프라인 구성#

파이프라인은 .gitlab/ci/test-kubernetes-integration.gitlab-ci.yml에 정의되어 있습니다:

.integration kubernetes:
  extends:
    - .rules:merge_request_pipelines:no_docs:no-community-mr
  tags:
    - $KUBERNETES_RUNNER_INTEGRATION_TAG
  stage: test kubernetes integration
  variables:
    KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: "k8s-runner-integration-tests-runner-$CI_PIPELINE_ID"

테스트 실행#

통합 테스트는 gotestsum을 사용하여 실행됩니다:

gotestsum --format=testname --format-hide-empty-pkg --rerun-fails=3 \
  --hide-summary=output --packages=gitlab.com/gitlab-org/gitlab-runner/executors/kubernetes \
  --junitfile=junit_report.xml --junitfile-hide-empty-pkg -- \
  -timeout=10m -parallel=20 $EXTRA_GO_TEST_FLAGS \
  -tags=integration,kubernetes ./executors/kubernetes/...

주요 파라미터:

  • 타임아웃: 테스트당 10분
  • 병렬 실행: 최대 20개 테스트 동시 실행
  • 재시도 로직: 실패한 테스트는 최대 3번 재시도
  • 빌드 태그: integration,kubernetes

테스트 범주#

표준 통합 테스트#

  • 작업: integration kubernetes
  • 목적: 주요 통합 테스트 스위트
  • 기능 플래그: 기본 기능 플래그 구성 사용
  • 필터: -skip=TestRunIntegrationTestsWithFeatureFlag로 기능 플래그별 테스트 제외

레거시 실행 전략 테스트#

  • 작업: integration kubernetes exec legacy
  • 기능 플래그: FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=true
  • 필터: TestRunIntegrationTestsWithFeatureFlag만 실행
  • 목적: 이전 버전과의 호환성 검증

Attach 전략 테스트#

  • 작업: integration kubernetes attach
  • 기능 플래그: FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=false
  • 필터: TestRunIntegrationTestsWithFeatureFlag만 실행
  • 목적: 새로운 attach 기반 실행 전략 테스트

RBAC 및 권한#

동적 권한 프로비저닝#

프로비저닝 시스템(mage k8s:provisionIntegrationKubernetes)은 코드베이스를 분석하여 필요한 최소 RBAC 권한을 생성합니다:

  1. 코드 분석: Kubernetes API 호출을 위해 /executors/kubernetes/를 스캔
  2. 권한 생성: 필요한 권한만 포함된 role YAML 생성
  3. 리소스 생성: 생성된 RBAC를 k8s-runner-integration-tests 네임스페이스에 적용

이 시스템은 테스트가 테스트 대상 코드와 동일한 권한을 사용하도록 보장합니다.

테스트별 서비스 어카운트#

각 파이프라인은 고유한 리소스를 생성합니다:

  • 서비스 어카운트: k8s-runner-integration-tests-runner-$CI_PIPELINE_ID
  • Role: 코드 분석을 기반으로 생성
  • Role binding: 서비스 어카운트를 생성된 role에 연결

관리자 권한#

통합 테스트는 테스트 관리를 위한 관리자 RBAC도 사용합니다:

  • 서비스 어카운트: integration-tests-admin
  • 목적: 테스트 리소스 생성/삭제, 클러스터 상태 관찰
  • 범위: 일반 러너 작업을 넘어선 추가 권한

테스트 구현#

테스트 환경#

테스트는 다음 환경 변수와 함께 실행됩니다:

  • KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: 파이프라인별 서비스 어카운트
  • 기능 플래그 변수 (기능 플래그 테스트용)
  • 클러스터 연결 세부 정보 (인프라에서 관리)

리소스 관리#

자동 정리#

인프라에는 자동 정리 메커니즘이 포함되어 있습니다. CronJob, 스케줄링 및 구성에 대한 자세한 내용은 인프라 리포지터리의 운영 자동화 섹션을 참고하세요.

리소스 격리#

테스트는 충돌을 방지하기 위해 리소스 그룹을 사용합니다:

  • "$CI_COMMIT_REF_SLUG-k8s-integration"
  • "$CI_COMMIT_REF_SLUG-k8s-integration-exec-legacy"
  • "$CI_COMMIT_REF_SLUG-k8s-integration-attach"

모니터링 및 관측 가능성#

메트릭 및 로깅#

테스트 인프라에는 포괄적인 모니터링 및 로깅이 포함되어 있습니다. Grafana 액세스, Prometheus 대시보드, Loki를 이용한 로그 집계, 사용 가능한 make 명령에 대한 자세한 내용은 인프라 리포지터리의 메트릭로그 수집 섹션을 참고하세요.

트러블슈팅#

일반적인 문제#

  • 테스트 타임아웃:
    • 클러스터 리소스 가용성을 확인하세요.
    • 워커 풀 스케일링을 확인하세요 (0~6개 노드).
    • 테스트 병렬 처리 설정을 검토하세요.
  • RBAC 권한:
    • 프로비저닝 작업이 성공했는지 확인하세요.
    • 서비스 어카운트 생성을 확인하세요.
    • 생성된 Role이 코드 요구 사항과 일치하는지 확인하세요.
  • 리소스 충돌:
    • 리소스 그룹 격리를 확인하세요.
    • 정리 작업 실행을 확인하세요.
    • 파이프라인별 이름 지정을 검토하세요.

디버깅 단계#

  1. 인프라 상태를 확인합니다. make 명령과 인프라 관리에 대한 자세한 내용은 블루-그린 배포를 참고하세요.

  2. 테스트 로그를 검토합니다:

    • 특정 실패에 대한 파이프라인 작업 로그를 확인하세요.
    • 집계된 로그를 위해 Grafana 대시보드를 사용하세요. 자세한 내용은 로그 수집을 참고하세요.
    • 테스트별 이슈를 위해 gotestsum 출력을 검토하세요.
  3. RBAC 검증:

    kubectl get sa,role,rolebinding -n k8s-runner-integration-tests
    kubectl describe role k8s-runner-integration-tests-runner-$CI_PIPELINE_ID -n k8s-runner-integration-tests
    

로컬에서 테스트 실행#

통합 테스트는 전용 인프라를 갖춘 CI/CD 환경에서 실행하도록 설계되었습니다. 로컬 실행에는 다음이 필요합니다:

  1. GKE 클러스터에 대한 액세스.
  2. 적절한 RBAC 권한.
  3. CI/CD 구성과 일치하는 환경 변수.

로컬 개발의 경우, 유닛 테스트나 적절한 설정을 갖춘 로컬 Kubernetes 클러스터(kind/minikube)를 사용하세요.

관련 항목#

Kubernetes 통합 테스트

원문 보기
요약

Kubernetes 통합 테스트는 GitLab Runner의 CI/CD 파이프라인에서 실행됩니다. 테스트 인프라는 다음에 호스팅됩니다: 인프라는 다운타임 없는 업데이트를 위해 두 개의 별도 클러스터로 구성된 블루-그린 배포 모델을 사용합니다.

Kubernetes 통합 테스트는 GitLab Runner의 CI/CD 파이프라인에서 실행됩니다. 이 테스트는 GitLab Runner가 Kubernetes 클러스터와 올바르게 작동하는지 검증합니다. 테스트는 runner-Kubernetes-infra 리포지터리에서 관리하는 전용 Kubernetes 클러스터에서 실행됩니다.

테스트 인프라#

Runner Kubernetes 인프라 리포지터리#

테스트 인프라는 다음에 호스팅됩니다:

인프라는 다운타임 없는 업데이트를 위해 두 개의 별도 클러스터로 구성된 블루-그린 배포 모델을 사용합니다.

클러스터 구성#

노드 풀, 리소스 제한, 오토스케일링 설정을 포함한 자세한 클러스터 구성은 인프라 리포지터리의 클러스터 구성 섹션을 참고하세요.

파이프라인 구조#

테스트 파이프라인 스테이지#

통합 테스트는 다음 GitLab CI/CD 스테이지를 통해 실행됩니다:

  1. 통합 Kubernetes 프로비저닝 (provision integration kubernetes):

    • 테스트 전용 RBAC 리소스 프로비저닝
    • 서비스 어카운트 k8s-runner-integration-tests-runner-$CI_PIPELINE_ID 생성
    • mage k8s:provisionIntegrationKubernetes $CI_PIPELINE_ID 실행
  2. 통합 테스트 작업 (병렬 실행):

    • integration kubernetes: 표준 통합 테스트
    • integration kubernetes exec legacy: 레거시 실행 전략 테스트
    • integration kubernetes attach: attach 실행 전략 테스트
  3. 정리 (destroy integration kubernetes):

    • 테스트 전용 리소스 삭제
    • mage k8s:destroyIntegrationKubernetes $CI_PIPELINE_ID 실행

파이프라인 구성#

파이프라인은 .gitlab/ci/test-kubernetes-integration.gitlab-ci.yml에 정의되어 있습니다:

.integration kubernetes:
  extends:
    - .rules:merge_request_pipelines:no_docs:no-community-mr
  tags:
    - $KUBERNETES_RUNNER_INTEGRATION_TAG
  stage: test kubernetes integration
  variables:
    KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: "k8s-runner-integration-tests-runner-$CI_PIPELINE_ID"

테스트 실행#

통합 테스트는 gotestsum을 사용하여 실행됩니다:

gotestsum --format=testname --format-hide-empty-pkg --rerun-fails=3 \
  --hide-summary=output --packages=gitlab.com/gitlab-org/gitlab-runner/executors/kubernetes \
  --junitfile=junit_report.xml --junitfile-hide-empty-pkg -- \
  -timeout=10m -parallel=20 $EXTRA_GO_TEST_FLAGS \
  -tags=integration,kubernetes ./executors/kubernetes/...

주요 파라미터:

  • 타임아웃: 테스트당 10분
  • 병렬 실행: 최대 20개 테스트 동시 실행
  • 재시도 로직: 실패한 테스트는 최대 3번 재시도
  • 빌드 태그: integration,kubernetes

테스트 범주#

표준 통합 테스트#

  • 작업: integration kubernetes
  • 목적: 주요 통합 테스트 스위트
  • 기능 플래그: 기본 기능 플래그 구성 사용
  • 필터: -skip=TestRunIntegrationTestsWithFeatureFlag로 기능 플래그별 테스트 제외

레거시 실행 전략 테스트#

  • 작업: integration kubernetes exec legacy
  • 기능 플래그: FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=true
  • 필터: TestRunIntegrationTestsWithFeatureFlag만 실행
  • 목적: 이전 버전과의 호환성 검증

Attach 전략 테스트#

  • 작업: integration kubernetes attach
  • 기능 플래그: FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY=false
  • 필터: TestRunIntegrationTestsWithFeatureFlag만 실행
  • 목적: 새로운 attach 기반 실행 전략 테스트

RBAC 및 권한#

동적 권한 프로비저닝#

프로비저닝 시스템(mage k8s:provisionIntegrationKubernetes)은 코드베이스를 분석하여 필요한 최소 RBAC 권한을 생성합니다:

  1. 코드 분석: Kubernetes API 호출을 위해 /executors/kubernetes/를 스캔
  2. 권한 생성: 필요한 권한만 포함된 role YAML 생성
  3. 리소스 생성: 생성된 RBAC를 k8s-runner-integration-tests 네임스페이스에 적용

이 시스템은 테스트가 테스트 대상 코드와 동일한 권한을 사용하도록 보장합니다.

테스트별 서비스 어카운트#

각 파이프라인은 고유한 리소스를 생성합니다:

  • 서비스 어카운트: k8s-runner-integration-tests-runner-$CI_PIPELINE_ID
  • Role: 코드 분석을 기반으로 생성
  • Role binding: 서비스 어카운트를 생성된 role에 연결

관리자 권한#

통합 테스트는 테스트 관리를 위한 관리자 RBAC도 사용합니다:

  • 서비스 어카운트: integration-tests-admin
  • 목적: 테스트 리소스 생성/삭제, 클러스터 상태 관찰
  • 범위: 일반 러너 작업을 넘어선 추가 권한

테스트 구현#

테스트 환경#

테스트는 다음 환경 변수와 함께 실행됩니다:

  • KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: 파이프라인별 서비스 어카운트
  • 기능 플래그 변수 (기능 플래그 테스트용)
  • 클러스터 연결 세부 정보 (인프라에서 관리)

리소스 관리#

자동 정리#

인프라에는 자동 정리 메커니즘이 포함되어 있습니다. CronJob, 스케줄링 및 구성에 대한 자세한 내용은 인프라 리포지터리의 운영 자동화 섹션을 참고하세요.

리소스 격리#

테스트는 충돌을 방지하기 위해 리소스 그룹을 사용합니다:

  • "$CI_COMMIT_REF_SLUG-k8s-integration"
  • "$CI_COMMIT_REF_SLUG-k8s-integration-exec-legacy"
  • "$CI_COMMIT_REF_SLUG-k8s-integration-attach"

모니터링 및 관측 가능성#

메트릭 및 로깅#

테스트 인프라에는 포괄적인 모니터링 및 로깅이 포함되어 있습니다. Grafana 액세스, Prometheus 대시보드, Loki를 이용한 로그 집계, 사용 가능한 make 명령에 대한 자세한 내용은 인프라 리포지터리의 메트릭로그 수집 섹션을 참고하세요.

트러블슈팅#

일반적인 문제#

  • 테스트 타임아웃:
    • 클러스터 리소스 가용성을 확인하세요.
    • 워커 풀 스케일링을 확인하세요 (0~6개 노드).
    • 테스트 병렬 처리 설정을 검토하세요.
  • RBAC 권한:
    • 프로비저닝 작업이 성공했는지 확인하세요.
    • 서비스 어카운트 생성을 확인하세요.
    • 생성된 Role이 코드 요구 사항과 일치하는지 확인하세요.
  • 리소스 충돌:
    • 리소스 그룹 격리를 확인하세요.
    • 정리 작업 실행을 확인하세요.
    • 파이프라인별 이름 지정을 검토하세요.

디버깅 단계#

  1. 인프라 상태를 확인합니다. make 명령과 인프라 관리에 대한 자세한 내용은 블루-그린 배포를 참고하세요.

  2. 테스트 로그를 검토합니다:

    • 특정 실패에 대한 파이프라인 작업 로그를 확인하세요.
    • 집계된 로그를 위해 Grafana 대시보드를 사용하세요. 자세한 내용은 로그 수집을 참고하세요.
    • 테스트별 이슈를 위해 gotestsum 출력을 검토하세요.
  3. RBAC 검증:

    kubectl get sa,role,rolebinding -n k8s-runner-integration-tests
    kubectl describe role k8s-runner-integration-tests-runner-$CI_PIPELINE_ID -n k8s-runner-integration-tests
    

로컬에서 테스트 실행#

통합 테스트는 전용 인프라를 갖춘 CI/CD 환경에서 실행하도록 설계되었습니다. 로컬 실행에는 다음이 필요합니다:

  1. GKE 클러스터에 대한 액세스.
  2. 적절한 RBAC 권한.
  3. CI/CD 구성과 일치하는 환경 변수.

로컬 개발의 경우, 유닛 테스트나 적절한 설정을 갖춘 로컬 Kubernetes 클러스터(kind/minikube)를 사용하세요.

관련 항목#