콘텐츠로 이동

배포 운영

배포 전 검증

helm lint deploy -f deploy/values-dev.yaml
helm lint deploy -f deploy/values-prd.yaml
helm lint deploy -f deploy/values-onprem.yaml

helm template sohri-graph deploy \
  --namespace sohri \
  -f deploy/values-dev.yaml

python -m pytest -q dm/tests/test_deploy_docs.py

On-prem의 실제 최종 manifest를 검증하려면 외부 GitOps 저장소의 현재 image.yaml과 Application이 적용하는 override를 추가해 render해야 합니다. test_deploy_contract.py 전체는 현재 on-prem workflow 기대값이 실제 workflow와 불일치하므로, 그 실패를 배포 계약 위반으로 단정하기 전에 알려진 불일치를 확인합니다.

flowchart LR
    VALUES["Chart + environment values"] --> RENDER["helm lint/template"]
    RENDER --> DIFF["Argo CD diff"]
    DIFF --> SYNC["환경 정책에 따른 sync"]
    SYNC --> ROLLOUT["Rollout"]
    ROLLOUT --> SMOKE["API smoke test"]

확인할 값:

  • 정확한 image repository와 immutable tag
  • release/namespace와 Service port 59212
  • runtime Secret 이름과 OPENAI_API_KEY
  • replica 1, HPA 비활성
  • GCP의 Project/GSA/NEG/ESO 좌표
  • On-prem의 외부 image overlay와 Skill Runtime endpoint

Rollout 확인

kubectl -n <namespace> get deployment,replicaset,pod,service
kubectl -n <namespace> rollout status deployment/<name>
kubectl -n <namespace> describe pod <pod-name>
kubectl -n <namespace> logs deployment/<name>

Startup probe는 현재 설정상 initial delay 10초 후 10초 간격으로 최대 30회 실패를 허용합니다. Readiness 통과, Service endpoint 등록, Secret resolution과 반복적인 liveness 실패가 없는지 확인합니다. GCP에서는 NEG backend health도 별도로 봅니다.

변경 반영

변경 manifest 동작
image.tag Deployment rolling update
ConfigMap 값 checksum/config 변경으로 rolling update
Kubernetes Secret Reloader가 설치·활성화된 경우 Pod restart
Probe/resource/security 값 Deployment rolling update
Service/NEG Service 갱신

ESO의 기본 refresh interval은 1시간입니다. Environment variable은 실행 중인 process에서 자동 갱신되지 않으므로 Secret 변경을 반영하려면 Reloader 또는 수동 rollout이 필요합니다.

Session 제한

SessionManager와 session별 runtime이 process memory에 있으므로 Pod가 재시작되면 session이 소실되고 다른 Pod는 session을 복원할 수 없습니다. Chart validation은 sessionStorage.mode=memory, replicaCount<=1, HPA maxReplicas<=1을 강제합니다. 현재 values는 replica 1과 HPA 비활성입니다.

Rollback

  • GCP: 해당 환경 values의 image.tag를 이전 immutable SHA로 commit하고 외부 Argo CD 정책에 따라 반영합니다.
  • On-prem: 외부 gitops/apps/values/sohri-graph-builder-onprem/image.yaml을 이전 12자 SHA로 commit하고 관리자가 Argo CD diff 후 sync합니다.

latest를 rollback 기준으로 사용하지 않습니다.

장애 점검

증상 우선 확인
ImagePullBackOff repository/tag, image pull Secret, registry 권한
Pod Ready 실패 / probe, port 59212, resource, application log
OpenAI 인증 실패 runtime Secret, ESO/GSA 또는 on-prem Secret, rollout 여부
Skill 호출 실패 sohri-skill-runtime:59213, EndpointSlice, Runtime log
GCP traffic 실패 NEG 이름, endpoint health, load balancer backend
On-prem tag 갱신 실패 GitHub App 설치/secrets, 외부 main ruleset, rebase log

최종적으로 /, /v1과 실제 session/message 흐름을 smoke test하고 이전 정상 image tag를 기록합니다.