운영 및 문제 해결

모델 구성 업데이트, 자격 증명 교체, 상태 모니터링, 로그 수집 및 일반적인 연결 및 인증 문제 해결을 포함하여 Model Gateway 배포를 모니터링, 유지 관리 및 문제 해결합니다.

배포 후 Model Gateway를 지속적으로 운영 관리하면 구성된 AI 모델에 안정적으로 액세스하고 서비스 중단을 최소화할 수 있습니다. 관리자는 활성 모델 구성을 검토하고, 제공자 자격 증명을 업데이트하고, 시크릿을 교체하고, 게이트웨이 상태를 모니터링하고, 문제가 발생했을 때 진단 정보를 수집할 수 있습니다.

구성된 모델 확인

모델을 확인하는 데는 구성 수준과 런타임에 bob-inference가 실제로 로드한 내용이라는 두 가지 수준이 있습니다.

  • 구성 수준 — 추론 ConfigMap에서 현재 Model Gateway 구성을 검색합니다:
    oc get cm bob-inference-config -n <bob-namespace> -o yaml | yq '.data."config.yaml"'
  • 런타임 수준 — bob-inference가 등록하고 활발하게 라우팅 중인 대상: /v1/models 엔드포인트를 직접 쿼리합니다(모델 연결성 검증 참조).
참고:

런타임 /v1/models 엔드포인트에는 exposed: true인 모델만 나열됩니다. 구성 파일은 구성된 전체 모델 세트를 볼 수 있는 유일한 방법입니다.

제공자 자격 증명 업데이트

자격 증명은 bob.modelGateway.secrets에서 환경 변수로 마운트됩니다. 이를 업데이트하는 작업은 2단계로 진행됩니다 — 시크릿 값을 업데이트한 다음 새 마운트를 적용하기 위해 Inference Service를 재시작합니다.

시크릿 업데이트

Bob CR을 편집하고 새 값을 적용합니다:

oc edit bob <instance-name> -n <bob-namespace>
# bob.modelGateway.secrets 아래의 값 업데이트

Inference Service 재시작

새 시크릿이 마운트되도록 Inference Service를 재시작합니다:

oc rollout restart deploy/inference-service -n <bob-namespace>
oc rollout status deploy/inference-service -n <bob-namespace>
경고:

시크릿 업데이트 후에는 Inference Service 파드를 재시작해야 합니다. 모델 구성 변경(모델 추가 또는 제거, base_url 변경)과 시크릿 변경은 단일 CR 업데이트로 일괄 처리한 후 한 번 재시작할 수 있습니다.

시크릿 교체

시크릿 교체는 자격 증명 업데이트와 동일한 패턴을 따르며 다운타임을 방지하기 위해 타이밍에 추가적인 주의를 기울여야 합니다.

권장 무중단 교체 순서:

  1. bob.modelGateway.secrets를 새 자격 증명 값으로 업데이트합니다.
  2. Inference Service를 재시작합니다: oc rollout restart deploy/inference-service -n <bob-namespace>.
  3. 설치 후 검증의 추론 테스트를 사용하여 새 자격 증명이 작동하는지 확인합니다.
  4. 파드가 정상으로 확인된 후에만 제공자 측에서 이전 자격 증명을 취소합니다.

제공자별 참고 사항:

  • openai_compatible / API 키 — 새 키는 재시작 즉시 적용됩니다. 파드가 정상이면 이전 키를 안전하게 취소할 수 있습니다.
  • bedrock — 재시작하기 전에 AWS에서 새 IAM 액세스 키가 활성화되어 있는지 확인하세요. IAM 전파에는 몇 초가 걸릴 수 있습니다.
  • vertex — 새 서비스 계정 키를 생성하고 base64로 인코딩한 후 시크릿을 업데이트하고 재시작하여 확인한 다음 GCP에서 이전 키를 삭제합니다.
  • ca_cert_pem — 인증서 갱신 시 적용하기 전에 새 인증서가 만료되지 않았는지 확인하세요. TLS 인증서 검증을 참조하세요.

게이트웨이 상태 모니터링

파드 재시작 횟수 — 증가하는 재시작 횟수는 반복적인 시작 실패(잘못된 시크릿 마운트, 구성 구문 분석 오류)의 조기 신호입니다:

oc get pods -n <bob-namespace> -l app=bob-inference \
  -o custom-columns='NAME:.metadata.name,RESTARTS:.status.containerStatuses[0].restartCount'

Liveness 및 Readiness 프로브 — 현재 프로브 구성 및 상태를 확인합니다:

oc describe deploy/bob-inference -n <bob-namespace> | grep -A 10 "Liveness\|Readiness"

주기적인 상태 확인 — /v1/models 엔드포인트는 간단한 활성 상태 확인(liveness check) 역할을 합니다. 유효한 모델 목록을 반환하면 게이트웨이가 작동 중인 것입니다. 모니터링 도구나 클러스터 내부의 cron 작업에서 이를 폴링할 수 있습니다.

로그 및 진단 수집

특정 시간 범위의 로그 (보고된 인시던트를 조사할 때 가장 유용함):

oc logs -n <bob-namespace> deploy/bob-inference \
  --since-time="2025-01-01T12:00:00Z" > bob-inference.log

이전 파드 인스턴스의 로그 (파드가 재시작되어 실패 로그가 사라진 경우):

oc logs -n <bob-namespace> deploy/bob-inference --previous

지원을 위한 전체 진단 번들:

oc describe pod -n <bob-namespace> -l app=bob-inference >> diagnostics.txt
oc get events -n <bob-namespace> --sort-by='.lastTimestamp' >> diagnostics.txt
oc logs -n <bob-namespace> deploy/bob-inference --since=1h >> diagnostics.txt
참고:

진단 번들에는 파드 환경 변수 이름이 포함되어 있지만 시크릿 값은 포함되지 않습니다(시크릿은 마운트되며 로그에 인쇄되지 않음). 지원팀에 보내기 전에 실수로 자격 증명이 출력되었는지 로그를 검토하세요.

연결 및 인증 문제 해결

/v1/models에 모델이 표시되지 않음

  1. exposed: false가 설정되어 있는지 확인하세요 — 설정되어 있다면 정상 동작입니다.
  2. 시작 로그에서 해당 model_name에 대한 등록 오류를 확인하세요.
  3. 제공자 블록을 확인하세요 — 올바른 base_url, model ID 및 자격 증명.

추론 요청 시 401 Unauthorized

  1. bob.modelGateway.secrets의 시크릿 값이 올바르고 최신인지 확인하세요.
  2. 모델 구성의 env.<VAR> 참조가 시크릿 키 이름과 정확히 일치하는지 확인하세요(대소문자 구분).
  3. Inference Service를 재시작하고 다시 시도하세요 — 재시작 없이 시크릿이 업데이트되었을 수 있습니다.
  4. 대역 외(out-of-band)로 자격 증명을 테스트하세요. 인증 유효성 검사를 참조하세요.

502 Bad Gateway 또는 connection refused

  1. 모델 엔드포인트가 가동 중이고 클러스터에서 연결할 수 있는지 확인하세요. 연결성 테스트를 참조하세요.
  2. base_url 문제(후행 슬래시, 잘못된 스키마(http 대 https), 잘못된 포트)를 확인하세요.
  3. 설치 이후 아웃바운드 트래픽을 차단했을 수 있는 네트워크 정책 변경 사항을 확인하세요.

certificate signed by unknown authority

  1. ca_cert_pem이 설정되어 있고 유효한 환경 변수를 참조하는지 확인하세요.
  2. 해당 환경 변수가 bob.modelGateway.secrets에 존재하는지 확인하세요.
  3. 인증서가 만료되지 않았는지 확인하세요: openssl x509 -noout -dates.
  4. 주체 대체 이름(Subject Alternative Names)을 확인하여 인증서가 엔드포인트의 호스트 이름을 다루는지 확인하세요.

Inference Service 파드가 CrashLoopBackOff 상태임

  1. 이전 인스턴스의 로그를 확인하세요: oc logs --previous.
  2. 구성 파싱 오류를 확인하세요 — Model Gateway 구성의 잘못된 형식의 YAML.
  3. Events 섹션에서 누락된 시크릿 마운트를 확인하세요: oc describe pod.
  4. 다시 적용하기 전에 Model Gateway 구성 YAML이 유효한지 확인하세요.
이 주제는 어떤가요?